Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
błąd składni asemblera inline (dx9-endscene-midfunction-hook XP)
#1
Kod:   #include <windows.h> #include <d3d9.h> #include <d3dx9.h> #pragma comment (lib, "d3d9.lib") #pragma comment (lib, "d3dx9.lib") DWORD * VTable; DWORD dwEndscene_hook, dwEndscene_ret; BYTE EndSceneOpCodes [6]; __declspec (naga) void MyEndscene () {__asm {// większość rejestrów została już zachowana pushaf; // jesteśmy w środku warunkowego jmp mov dword ptr ss: [ebp - 1C], edi; mov dword ptr ss: [ebp - 18], ebx; // wymień poprawiony kod mov m_pD3Ddev, esi; // Pobierz urządzenie (wcześniej załadowane)} __asm {popaf; // je ustawia jmp dwEndscene_ret; // powrót do normalnej wersji końcowej}} bool bCompare (const BYTE * pData, const BYTE * bMask, const char * szMask) {for (; * szMask; + + szMask, ++ pData, ++ bMask) if (* szMask == 'x' && * pData! = * bMask) return 0; return (* szMask) == NULL; } DWORD FindPattern (DWORD dwAddress, DWORD dwLen, BYTE * bMask, char * szMask) {dla (DWORD i = 0; i <dwLen; i ++) if (bCompare ((BYTE *) (dwAddress + i), bMask, szMask)) return (DWORD) (dwAddress + i); return 0; } void * DetourCreate (BYTE * src, const BYTE * dst, const int len) {BYTE * jmp; DWORD dwback; DWORD jumpto, newjump; VirtualProtect (src, len, PAGE_READWRITE i dwback); if (src [0] == 0xE9) {jmp = (BYTE *) malloc (10); jumpto = (* (DWORD *) (src + 1)) + ((DWORD) src) + 5; newjump = (jumpto - (DWORD) (jmp + 5)); jmp [0] = 0xE9; * (DWORD *) (jmp + 1) = newjump; jmp + = 5; jmp [0] = 0xE9; * (DWORD *) (jmp + 1) = (DWORD) (src - jmp); } else {jmp = (BYTE *) malloc (5 + len); memcpy (jmp, src, len); jmp + = len; jmp [0] = 0xE9; * (DWORD *) (jmp + 1) = (DWORD) (src + len - jmp) - 5; } src [0] = 0xE9; * (DWORD *) (src + 1) = (DWORD) (dst - src) - 5; dla (int i = 5; i <len; i ++) src [i] = 0x90; VirtualProtect (src, len, dwback i dwback); return (jmp - len); } void Dx9Hook (LPCSTR D3D9) {DWORD hD3D = NULL; while (! hD3D) hD3D = (DWORD) GetModuleHandle (D3D9); DWORD PPPDevice = FindPattern (hD3D, 0x128000, (PBYTE) "\ xC7 \ x06 \ x00 \ x00 \ x00 \ x89 \ x86 \ x00 \ x00 \ x00 \ x00 \ x89 \ x86", "xx ???? xx ???? xx "); memcpy (& VTable, (void *) (PPPDevice + 2), 4); dwEndscene_hook = VTable [42] + 0x36; // mid funkcja dwEndscene_ret = dwEndscene_hook + 0x6; // adres zwrotny} DWORD WINAPI getddd (LPVOID) {Dx9Hook ("d3d9.dll"); memcpy ((void *) EndSceneOpCodes, (void *) "\ x89 \ x7D \ xE4 \ x89 \ x5D \ xE8", 6); while (1) {Sleep (1000); if (memcmp ((void *) EndSceneOpCodes, (void *) dwEndscene_hook, 6) == 0) DetourCreate ((PBYTE) dwEndscene_hook, (PBYTE) MyEndscene, 6); } return NULL; } BOOL WINAPI DllMain (HMODULE hDll, DWORD dwReason, LPVOID lpReserved) {DisableThreadLibraryCalls (hDll); if (dwReason == DLL_PROCESS_ATTACH) {CreateThread (NULL, NULL, (LPTHREAD_START_ROUTINE) getddd, NULL, NULL, NULL); } return TRUE; }     hook \ main.cpp (20): błąd C2400: błąd składni wbudowanego asemblera w 'opcode'; znaleźć "nowy wiersz" hook \ main.cpp (20): błąd C2041: niedozwolona cyfra "C" dla podstawy "10" hook \ main.cpp (29): błąd C2400: błąd składni wbudowanego asemblera w 'opcode'; znaleźć "nowy wiersz"   Skompiluj z VC ++ 2008   Pomóż mi proszę
Reply
#2
Może podążaj za linią, która go powoduje?
Reply
#3
Zacytować: Może podążaj za linią, która go powoduje? pierwsze 2 błędy są tutaj mov dword ptr ss: [ebp-1C], edi; na dole jest jmp dwEndscene_ret;
Reply
#4
Musimy zmienić przesunięcia na hex z notacją 0x.
Reply
#5
jaki to jest haczyk?
Reply
#6
Tak, oba przesunięcia są obecnie w formacie dziesiętnym, dlatego też nie rozpoznaje C .. Pamiętaj, aby zmienić także inne przesunięcia, ponieważ aktualnie poniżej (18) jest również dziesiętny. Jeśli chodzi o inne błędy, pobierz pakiet procesorów VC ++ ... powinien rozwiązać problemy
Reply
#7
Zacytować: Napisał Anddos jaki to jest haczyk? Frekwencja końcowa Mówi tak dobrze o nazwie funkcji.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)