如何从我的程序中运行一些机器代码

时间:2010-12-29 22:52:06

标签: c x86

如何从我的C程序中运行一些机器代码?

假设我有'B2'指令,我怎么能执行这个? (请注意,说明将在运行时更改)

1 个答案:

答案 0 :(得分:5)

  1. 将代码加载到内存中。
  2. 创建一个指向此内存的函数指针并调用它(void (*foo)(void) = mmap(...)foo();),或使用内联汇编来“jmp”代码。
  3. 请注意,在较新的系统上,您需要确保已请求没有设置NX(无执行)位的内存。如果设置了NX,跳转到您的代码将产生处理器异常,您的进程将被终止。

    在Linux上,这是一个mmap标志,在Windows上还有其他方法可以请求DEP不受保护的内存。

    您的代码也不应该依赖于固定地址,即它应该与位置无关。您无法保证相同的加载地址。

    如果您的代码需要调用您的程序,最好通过函数调用为它提供一个表,它可以解析您的可执行文件或C库的函数地址,或尝试使用系统链接器(您可能有一些运气在Linux上使用ld.so功能,但这当然是不可移植的)。