C - 运行时内联 asm 修补

标签 c windows assembly x86 patch

我正在用 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/

相关文章:

c++ - 内联汇编语言

C 指针,向链表的 HEAD 插入元素

预处理器扩展后 clang 无法识别内联属性

c - 如何重新分配缩小数组的大小?

c - 如何运行命令而不等待应用程序退出?

c++ windows通过USB串行获取USB端口和集线器

windows - 更改 Windows 命令提示符以仅显示当前文件夹

assembly - 汇编语言有多少种数据类型?

html - Windows 版 Chrome,糟糕的@font-face 渲染

linux - 设备的内存映射 IO 地址是否映射到进程的内核空间?