我有正在运行的进程(* .exe文件)。 在地址0x496A42,我有这个asm代码
496A42 cmp al, 14h
我在IDA软件中找到了它。 如何将此值更改为
al, 18h
在C ++中,使用VirtualProtect ..
我使用VirtualProtect解锁内存,但我不知道如何更改此值。 你能告诉我如何用C ++代码编辑这个汇编代码吗?
我希望你能回答。 谢谢。
答案 0 :(得分:0)
假设未启用ASLR,并且.exe被加载到0x400000的默认图像库中,并且您的地址位于.exe模块内
" cmp al,14"指令具有相应的字节 0x3C 0x14
0x3C位于地址0x496A42,0x14操作数位于地址0x496A43
因此,您使用0x18
覆盖地址0x496A43处的字节void Patch(char* dst, char* src, int size)
{
DWORD oldprotect;
VirtualProtect(dst, size, PAGE_EXECUTE_READWRITE, &oldprotect);
memcpy(dst, src, size);
VirtualProtect(dst, size, oldprotect, &oldprotect);
}
Patch((char*)0x496A43, "\x18", 1);