нужно сделать jmp c адреса 0x00840007 на 0x7d4d14e7 считаю так: Код (Text): LONG_PTR ADDR(LONG_PTR a,LONG_PTR b){ return (a-b-5); }; на выходе получаю: 0x8336eb1b В итоге такой код: Код (Text): 00840007 E9 1B EB 36 83 jmp 83BAEB27 И он почему то прыгает на 0x83BAEB27 а не, 0x7d4d14e7? для адресов: 0x1002be1a 0x7d4d14e0 результат: 0x92b5a935 код: Код (Text): 7D4D14E0 E9 35 A9 B5 92 jmp 1002BE1Ah то есть то что нужно... ...... пока не написал сообщение на форуме, так ошибки и не видел.... нужно местами сменить было параметры...
Потому что 0x840007 + 0x8336EB1B + 5 = 0x83BAEB27 Потому что 0x92B5A935 + 0x7D4D14E0 + 5 = 0x11002BE1A Всё логично. Смотрите что из чего вычитаете и с какого на какой адрес прыгаете.
#define JMP_SIZE 5 void CreateJMP(DWORD at, DWORD to) { DWORD dwOldProtect; VirtualProtect((LPVOID)at, JMP_SIZE, PAGE_EXECUTE_READWRITE, &dwOldProtect); *(BYTE*)(at) = 0xE9; *(DWORD*)(at+1) = to - (at + JMP_SIZE); VirtualProtect((LPVOID)at, JMP_SIZE, dwOldProtect, &dwOldProtect); } //... CreateJMP(0x00840007, 0x7d4d14e7); //...