如何从我的C程序中运行一些机器代码?
假设我有'B2'指令,我怎么能执行这个? (请注意,说明将在运行时更改)
答案 0 :(得分:5)
void (*foo)(void) = mmap(...)
,foo();
),或使用内联汇编来“jmp”代码。请注意,在较新的系统上,您需要确保已请求没有设置NX(无执行)位的内存。如果设置了NX,跳转到您的代码将产生处理器异常,您的进程将被终止。
在Linux上,这是一个mmap标志,在Windows上还有其他方法可以请求DEP不受保护的内存。
您的代码也不应该依赖于固定地址,即它应该与位置无关。您无法保证相同的加载地址。
如果您的代码需要调用您的程序,最好通过函数调用为它提供一个表,它可以解析您的可执行文件或C库的函数地址,或尝试使用系统链接器(您可能有一些运气在Linux上使用ld.so
功能,但这当然是不可移植的)。