我想将内存写入代码注入的进程。但是在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
答案 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.