【问题标题】:Swap sections in ELF在 ELF 中交换部分
【发布时间】:2017-01-26 20:59:38
【问题描述】:

有没有办法强制 gccld 在输出 ELF 格式文件的末尾放置代码部分?

也许我可以强制他们不要生成除.text 之外的任何其他部分,例如,如果我在.data, .rodata, .bss 和其他部分中没有任何内容?

【问题讨论】:

  • 您可以通过编写自定义链接器脚本来做任何事情。阅读手册了解详细信息。
  • 正如 Fuz 所说的链接器脚本。我很想知道您想在什么特殊情况下执行此操作?
  • @MichaelPetch 我想在 ELF 的代码部分之后添加一些代码。它只是一个特定的应用程序架构,它生成操作码但不能自行组装,因此需要一个预编译的 ELF,然后附加到它。顺便谢谢你的回答!
  • @RandomGuy 使用 libbfd 生成目标文件,然后将其链接到几乎完成的二进制文件可能是个好主意。只是将内容附加到 ELF 文件中,这听起来就像是麻烦不断。

标签: linux assembly elf


【解决方案1】:

对我有用的最小版本的脚本如下所示:

ENTRY(_start)

SECTIONS 
{ 
    .data : { *(.data) }
    .bss :  { *(.bss)  *(COMMON) }  
    .text : { *(.text) }
} 

但在我进行了更多研究 (docs here) 之后,我已将此脚本替换为默认脚本 (ld --verbose)。然后我刚刚将代码部分放在详细脚本的最后,它运行良好。

【讨论】:

    猜你喜欢
    • 2018-10-23
    • 1970-01-01
    • 2012-12-01
    • 1970-01-01
    • 2020-05-08
    • 1970-01-01
    • 1970-01-01
    • 2011-12-27
    • 1970-01-01
    相关资源
    最近更新 更多