我想生成一个文件,可以将其加载到内存中(例如使用 mmap
),然后跳转到该内存的起始位置执行代码。
理想情况下,我希望有两种选择:使代码可重定位(可能效率低下)或指定代码期望加载的显式地址(比较麻烦),但单独使用其中任何一种都应该可以。
我想生成一个文件,可以将其加载到内存中(例如使用 mmap
),然后跳转到该内存的起始位置执行代码。
理想情况下,我希望有两种选择:使代码可重定位(可能效率低下)或指定代码期望加载的显式地址(比较麻烦),但单独使用其中任何一种都应该可以。
你可以通过目标文件格式来实现,特别是objcopy
命令可以将可执行文件转换为“平面”二进制文件(取决于你的目标平台)。也许可以像这样做:
gcc -o test test.c
objcopy -O binary test test.bin
请在您的平台上查看 man objcopy
以获取更多详细信息。
ld --verbose
或者gcc -Wl,--verbose
来确保你看到的是真正的名称。你需要在详细信息中搜索一下。我在我的回答中添加了一个链接,指向相关的ld手册部分。 - RBerteigobjcopy
。它是binutils工具包的组成部分,其中最明显的成员是链接器ld
。
mmap
只是一个(糟糕的)例子,但我能想到的唯一好的例子涉及BIOS调用或设备控制寄存器的poke,我不想查找) - David X