测试是在Linux 32位系统上进行的。

我使用此命令获取.text.rodata.data部分的上下文:

objdump -s -j .text elf_binary
objdump -s -j .rodata elf_binary
objdump -s -j .data elf_binary


但是基本上当我试图用它来获取.bss部分的内容,我总是得到如下所示的错误:

objdump -s -j .bss elf_binary

objdump: section '.bss' mentioned in a -j option, but not found in any input file


基本上我如何从ELF二进制文件中获取.bss部分的内容?

#1 楼

.bss没有内容。这只是加载程序启动程序时预分配一些空间的提示。执行时将全为0,并且在程序写入之前不会保存任何有用的信息。之后,您可以使用调试器转储内存并浏览其内容。

检查Wikipedia页面以获取更多信息。

#2 楼

以符号开头的.bss块(也称为未初始化的数据段-bss是古老的IBM芯片上的旧汇编指令)部分应该包含未初始化或初始化为0或NULL的global variablesstatic variables。在程序开始执行之前,通常不存在.bss部分,这就是为什么您不能静态检索其内容的原因。值得注意的是,此部分有助于减小程序的大小并加快加载速度。