【发布时间】:2016-02-10 14:52:47
【问题描述】:
我按照thread 来执行一些二进制代码。
tinky_winky 的答案,当我尝试执行另一个二进制文件时工作但没有工作。
比如我写了这个程序:
#include <stdio.h>
int main ()
{
printf("Prueba\n");
return(0);
}
用gcc编译(不带任何参数)然后把生成的二进制放到code变量上
char code[] = {0x7f,0x45,0x4c,0x46,0x02,0x01,0x01,0x00,0x00,...};
然后尝试编译新文件,但出现分段错误错误。
可以在 c(或 c++)中实际运行任何类型的任意代码,还是只能在裸 asm 代码中运行函数(如在原始线程中)?
【问题讨论】:
-
事情远比你想象的要复杂。可执行文件包含的不仅仅是机器代码。为了执行可执行文件(二进制文件),操作系统将文件加载到内存中,并在实际执行代码之前做很多复杂的事情。