Появилась потребность перевести свой dll с 32 бит на 64 (т.к. для инъекции в x64 приложение нужна 64 битная dll).
Простые функции записи значения в адрес и изменения инструкции (например заполнение кода NOP'ами) перевелись и работают нормально, но на ассемблерную вставку (__asm) компилятор ругается - гугл говорит, что в VS 64 битной версии такой возможности нет. Но мне это нужно для инъекции кода.
Хотел бы узнать, как это все делается для 64 бит в Visual Studio?
P.S. Пример на 32 битной версии:
Простые функции записи значения в адрес и изменения инструкции (например заполнение кода NOP'ами) перевелись и работают нормально, но на ассемблерную вставку (__asm) компилятор ругается - гугл говорит, что в VS 64 битной версии такой возможности нет. Но мне это нужно для инъекции кода.
Хотел бы узнать, как это все делается для 64 бит в Visual Studio?
P.S. Пример на 32 битной версии:
C++:
DWORD jumpBack;
void _declspec (naked) hpFilter()
{
__asm
{
cmp [ebx+10],1
je sled
mov [ebx+4],eax
sled:
fldz
jmp [jumpBack]
}
}
bool Hook(void * toHook, void* ourFunct, int len)
{
DWORD curProtection;
DWORD temp;
VirtualProtect(toHook, len, PAGE_EXECUTE_READWRITE, &curProtection);
memset(toHook, 0x90, len);
DWORD relativeAddress = ((DWORD)ourFunct - (DWORD)toHook)-5;
*(BYTE*)toHook = 0xE9;
*(DWORD*)((DWORD)toHook + 1) = relativeAddress;
VirtualProtect(toHook, len, curProtection, &temp);
return true;
}
...
if (GetAsyncKeyState(VK_NUMPAD1))
{
DWORD hookAddress = ((uint32_t)BASEADDR) + 0x265B7; // Адрес инструкции ( mov [ebx+4],eax)
jumpBack = hookAddress + 5;
Hook((void*)hookAddress, hpFilter, 5);
}
...
Последнее редактирование: