我正在用C编写一个程序,我使用内联asm。在内联汇编程序代码中有一些地址,我想在运行时将其修补。
代码的快速示例如下:

void __declspec(naked) inline(void)
{
      mov eax, 0xAABBCCDD
      call 0xAABBCCDD
}

假设我想修改主C程序中的0xAABBCCDD值。
我试图做的是调用VirtualProtect an,它是函数的指针,以便使其可写,然后调用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]
}

08-15 22:36