繁体   English   中英

使用GNU objcopy从Elf创建可执行二进制文件

[英]Make Executable Binary File From Elf Using GNU objcopy

我想通过以下方式复制可执行的ELF文件:

$ objcopy -O binary myfile.elf myfile.bin

不幸:

$ chmod +x myfile.bin
$ ./myfile.bin

结果:无法执行二进制文件

有没有办法保留文件的可执行性?

要由execve(2)系统调用执行,文件通常必须是某个elf(5)文件(或某些脚本,或某些旧的a.out格式)。 但另请参阅binfmt_misc

你的objcopy(1)命令正在丢失ELF文件中的基本元数据。 也许你想要脱衣舞(1)

回想一下, ELF是一个相当复杂的和灵活的格式时,它指定的起始地址,该解释器( LD-Linux的(8)动态连接器),该程序等的若干段所有这些元数据是由内核为所需execve(2)并且使用objcopy -O binary丢失...

当您使用objcopy -O二进制文件时 ,您只复制二进制数据:

objcopy可以用于通过使用`binary'的输出目标生成原始二进制文件(例如,使用-O binary)。 当objcopy生成原始二进制文件时,它实际上会产生输入对象文件内容的内存转储。 所有符号和重定位信息都将被丢弃。 内存转储将从复制到输出文件中的最低部分的加载地址开始。

特别是你丢失了原始ELF标题中给出的入口点和段列表。 内核无法猜测它们。

我不明白为什么你期望objcopy -O binary文件的结果可以由Linux使用execve(2) objcopy -O binary命令的主要目的是制作固件或类似内核的独立(或独立)二进制文件,然后你需要准确理解它们应该是什么样子(例如它们的起点是什么,它们是怎样的并且您可能还使用了一些非常具体的链接器脚本 ,当然二进制文件不能包含任何到Linux内核的 系统调用 (特别是不能像普通的Linux可执行文件那样进行任何类型的输入或输出)。

另请阅读有关ABIx86-64 ABILinux Assembly HowTo高级Linux编程书籍的更多信息。

您可能应该阅读一本好的操作系统教科书,如操作系统:三个简单的片断

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM