在C ++中内联汇编到字节

时间:2014-06-07 07:29:42

标签: c++ assembly code-injection

我想将内存写入代码注入的进程。但是在WriteProcessMemory之后,结果汇编代码却不一样。我使用Cheat Engine进行检查。有人可以帮忙吗?

这是汇编函数:

void tidy() {
    DWORD addr = 0x4AED10;
    _asm{
        pushad
        pushfd
        mov eax, addr
        call eax
        popfd
        popad
        ret
    }
}

void callAsm(const char* processName, PVOID CallFun)
{
    HANDLE hProcess = OpenProcessEasy(processName);
    LPVOID allocAddr = VirtualAllocEx(hProcess, NULL, 0x20, MEM_COMMIT, PAGE_EXECUTE_READ);
    WriteProcessMemory(hProcess, allocAddr, CallFun, 0x20, NULL);

}

我打电话:

callAsm("xxx.exe",tidy);

分配地址0x3640000中的写入内存变为:

E9 98190000 jmp 0364199D
E9 27190000 jmp 03641931

1 个答案:

答案 0 :(得分:0)

这个问题是already asked关于SO的问题,但是有点不同。有许多库用于使用C ++语法进行运行时程序集编译。

asmjit看起来像是

c.test(op, op);
c.jne(L_Subtract);
c.add(a, b);
c.jmp(L_Skip);
...
auto res = c.make(); // compile it into bytecode.

此外,您可以使用过时的softwire甚至LLVM来生成功能齐全的代码。