Problem mit Proxy DLL

12/06/2013 18:27 HanseDavion#1
Hallo zusammen,

ich bin neu hier im Forum, lese aber schon eine Weile fleissig mit.
Als WorldOfTanks Spieler hab ich mich oft gefragt, ob das Sichtsystem wirklich auf dem Server berechnet wird.
Mit einem Kollegen hab ich da lange drüber philosophiert und wir sind der Meinung, dass der Server zwar die Information, ob ein Panzer sichtbar ist oder nicht, liefert, es am Client aber erst ausgewertet wird.
In diesem Zuge hab ich die Funktionen der umbraob32.dll exportiert um mir eine Proxy DLL dazu zu schreiben.
Verwendet habe ich den Dev-C++ Compiler.
Source:
Code:
#include <windows.h>
#pragma pack(1)


HINSTANCE hLThis = 0;
HINSTANCE hL = 0;
FARPROC p[79] = {0};

int pint0, pint1, pint2, pint3, pint4, pint5, pint6, pint7, pint8, pint9, pint10;
int pint11, pint12, pint13, pint14, pint15, pint16, pint17, pint18, pint19, pint20;
int pint21, pint22, pint23, pint24, pint25, pint26, pint27, pint28, pint29, pint30;
int pint31, pint32, pint33, pint34, pint35, pint36, pint37, pint38, pint39, pint40;
int pint41, pint42, pint43, pint44, pint45, pint46, pint47, pint48, pint49, pint50;
int pint51, pint52, pint53, pint54, pint55, pint56, pint57, pint58, pint59, pint60;
int pint61, pint62, pint63, pint64, pint65, pint66, pint67, pint68, pint69, pint70;
int pint71, pint72, pint73, pint74, pint75, pint76, pint77, pint78;

BOOL WINAPI DllMain(HINSTANCE hInst,DWORD reason,LPVOID)
	{
	if (reason == DLL_PROCESS_ATTACH)
		{
		hLThis = hInst;
		hL = LoadLibrary("umbraob32_.dll");
		if (!hL) return false;


		p[0] = GetProcAddress(hL,"??0Commander@OB@Umbra@@IAE@PAVGraphicsServices@LibraryDefs@12@@Z");
		p[1] = GetProcAddress(hL,"??0GraphicsServices@LibraryDefs@OB@Umbra@@QAE@XZ");
		p[2] = GetProcAddress(hL,"??0SystemServices@LibraryDefs@OB@Umbra@@QAE@XZ");
		p[3] = GetProcAddress(hL,"??1Camera@OB@Umbra@@MAE@XZ");
		p[4] = GetProcAddress(hL,"??1Commander@OB@Umbra@@UAE@XZ");
		p[5] = GetProcAddress(hL,"??1GraphicsServices@LibraryDefs@OB@Umbra@@UAE@XZ");
		p[6] = GetProcAddress(hL,"??1SystemServices@LibraryDefs@OB@Umbra@@UAE@XZ");
		p[7] = GetProcAddress(hL,"?addReference@ReferenceCount@OB@Umbra@@QAEXXZ");
		p[8] = GetProcAddress(hL,"?allocateMemory@SystemServices@LibraryDefs@OB@Umbra@@UAEPAXI@Z");
		p[9] = GetProcAddress(hL,"?allocateQueryObject@GraphicsServices@LibraryDefs@OB@Umbra@@UAEPAXXZ");
		p[10] = GetProcAddress(hL,"?beginNamedEvent@SystemServices@LibraryDefs@OB@Umbra@@UAEXHPBD@Z");
		p[11] = GetProcAddress(hL,"?clearFlags@Library@OB@Umbra@@SAXW4FlagType@LibraryDefs@23@I@Z");
		p[12] = GetProcAddress(hL,"?create@Camera@OB@Umbra@@SAPAV123@XZ");
		p[13] = GetProcAddress(hL,"?create@Cell@OB@Umbra@@SAPAV123@XZ");
		p[14] = GetProcAddress(hL,"?create@OBBModel@OB@Umbra@@SAPAV123@ABVMatrix4x4@3@@Z");
		p[15] = GetProcAddress(hL,"?create@OBBModel@OB@Umbra@@SAPAV123@ABVVector3@3@0@Z");
		p[16] = GetProcAddress(hL,"?create@OBBModel@OB@Umbra@@SAPAV123@PBVVector3@3@H@Z");
		p[17] = GetProcAddress(hL,"?create@Object@OB@Umbra@@SAPAV123@PAVModel@23@@Z");
		p[18] = GetProcAddress(hL,"?endNamedEvent@SystemServices@LibraryDefs@OB@Umbra@@UAEXH@Z");
		p[19] = GetProcAddress(hL,"?error@SystemServices@LibraryDefs@OB@Umbra@@UAEXPBD@Z");
		p[20] = GetProcAddress(hL,"?exit@Library@OB@Umbra@@SAXXZ");
		p[21] = GetProcAddress(hL,"?getCameraToWorldMatrix@Viewer@Commander@OB@Umbra@@QBEXAAVMatrix4x4@4@@Z");
		p[22] = GetProcAddress(hL,"?getCellToCameraMatrix@Viewer@Commander@OB@Umbra@@QBEXAAVMatrix4x4@4@@Z");
		p[23] = GetProcAddress(hL,"?getDataCount@Commander@OB@Umbra@@IBEHXZ");
		p[24] = GetProcAddress(hL,"?getEventCount@Library@OB@Umbra@@SAHXZ");
		p[25] = GetProcAddress(hL,"?getFlags@Library@OB@Umbra@@SAIW4FlagType@LibraryDefs@23@@Z");
		p[26] = GetProcAddress(hL,"?getFrustum@Viewer@Commander@OB@Umbra@@QBEXAAUFrustum@4@@Z");
		p[27] = GetProcAddress(hL,"?getInfoString@Library@OB@Umbra@@SAPBDW4InfoString@LibraryDefs@23@@Z");
		p[28] = GetProcAddress(hL,"?getLine2D@Commander@OB@Umbra@@IBE?AW4LineType@LibraryDefs@23@AAVVector2@3@0AAVVector4@3@@Z");
		p[29] = GetProcAddress(hL,"?getLine3D@Commander@OB@Umbra@@IBE?AW4LineType@LibraryDefs@23@AAVVector3@3@0AAVVector4@3@@Z");
		p[30] = GetProcAddress(hL,"?getObjectData@Commander@OB@Umbra@@IBEPBVObjectData@123@H@Z");
		p[31] = GetProcAddress(hL,"?getOcclusionQueryData@Commander@OB@Umbra@@IBEPBVOcclusionQueryData@123@H@Z");
		p[32] = GetProcAddress(hL,"?getOcclusionQueryResultData@Commander@OB@Umbra@@IBEPAVOcclusionQueryResultData@123@H@Z");
		p[33] = GetProcAddress(hL,"?getProjectionMatrix@Viewer@Commander@OB@Umbra@@QBEXAAVMatrix4x4@4@W4Handedness@1234@@Z");
		p[34] = GetProcAddress(hL,"?getQueryObject@OcclusionQueryData@Commander@OB@Umbra@@QBEPAXXZ");
		p[35] = GetProcAddress(hL,"?getQueryObject@OcclusionQueryResultData@Commander@OB@Umbra@@QBEPAXXZ");
		p[36] = GetProcAddress(hL,"?getStatistic@Library@OB@Umbra@@SAMW4Statistic@LibraryDefs@23@@Z");
		p[37] = GetProcAddress(hL,"?getStatisticName@Library@OB@Umbra@@SAPBDW4Statistic@LibraryDefs@23@@Z");
		p[38] = GetProcAddress(hL,"?getTextMessage@Commander@OB@Umbra@@IBEPBDXZ");
		p[39] = GetProcAddress(hL,"?getTileMask@ObjectData@Commander@OB@Umbra@@QBEIXZ");
		p[40] = GetProcAddress(hL,"?getTriangleCount@OcclusionQueryData@Commander@OB@Umbra@@QBEIXZ");
		p[41] = GetProcAddress(hL,"?getTriangles@OcclusionQueryData@Commander@OB@Umbra@@QBEPBVVector3i@4@XZ");
		p[42] = GetProcAddress(hL,"?getUserPointer@ObjectData@Commander@OB@Umbra@@QBEPAXXZ");
		p[43] = GetProcAddress(hL,"?getVertexCount@OcclusionQueryData@Commander@OB@Umbra@@QBEIXZ");
		p[44] = GetProcAddress(hL,"?getVertices@OcclusionQueryData@Commander@OB@Umbra@@QBEPBVVector3@4@XZ");
		p[45] = GetProcAddress(hL,"?getViewer@Commander@OB@Umbra@@IBEPBVViewer@123@XZ");
		p[46] = GetProcAddress(hL,"?getWaitForResult@OcclusionQueryResultData@Commander@OB@Umbra@@QBE_NXZ");
		p[47] = GetProcAddress(hL,"?init@Library@OB@Umbra@@SAXW4MatrixFormat@LibraryDefs@23@PAVSystemServices@523@@Z");
		p[48] = GetProcAddress(hL,"?initThreads@Library@OB@Umbra@@SAXPAXHPAHH@Z");
		p[49] = GetProcAddress(hL,"?isOccluder@ObjectData@Commander@OB@Umbra@@QBE_NXZ");
		p[50] = GetProcAddress(hL,"?namedCounter@SystemServices@LibraryDefs@OB@Umbra@@UAEXMPAD@Z");
		p[51] = GetProcAddress(hL,"?processVisibility@Camera@OB@Umbra@@QAEXPAVCommander@23@@Z");
		p[52] = GetProcAddress(hL,"?release@ReferenceCount@OB@Umbra@@QBEXXZ");
		p[53] = GetProcAddress(hL,"?releaseMemory@SystemServices@LibraryDefs@OB@Umbra@@UAEXPAX@Z");
		p[54] = GetProcAddress(hL,"?releaseQueryObject@GraphicsServices@LibraryDefs@OB@Umbra@@UAEXPAX@Z");
		p[55] = GetProcAddress(hL,"?resetStatistics@Library@OB@Umbra@@SAXXZ");
		p[56] = GetProcAddress(hL,"?resolveVisibility@Camera@OB@Umbra@@QBEXXZ");
		p[57] = GetProcAddress(hL,"?set@Object@OB@Umbra@@QAEXW4Property@123@_N@Z");
		p[58] = GetProcAddress(hL,"?setBitmask@Camera@OB@Umbra@@QAEXI@Z");
		p[59] = GetProcAddress(hL,"?setBitmask@Object@OB@Umbra@@QAEXI@Z");
		p[60] = GetProcAddress(hL,"?setCameraToCellMatrix@Camera@OB@Umbra@@QAEXABVMatrix4x4@3@@Z");
		p[61] = GetProcAddress(hL,"?setCell@Camera@OB@Umbra@@QAEXPAVCell@23@@Z");
		p[62] = GetProcAddress(hL,"?setCell@Object@OB@Umbra@@QAEXPAVCell@23@@Z");
		p[63] = GetProcAddress(hL,"?setCullDistance@Object@OB@Umbra@@QAEXMM@Z");
		p[64] = GetProcAddress(hL,"?setCullPlanes@Camera@OB@Umbra@@QAEXPBVVector4@3@HW4Space@123@@Z");
		p[65] = GetProcAddress(hL,"?setEvaluationKey@Library@OB@Umbra@@SAXPBD@Z");
		p[66] = GetProcAddress(hL,"?setFlags@Library@OB@Umbra@@SAXW4FlagType@LibraryDefs@23@I@Z");
		p[67] = GetProcAddress(hL,"?setFrustum@Camera@OB@Umbra@@QAEXABUFrustum@3@@Z");
		p[68] = GetProcAddress(hL,"?setFrustumAndCullPlanes@Camera@OB@Umbra@@QAEXABUFrustum@3@PBVVector4@3@HW4Space@123@@Z");
		p[69] = GetProcAddress(hL,"?setModel@Object@OB@Umbra@@QAEXPAVModel@23@@Z");
		p[70] = GetProcAddress(hL,"?setObjectToCellMatrix@Object@OB@Umbra@@QAEXABVMatrix4x4@3@@Z");
		p[71] = GetProcAddress(hL,"?setProperties@Camera@OB@Umbra@@QAEXI@Z");
		p[72] = GetProcAddress(hL,"?setRenderCost@Object@OB@Umbra@@QAEXW4RenderCost@123@@Z");
		p[73] = GetProcAddress(hL,"?setResult@OcclusionQueryResultData@Commander@OB@Umbra@@QAEX_J@Z");
		p[74] = GetProcAddress(hL,"?setTilingScenario@Camera@OB@Umbra@@QAEXPBUTile@23@H@Z");
		p[75] = GetProcAddress(hL,"?setTome@Cell@OB@Umbra@@QAEXPBVTome@3@@Z");
		p[76] = GetProcAddress(hL,"?setTomeID@Object@OB@Umbra@@QAEXI@Z");
		p[77] = GetProcAddress(hL,"?setUserPointer@ReferenceCount@OB@Umbra@@QAEXPAX@Z");
		p[78] = GetProcAddress(hL,"?textCommand@Library@OB@Umbra@@SAHPAVCommander@23@PBD@Z");


		}
	if (reason == DLL_PROCESS_DETACH)
		{
		FreeLibrary(hL);
		}

	return 1;
	}

// ??0Commander@OB@Umbra@@IAE@PAVGraphicsServices@LibraryDefs@12@@Z
extern "C" __declspec(naked) void __stdcall __E__0__()
{
    pint0 = (int)p[0*4];
	__asm__ ("jmp _pint0");
}	
	

// ??0GraphicsServices@LibraryDefs@OB@Umbra@@QAE@XZ
extern "C" __declspec(naked) void __stdcall __E__1__()
{
	pint1 = (int)p[1*4];
    __asm__ ("jmp _pint1");		
}

// ??0SystemServices@LibraryDefs@OB@Umbra@@QAE@XZ
extern "C" __declspec(naked) void __stdcall __E__2__()
{
	pint2 = (int)p[2*4];
    __asm__ ("jmp _pint2");
}

// ??1Camera@OB@Umbra@@MAE@XZ
extern "C" __declspec(naked) void __stdcall __E__3__()
{
	pint3 = (int)p[3*4];
    __asm__ ("jmp _pint3");
}

// ??1Commander@OB@Umbra@@UAE@XZ
extern "C" __declspec(naked) void __stdcall __E__4__()
{
	pint4 = (int)p[4*4];
    __asm__ ("jmp _pint4");
}

// ??1GraphicsServices@LibraryDefs@OB@Umbra@@UAE@XZ
extern "C" __declspec(naked) void __stdcall __E__5__()
{
	pint5 = (int)p[5*4];
    __asm__ ("jmp _pint5");
}

// ??1SystemServices@LibraryDefs@OB@Umbra@@UAE@XZ
extern "C" __declspec(naked) void __stdcall __E__6__()
{
	pint6 = (int)p[6*4];
    __asm__ ("jmp _pint6");
}

// ?addReference@ReferenceCount@OB@Umbra@@QAEXXZ
extern "C" __declspec(naked) void __stdcall __E__7__()
{
	pint7 = (int)p[7*4];
    __asm__ ("jmp _pint7");
}

// ?allocateMemory@SystemServices@LibraryDefs@OB@Umbra@@UAEPAXI@Z
extern "C" __declspec(naked) void __stdcall __E__8__()
{
	pint8 = (int)p[8*4];
    __asm__ ("jmp _pint8");
}

// ?allocateQueryObject@GraphicsServices@LibraryDefs@OB@Umbra@@UAEPAXXZ
extern "C" __declspec(naked) void __stdcall __E__9__()
{
	pint9 = (int)p[9*4];
    __asm__ ("jmp _pint9");
}

// ?beginNamedEvent@SystemServices@LibraryDefs@OB@Umbra@@UAEXHPBD@Z
extern "C" __declspec(naked) void __stdcall __E__10__()
{
	pint10 = (int)p[10*4];
    __asm__ ("jmp _pint10");
}

// ?clearFlags@Library@OB@Umbra@@SAXW4FlagType@LibraryDefs@23@I@Z
extern "C" __declspec(naked) void __stdcall __E__11__()
{
	pint11 = (int)p[11*4];
    __asm__ ("jmp _pint11");
}

// ?create@Camera@OB@Umbra@@SAPAV123@XZ
extern "C" __declspec(naked) void __stdcall __E__12__()
{
	pint12 = (int)p[12*4];
    __asm__ ("jmp _pint12");
}

// ?create@Cell@OB@Umbra@@SAPAV123@XZ
extern "C" __declspec(naked) void __stdcall __E__13__()
{
	pint13 = (int)p[13*4];
    __asm__ ("jmp _pint13");
}

// ?create@OBBModel@OB@Umbra@@SAPAV123@ABVMatrix4x4@3@@Z
extern "C" __declspec(naked) void __stdcall __E__14__()
{
	pint14 = (int)p[0*4];
    __asm__ ("jmp _pint14");
}

// ?create@OBBModel@OB@Umbra@@SAPAV123@ABVVector3@3@0@Z
extern "C" __declspec(naked) void __stdcall __E__15__()
{
	pint15 = (int)p[15*4];
    __asm__ ("jmp _pint15");
}

// ?create@OBBModel@OB@Umbra@@SAPAV123@PBVVector3@3@H@Z
extern "C" __declspec(naked) void __stdcall __E__16__()
{
	pint16 = (int)p[16*4];
    __asm__ ("jmp _pint16");
}

// ?create@Object@OB@Umbra@@SAPAV123@PAVModel@23@@Z
extern "C" __declspec(naked) void __stdcall __E__17__()
{
	pint17 = (int)p[17*4];
    __asm__ ("jmp _pint17");
}

// ?endNamedEvent@SystemServices@LibraryDefs@OB@Umbra@@UAEXH@Z
extern "C" __declspec(naked) void __stdcall __E__18__()
{
	pint18 = (int)p[18*4];
    __asm__ ("jmp _pint18");
}

// ?error@SystemServices@LibraryDefs@OB@Umbra@@UAEXPBD@Z
extern "C" __declspec(naked) void __stdcall __E__19__()
{
	pint19 = (int)p[19*4];
    __asm__ ("jmp _pint19");
}

// ?exit@Library@OB@Umbra@@SAXXZ
extern "C" __declspec(naked) void __stdcall __E__20__()
{
	pint20 = (int)p[20*4];
    __asm__ ("jmp _pint20");
}

// ?getCameraToWorldMatrix@Viewer@Commander@OB@Umbra@@QBEXAAVMatrix4x4@4@@Z
extern "C" __declspec(naked) void __stdcall __E__21__()
{
	pint21 = (int)p[21*4];
    __asm__ ("jmp _pint21");
}

// ?getCellToCameraMatrix@Viewer@Commander@OB@Umbra@@QBEXAAVMatrix4x4@4@@Z
extern "C" __declspec(naked) void __stdcall __E__22__()
{
	pint22 = (int)p[22*4];
    __asm__ ("jmp _pint22");
}

// ?getDataCount@Commander@OB@Umbra@@IBEHXZ
extern "C" __declspec(naked) void __stdcall __E__23__()
{
	pint23 = (int)p[23*4];
    __asm__ ("jmp _pint23");
}

// ?getEventCount@Library@OB@Umbra@@SAHXZ
extern "C" __declspec(naked) void __stdcall __E__24__()
{
	pint24 = (int)p[24*4];
    __asm__ ("jmp _pint24");
}

// ?getFlags@Library@OB@Umbra@@SAIW4FlagType@LibraryDefs@23@@Z
extern "C" __declspec(naked) void __stdcall __E__25__()
{
	pint25 = (int)p[0*4];
    __asm__ ("jmp _pint25");
}

// ?getFrustum@Viewer@Commander@OB@Umbra@@QBEXAAUFrustum@4@@Z
extern "C" __declspec(naked) void __stdcall __E__26__()
{
	pint26 = (int)p[26*4];
    __asm__ ("jmp _pint26");
}

// ?getInfoString@Library@OB@Umbra@@SAPBDW4InfoString@LibraryDefs@23@@Z
extern "C" __declspec(naked) void __stdcall __E__27__()
{
	pint27 = (int)p[27*4];
    __asm__ ("jmp _pint27");
}

// ?getLine2D@Commander@OB@Umbra@@IBE?AW4LineType@LibraryDefs@23@AAVVector2@3@0AAVVector4@3@@Z
extern "C" __declspec(naked) void __stdcall __E__28__()
{
	pint28 = (int)p[28*4];
    __asm__	("jmp _pint28");
}

// ?getLine3D@Commander@OB@Umbra@@IBE?AW4LineType@LibraryDefs@23@AAVVector3@3@0AAVVector4@3@@Z
extern "C" __declspec(naked) void __stdcall __E__29__()
{
	pint29 = (int)p[29*4];
    __asm__	("jmp _pint29");
}

// ?getObjectData@Commander@OB@Umbra@@IBEPBVObjectData@123@H@Z
extern "C" __declspec(naked) void __stdcall __E__30__()
{
	pint30 = (int)p[30*4];
    __asm__	("jmp _pint30");
}

// ?getOcclusionQueryData@Commander@OB@Umbra@@IBEPBVOcclusionQueryData@123@H@Z
extern "C" __declspec(naked) void __stdcall __E__31__()
{
	pint31 = (int)p[31*4];
    __asm__	("jmp _pint31");
}

// ?getOcclusionQueryResultData@Commander@OB@Umbra@@IBEPAVOcclusionQueryResultData@123@H@Z
extern "C" __declspec(naked) void __stdcall __E__32__()
{
	pint32 = (int)p[32*4];
    __asm__	("jmp _pint32");
}

// ?getProjectionMatrix@Viewer@Commander@OB@Umbra@@QBEXAAVMatrix4x4@4@W4Handedness@1234@@Z
extern "C" __declspec(naked) void __stdcall __E__33__()
{
	pint33 = (int)p[33*4];
    __asm__ ("jmp _pint33");
}

// ?getQueryObject@OcclusionQueryData@Commander@OB@Umbra@@QBEPAXXZ
extern "C" __declspec(naked) void __stdcall __E__34__()
{
	pint34 = (int)p[34*4];
    __asm__ ("jmp _pint34");
}

// ?getQueryObject@OcclusionQueryResultData@Commander@OB@Umbra@@QBEPAXXZ
extern "C" __declspec(naked) void __stdcall __E__35__()
{
	pint35 = (int)p[35*4];
    __asm__	("jmp _pint35");
}

// ?getStatistic@Library@OB@Umbra@@SAMW4Statistic@LibraryDefs@23@@Z
extern "C" __declspec(naked) void __stdcall __E__36__()
{
	pint36 = (int)p[36*4];
    __asm__	("jmp _pint36");
}

// ?getStatisticName@Library@OB@Umbra@@SAPBDW4Statistic@LibraryDefs@23@@Z
extern "C" __declspec(naked) void __stdcall __E__37__()
{
	pint37 = (int)p[37*4];
    __asm__ ("jmp _pint37");
}

// ?getTextMessage@Commander@OB@Umbra@@IBEPBDXZ
extern "C" __declspec(naked) void __stdcall __E__38__()
{
	pint38 = (int)p[38*4];
    __asm__	("jmp _pint38");
}

// ?getTileMask@ObjectData@Commander@OB@Umbra@@QBEIXZ
extern "C" __declspec(naked) void __stdcall __E__39__()
{
	pint39 = (int)p[39*4];
    __asm__	("jmp _pint39");
}

// ?getTriangleCount@OcclusionQueryData@Commander@OB@Umbra@@QBEIXZ
extern "C" __declspec(naked) void __stdcall __E__40__()
{
	pint40 = (int)p[40*4];
    __asm__	("jmp _pint40");
}

// ?getTriangles@OcclusionQueryData@Commander@OB@Umbra@@QBEPBVVector3i@4@XZ
extern "C" __declspec(naked) void __stdcall __E__41__()
{
	pint41 = (int)p[41*4];
    __asm__	("jmp _pint41");
}

// ?getUserPointer@ObjectData@Commander@OB@Umbra@@QBEPAXXZ
extern "C" __declspec(naked) void __stdcall __E__42__()
{
	pint42 = (int)p[42*4];
    __asm__	("jmp _pint42");
}

// ?getVertexCount@OcclusionQueryData@Commander@OB@Umbra@@QBEIXZ
extern "C" __declspec(naked) void __stdcall __E__43__()
{
	pint43 = (int)p[43*4];
    __asm__	("jmp _pint43");
}

// ?getVertices@OcclusionQueryData@Commander@OB@Umbra@@QBEPBVVector3@4@XZ
extern "C" __declspec(naked) void __stdcall __E__44__()
{
	pint44 = (int)p[44*4];
    __asm__	("jmp _pint44");
}

// ?getViewer@Commander@OB@Umbra@@IBEPBVViewer@123@XZ
extern "C" __declspec(naked) void __stdcall __E__45__()
{
	pint45 = (int)p[45*4];
    __asm__	("jmp _pint45");
}

// ?getWaitForResult@OcclusionQueryResultData@Commander@OB@Umbra@@QBE_NXZ
extern "C" __declspec(naked) void __stdcall __E__46__()
{
	pint46 = (int)p[46*4];
    __asm__	("jmp _pint46");
}

// ?init@Library@OB@Umbra@@SAXW4MatrixFormat@LibraryDefs@23@PAVSystemServices@523@@Z
extern "C" __declspec(naked) void __stdcall __E__47__()
{
	pint47 = (int)p[47*4];
    __asm__	("jmp _pint47");
}

// ?initThreads@Library@OB@Umbra@@SAXPAXHPAHH@Z
extern "C" __declspec(naked) void __stdcall __E__48__()
{
	pint48 = (int)p[48*4];
    __asm__	("jmp _pint48");
}

// ?isOccluder@ObjectData@Commander@OB@Umbra@@QBE_NXZ
extern "C" __declspec(naked) void __stdcall __E__49__()
{
	pint49 = (int)p[49*4];
    __asm__	("jmp _pint49");
}

// ?namedCounter@SystemServices@LibraryDefs@OB@Umbra@@UAEXMPAD@Z
extern "C" __declspec(naked) void __stdcall __E__50__()
{
	pint50 = (int)p[50*4];
    __asm__	("jmp _pint50");
}

// ?processVisibility@Camera@OB@Umbra@@QAEXPAVCommander@23@@Z
extern "C" __declspec(naked) void __stdcall __E__51__()
{
	pint51 = (int)p[51*4];
    __asm__	("jmp _pint51");
}

// ?release@ReferenceCount@OB@Umbra@@QBEXXZ
extern "C" __declspec(naked) void __stdcall __E__52__()
{
	pint52 = (int)p[52*4];
    __asm__	("jmp _pint52");
}

// ?releaseMemory@SystemServices@LibraryDefs@OB@Umbra@@UAEXPAX@Z
extern "C" __declspec(naked) void __stdcall __E__53__()
{
	pint53 = (int)p[53*4];
    __asm__	("jmp _pint53");
}

// ?releaseQueryObject@GraphicsServices@LibraryDefs@OB@Umbra@@UAEXPAX@Z
extern "C" __declspec(naked) void __stdcall __E__54__()
{
	pint54 = (int)p[54*4];
    __asm__	("jmp _pint54");
}

// ?resetStatistics@Library@OB@Umbra@@SAXXZ
extern "C" __declspec(naked) void __stdcall __E__55__()
{
	pint55 = (int)p[55*4];
    __asm__	("jmp _pint55");
}

// ?resolveVisibility@Camera@OB@Umbra@@QBEXXZ
extern "C" __declspec(naked) void __stdcall __E__56__()
{
	pint56 = (int)p[56*4];
    __asm__	("jmp _pint56");
}

// ?set@Object@OB@Umbra@@QAEXW4Property@123@_N@Z
extern "C" __declspec(naked) void __stdcall __E__57__()
{
	pint57 = (int)p[57*4];
    __asm__	("jmp _pint57");
}

// ?setBitmask@Camera@OB@Umbra@@QAEXI@Z
extern "C" __declspec(naked) void __stdcall __E__58__()
{
	pint58 = (int)p[58*4];
    __asm__	("jmp _pint58");
}

// ?setBitmask@Object@OB@Umbra@@QAEXI@Z
extern "C" __declspec(naked) void __stdcall __E__59__()
{
	pint59 = (int)p[59*4];
    __asm__	("jmp _pint59");
}

// ?setCameraToCellMatrix@Camera@OB@Umbra@@QAEXABVMatrix4x4@3@@Z
extern "C" __declspec(naked) void __stdcall __E__60__()
{
	pint60 = (int)p[60*4];
    __asm__	("jmp _pint60");
}

// ?setCell@Camera@OB@Umbra@@QAEXPAVCell@23@@Z
extern "C" __declspec(naked) void __stdcall __E__61__()
{
	pint61 = (int)p[61*4];
    __asm__	("jmp _pint61");
}

// ?setCell@Object@OB@Umbra@@QAEXPAVCell@23@@Z
extern "C" __declspec(naked) void __stdcall __E__62__()
{
	pint62 = (int)p[62*4];
    __asm__	("jmp _pint62");
}

// ?setCullDistance@Object@OB@Umbra@@QAEXMM@Z
extern "C" __declspec(naked) void __stdcall __E__63__()
{
	pint63 = (int)p[63*4];
    __asm__	("jmp _pint63");
}

// ?setCullPlanes@Camera@OB@Umbra@@QAEXPBVVector4@3@HW4Space@123@@Z
extern "C" __declspec(naked) void __stdcall __E__64__()
{
	pint64 = (int)p[64*4];
    __asm__	("jmp _pint64");
}

// ?setEvaluationKey@Library@OB@Umbra@@SAXPBD@Z
extern "C" __declspec(naked) void __stdcall __E__65__()
{
	pint65 = (int)p[65*4];
    __asm__	("jmp _pint65");
}

// ?setFlags@Library@OB@Umbra@@SAXW4FlagType@LibraryDefs@23@I@Z
extern "C" __declspec(naked) void __stdcall __E__66__()
{
	pint66 = (int)p[66*4];
    __asm__	("jmp _pint66");
}

// ?setFrustum@Camera@OB@Umbra@@QAEXABUFrustum@3@@Z
extern "C" __declspec(naked) void __stdcall __E__67__()
{
	pint67 = (int)p[67*4];
    __asm__	("jmp _pint67");
}

// ?setFrustumAndCullPlanes@Camera@OB@Umbra@@QAEXABUFrustum@3@PBVVector4@3@HW4Space@123@@Z
extern "C" __declspec(naked) void __stdcall __E__68__()
{
	pint68 = (int)p[68*4];
    __asm__	("jmp _pint68");
}

// ?setModel@Object@OB@Umbra@@QAEXPAVModel@23@@Z
extern "C" __declspec(naked) void __stdcall __E__69__()
{
	pint69 = (int)p[69*4];
    __asm__	("jmp _pint69");
}

// ?setObjectToCellMatrix@Object@OB@Umbra@@QAEXABVMatrix4x4@3@@Z
extern "C" __declspec(naked) void __stdcall __E__70__()
{
	pint70 = (int)p[70*4];
    __asm__	("jmp _pint70");
}

// ?setProperties@Camera@OB@Umbra@@QAEXI@Z
extern "C" __declspec(naked) void __stdcall __E__71__()
{
	pint71 = (int)p[71*4];
    __asm__	("jmp _pint71");
}

// ?setRenderCost@Object@OB@Umbra@@QAEXW4RenderCost@123@@Z
extern "C" __declspec(naked) void __stdcall __E__72__()
{
	pint72 = (int)p[72*4];
    __asm__	("jmp _pint72");
}

// ?setResult@OcclusionQueryResultData@Commander@OB@Umbra@@QAEX_J@Z
extern "C" __declspec(naked) void __stdcall __E__73__()
{
	pint73 = (int)p[73*4];
    __asm__	("jmp _pint73");
}

// ?setTilingScenario@Camera@OB@Umbra@@QAEXPBUTile@23@H@Z
extern "C" __declspec(naked) void __stdcall __E__74__()
{
	pint74 = (int)p[74*4];
    __asm__	("jmp _pint74");
}

// ?setTome@Cell@OB@Umbra@@QAEXPBVTome@3@@Z
extern "C" __declspec(naked) void __stdcall __E__75__()
{
	pint75 = (int)p[75*4];
    __asm__	("jmp _pint75");
}

// ?setTomeID@Object@OB@Umbra@@QAEXI@Z
extern "C" __declspec(naked) void __stdcall __E__76__()
{
	pint76 = (int)p[76*4];
    __asm__ ("jmp _pint76");
}

// ?setUserPointer@ReferenceCount@OB@Umbra@@QAEXPAX@Z
extern "C" __declspec(naked) void __stdcall __E__77__()
{
	pint77 = (int)p[77*4];
    __asm__	("jmp _pint77");
}

// ?textCommand@Library@OB@Umbra@@SAHPAVCommander@23@PBD@Z
extern "C" __declspec(naked) void __stdcall __E__78__()
{
	pint78 = (int)p[78*4];
    __asm__	("jmp _pint78");
}
Leider funktioniert die Initialisierung nicht mit der Fehlermeldung
"Fehler bei Initialisierung 0xc000007b"

Hat vielleicht jemand einen Tipp woran es liegen kann?
Falls noch weitere Infos zu den Funktionen aus der DLL nötig, kann ich die posten.(zumindest das was der Disassembler hergibt)

Falls ich im falschen Forum gepostet habe, dann seht es mir bitte nach.

Gruß
Hanse

Edit:
Ok, hab vergessen beim Kompilieren das DEF File mit anzugeben.
WOT Fenster öffnet sich schonmal kurz, wird dann aber wieder geschlossen.......mal schauen.
12/06/2013 20:00 XxharCs#2
Auch wenn der Client es auswertet, geschieht das checken, berechnen etc. auf dem Server. Du kannst vielleicht einen Effekt bei dir auslösen, dieser kann aber falsch etc. sein, da wie gesagt das ganze auf dem Server passiert.

Eine Möglichkeit bei so einem Game zu cheaten/hacken wär, Packets mitzulesen, verändern und an den Server schicken. Sprich das ganze bei dir emulieren und an den Server dann schicken.

Wo ich mir WoT zum ersten mal geholt und angesehen hab, konnte ich schon im Menü nach dem einloggen erkennen, dass es eine Art "Browser" ist. Wenn du in den Shop gehen wolltest etc. hat es immer bissl länger geladen(und hatte leichte Merkmale von Browsern die eine Seite laden), bei anderen Games passiert sowas eigentlich viel schneller, dies hat mich dann vergewissert das ca 90% des Spiels auf dem Server basiert/läuft.


Das ist die Zukunft und eine Art des Anti-Cheatings. Es wird alles mehr auf den Servern ausgelagert und der Server übernimmt immer mehr und mehr, der Client kümmert sich fürs darstellen.

Falls ich mich wo täusche, dann bitte darauf hinweisen.
12/06/2013 20:19 HanseDavion#3
Das es eine Art Browser mit Python Verarbeitung ist haben wir auch schon festgestellt. Die komplette Spiellogik wird in den vorkompilierten Pythonscripts erledigt.
Ich würde drauf wetten, dass alle Vektoren von Mitspielern einer Runde an den Client gesendet werden und per Flag geregelt wird welcher Panzer sichtbar ist und welcher nicht.
Die Funktionen in der umbraob32.dll weisen jedenfalls daraufhin.
Wenn man nun generell alle Feindpanzer Flags auf "sichtbar" setzt, ist es völlig egal was der Server sendet oder macht, am Client sind die Panzer immer sichtbar.
12/06/2013 20:29 XxharCs#4
Immer sichtbar, aber ob die Position stimmt? ;) Der Server sendet dir immer wieder neue Position mit den Flags etc. Wie gesagt bei dir ist es sichtbar, aber diese Information muss nicht stimmen
12/06/2013 20:53 HanseDavion#5
Da die Vektoren mitgesendet werden stimmt auch die Position.
An den Positionsdaten wird ja nichts geändert, nur am Flag.
12/06/2013 22:39 Dr. Coxxy#6
dass du in den jeweiligen funktionen jeweils den arrayindex * 4 nimmst ist auf jedenfall falsch.
was soll die proxy dll überhaupt - und wo kommt genau der fehler?
außerdem generell net ganz schön das ganze unnötige kopieren da.
und wenn du unter windows arbeitest nimm visual studio, express version ist kostenlos, kann mehr als devc++ und hat by default nen aktuellen/brauchbaren compiler.
12/07/2013 00:00 HanseDavion#7
Die Proxy DLL soll den Sinn haben, dass ich die Daten die da durchlaufen manipulieren will.
Momentan will ich erstmal erreichen, dass sie vom Program ordentlich gefressen wird.
Die Kopiererei muss so gemacht werden, da der Linker von dev-c++ sonst den Code nicht kompiliert. Nicht schön aber selten, ich weiss.......
Der Initialisierungsfehler ist schon behoben, wie ich schon schrieb, hatte vergessen die DEF Datei mit zuverarbeiten.
Die original DLL läd einen haufen System DLLs nach und da liegt jetzt der Knackpunkt. Das Program startet schon, aber schliesst dann sofort wieder.
Welche DLLs nachgeladen werden hab ich mir durch den dependensy walker geholt.
Momentan hat die Proxy DLL ja nur die Funktionspointer und läd keine weiteren DLLs nach.
Bin offen für Ansätz wie man das angehen kann.

Ja VS2008Prof hab ich schon, aber noch nicht installiert.
12/07/2013 10:03 +Yazzn#8
LoadLibrary in DllMain?
Quote:
The entry-point function should perform only simple initialization or termination tasks. It must not call the LoadLibrary or LoadLibraryEx function (or a function that calls these functions), because this may create dependency loops in the DLL load order. This can result in a DLL being used before the system has executed its initialization code. Similarly, the entry-point function must not call the FreeLibrary function (or a function that calls FreeLibrary) during process termination, because this can result in a DLL being used after the system has executed its termination code.
-- [Only registered and activated users can see links. Click Here To Register...]
12/07/2013 13:26 Lazeboy#9
Quote:
Originally Posted by XxharCs View Post
Auch wenn der Client es auswertet, geschieht das checken, berechnen etc. auf dem Server. Du kannst vielleicht einen Effekt bei dir auslösen, dieser kann aber falsch etc. sein, da wie gesagt das ganze auf dem Server passiert.

Eine Möglichkeit bei so einem Game zu cheaten/hacken wär, Packets mitzulesen, verändern und an den Server schicken. Sprich das ganze bei dir emulieren und an den Server dann schicken.

Wo ich mir WoT zum ersten mal geholt und angesehen hab, konnte ich schon im Menü nach dem einloggen erkennen, dass es eine Art "Browser" ist. Wenn du in den Shop gehen wolltest etc. hat es immer bissl länger geladen(und hatte leichte Merkmale von Browsern die eine Seite laden), bei anderen Games passiert sowas eigentlich viel schneller, dies hat mich dann vergewissert das ca 90% des Spiels auf dem Server basiert/läuft.


Das ist die Zukunft und eine Art des Anti-Cheatings. Es wird alles mehr auf den Servern ausgelagert und der Server übernimmt immer mehr und mehr, der Client kümmert sich fürs darstellen.

Falls ich mich wo täusche, dann bitte darauf hinweisen.
Alles was mit Packet-Manipulation zu hacken geht, geht auch ohne ;)

@TE:
warum rechnest da jede adresse "mal" 4?
probiers mal so

Code:
__asm{jmp p[0]}
__asm{jmp p[1]}
__asm{jmp p[2]}
...
...
...
12/09/2013 09:26 HanseDavion#10
Hallo zusammen,

sorry das ich mich erst jetzt melde, Wochenende war ich zeitlich zu eingespannt.
Ja das *4 stammt vom sizeof(void*), werds ändern.
Die abhängigen DLLs werd ich auch nachladen.
Melde mich dann wieder.
12/11/2013 12:31 HanseDavion#11
Hallöchen,

so ich hab den ganzen Code jetzt in VS2008 Prof. überführt.
Die Kompilierung funktioniert auch, aber es gibt Probleme mit dem DEF File.
Die Funktionsnamen werden nicht korrekt aus dem DEF File übernommen.

Beispiel:
EXPORTS
??0Commander@OB@Umbra@@IAE@PAVGraphicsServices@Lib raryDefs@12@@Z=__E__0__ @1

In der fertigen DLL findet man dann nur die Funktion "??0Commander".
Es wird immer nur bis zum ersten @ Zeichen übernommen und dann ist Feierabend.

Hochkommas und Escape-Zeichen hab ich schon ausprobiert, geht nicht.
Kann mir da jemand helfen?

Zu meiner Entlastung will ich sagen, dass ich vorher nie mit Visual Studio gearbeitet habe. Kenn mich also nicht mit den Eigenheiten aus.