我正在用 C 编写程序,并且使用内联汇编。在内联汇编代码中有一些地址,我想在运行时修补它们。
代码的快速示例是这样的:
void __declspec(naked) inline(void)
{
mov eax, 0xAABBCCDD
call 0xAABBCCDD
}
假设我想修改主 C 程序中的 0xAABBCCDD 值。 我试图做的是调用 VirtualProtect 一个是函数的指针以使其可写,然后调用 memcpy 将适当的值添加到代码中。
DWORD old;
VirtualProtect(inline, len, PAGE_EXECUTE_READWRITE, &old);
但是 VirtualProtect 失败并且 GetLastError() 返回 487,这意味着访问无效地址。任何人都知道这个问题? 谢谢
最佳答案
这行不通吗?
int X = 0xAABBCCDD;
void __declspec(naked) inline(void)
{
mov eax, [X]
call [X]
}
关于C - 运行时内联 asm 修补,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8608848/