我想通过以下方式复制一个可执行的ELF文件:
$ objcopy -O binary myfile.elf myfile.bin
很遗憾:
$ chmod +x myfile.bin
$ ./myfile.bin
结果是:无法执行二进制文件
有没有办法保留文件的可执行性?
我想通过以下方式复制一个可执行的ELF文件:
$ objcopy -O binary myfile.elf myfile.bin
很遗憾:
$ chmod +x myfile.bin
$ ./myfile.bin
结果是:无法执行二进制文件
有没有办法保留文件的可执行性?
a.out
格式)。但也请参见binfmt_misc
您的objcopy(1)命令正在丢失ELF文件中的基本元数据。也许您想要strip(1)。execve(2)
,并且在使用 objcopy -O binary
后会丢失...特别是你会丢失原始 ELF 头中给出的入口点和段列表。内核无法猜测它们。objcopy 可以通过使用输出目标 `binary' (例如,使用 -O binary) 来生成原始二进制文件。当 objcopy 生成一个原始二进制文件时,它实际上会产生一个输入对象文件内容的内存转储。所有符号和重定位信息将被丢弃。内存转储将从复制到输出文件中的最低部分的加载地址开始。
execve(2)
在Linux上使objcopy -O binary
的结果可执行。该objcopy -O binary
命令的主要目的是制作类似firmware或内核的独立(或自由站立)二进制文件,然后您需要确切地了解它们应该看起来像什么(例如,它们的起始点,如何加载和启动),还可能使用一些非常特定的linker script,当然该二进制文件不能包含任何syscall到linux kernel(特别是不能以纯Linux可执行文件的方式进行任何类型的输入或输出)。
阅读关于ABIs, x86-64 ABI, Linux Assembly HowTo, Advanced Linux Programming书的更多信息。
你可能需要阅读一本好的操作系统教材,比如Operating System: Three Easy Pieces。
x86-64 ABI
的链接已损坏。 - David Jones