【发布时间】:2010-11-18 16:10:55
【问题描述】:
我想将一堆 C++ 文件编译成原始机器代码,并使用用 C 编写的依赖于平台的启动器运行它。类似于
fread(buffer, 1, len, file);
a=((\*int(\*)(int))buffer)(b);
如何让 g++ 输出原始代码?
函数调用会起作用吗?我怎样才能让它发挥作用?
我认为 Linux 和 Windows 的调用约定不同。这是一个问题吗?我该如何解决?
编辑:我知道 PE 和 ELF 会阻止可执行文件的直接启动。但这就是我的首发。
【问题讨论】:
-
不会发生 - 两种完全不同的目标文件格式
-
虽然我没有资格回答,但似乎这样的事情应该是可能的。如果我可以编写不依赖于任何标准库的代码,就像嵌入式系统一样,那么它应该可以在任何 x86 芯片上运行,不是吗?
-
看到这个问题superuser.com/questions/209703/… -- 简答 ELF (linux) vs. PE (windows)
-
一个包含可执行代码的文件不仅仅是机器级指令。数据段等,因此该文件必须与您的平台兼容,这意味着它需要是 ELF 或 PE。换句话说,您可以保存带有机器指令的二进制 blob 文件并运行它,即使您有一个依赖于平台的启动器。
标签: c++ assembly x86 linker g++