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

2 c x86

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

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

Yan*_*min 5

  1. 将代码加载到内存中.
  2. 创建一个指向这个内存的函数指针并调用它(void (*foo)(void) = mmap(...),foo();),或者使用内联汇编来"jmp"代码.

请注意,在较新的系统上,您需要确保已请求没有设置NX(无执行)位的内存.如果设置了NX,跳转到您的代码将产生处理器异常,您的进程将被终止.

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

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

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