使用C ++代码编辑汇编字节

时间:2017-12-10 05:11:37

标签: c++ assembly memory share edit

我有正在运行的进程(* .exe文件)。 在地址0x496A42,我有这个asm代码

496A42 cmp     al, 14h

我在IDA软件中找到了它。 如何将此值更改为

al, 18h

在C ++中,使用VirtualProtect ..

我使用VirtualProtect解锁内存,但我不知道如何更改此值。 你能告诉我如何用C ++代码编辑这个汇编代码吗?

我希望你能回答。 谢谢。

1 个答案:

答案 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);