增加 elf 和其他文件格式中 BSS 部分的大小
Increase size of the BSS section in the elf and other file formats
我想添加一个 4KB space 到可执行 elf 文件的 bss 部分。如何做到这一点?
如果不是bss段,我可以增加数据段的大小或者定义一个新的数据段吗
并初始化区域 ?
如果可能,是否可以使用 elf 以外的二进制文件格式来完成此操作?
PS:我需要它来添加一些额外的检测说明,并将数据保存在稍后必须打印的专用位置。
I want to add a 4KB space to the bss section of an executable elf file. How can this be done?
假设您想对 已经 linked ELF
executable 执行此操作,请注意 部分在 link 完成后, 根本 不会被任何东西(可能调试工具除外)使用 ;你要修改对应的段.
您所要求的通常是不可能的,但是对于您的特定执行者table,可能是可能的。特别是,如果“覆盖”.bss
部分的 LOAD
部分是最后一个部分,或者如果该部分与下一个 LOAD
部分之间存在内存间隙,则应该是可能的段。
如果有 space(在内存中)来扩展有问题的 LOAD
段,那么您所要做的就是修补其程序头的 .p_memsz
并将其递增 4096 .
您需要详细了解 readelf -Wl a.out
的输出。
更新:
assuming that bss occurs last, is there a tool to change .p_memsz of the last segment in a line or two ?
我不知道有什么工具可以做到这一点,但这很简单:程序头的大小固定 table,从文件偏移量 ehdr->e_phoff
开始。 table 包含 ehdr->e_phnum
条记录。您读取每条记录,直到找到最后一个 PT_LOAD
段,更新 .p_memsz
成员,向后查找并将更新的记录写在原来的记录之上。
libelf
或 elfio
库可能(或可能不会)使编写此工具更容易。
I guess to make the elf conformant, we also need to change the section size of bss accordingly ?
不,你没有:
- 不要求
.bss
的大小和负载段匹配
- 事实上,根本没有任何部分存在的要求,
- 就像我说的,没有关心二进制文件link编辑后的任何部分。
我想添加一个 4KB space 到可执行 elf 文件的 bss 部分。如何做到这一点?
如果不是bss段,我可以增加数据段的大小或者定义一个新的数据段吗 并初始化区域 ?
如果可能,是否可以使用 elf 以外的二进制文件格式来完成此操作?
PS:我需要它来添加一些额外的检测说明,并将数据保存在稍后必须打印的专用位置。
I want to add a 4KB space to the bss section of an executable elf file. How can this be done?
假设您想对 已经 linked ELF
executable 执行此操作,请注意 部分在 link 完成后, 根本 不会被任何东西(可能调试工具除外)使用 ;你要修改对应的段.
您所要求的通常是不可能的,但是对于您的特定执行者table,可能是可能的。特别是,如果“覆盖”.bss
部分的 LOAD
部分是最后一个部分,或者如果该部分与下一个 LOAD
部分之间存在内存间隙,则应该是可能的段。
如果有 space(在内存中)来扩展有问题的 LOAD
段,那么您所要做的就是修补其程序头的 .p_memsz
并将其递增 4096 .
您需要详细了解 readelf -Wl a.out
的输出。
更新:
assuming that bss occurs last, is there a tool to change .p_memsz of the last segment in a line or two ?
我不知道有什么工具可以做到这一点,但这很简单:程序头的大小固定 table,从文件偏移量 ehdr->e_phoff
开始。 table 包含 ehdr->e_phnum
条记录。您读取每条记录,直到找到最后一个 PT_LOAD
段,更新 .p_memsz
成员,向后查找并将更新的记录写在原来的记录之上。
libelf
或 elfio
库可能(或可能不会)使编写此工具更容易。
I guess to make the elf conformant, we also need to change the section size of bss accordingly ?
不,你没有:
- 不要求
.bss
的大小和负载段匹配 - 事实上,根本没有任何部分存在的要求,
- 就像我说的,没有关心二进制文件link编辑后的任何部分。