我尝试了以下内容,但生成的文件仍然是ELF,而不仅仅是部分内容.
$ objcopy --only-section=<name> <infile> <outfile>
Run Code Online (Sandbox Code Playgroud)
我只想要该部分的内容.有没有可以做到这一点的实用工具?有任何想法吗?
我目前正在C中执行自己的objdump实现.
对于我的-s选项,我必须显示ELF文件部分的全部内容.
我做得很好,但我显示的部分比"真正的"objdump更多.
实际上,它不会输出.bss,.shstrtab,.symtab和.strtab部分.
我正在环顾Shdr结构上的sh_flags值,但我找不到任何逻辑......
为什么objdump -s没有显示这些部分?
第一次海报.第二年CS学生.
我正在探索在C源代码 - > GCC编译 - > Linux执行环境的上下文中虚拟地址空间的.data部分中创建静态变量.
C程序是test.c
int main()
{
register int i = 0;
register int sum = 0;
static int staticVar[10] = {1,2,3,4,5,6,7,8,9,-1};
Loop:
sum = sum + staticVar[i]; //optimized away
i = i+1;
if(i != 10)
goto Loop;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
要求GDB' disass /m'显示staticVar []创建没有代码,因为检查.s文件会显示变量驻留在创建进程时放置在那里的虚拟地址空间的读/写.data段中(这个过程是我感兴趣的).
检查(我虽然它是' readelf -A test.o')的输出,目标文件包含我假设在数据段中创建数组的程序集.这是ELF输出.
(如果你可以告诉我什么命令生成这个输出,我可以使用readelf来复制它.我从网站上获取命令并保存输出.我不记得是如何生成的)
[剪断]
00000000 <staticVar.1359>:
0:01 00 add %eax,(%eax)
2:00 00 add %al,(%eax)
4:02 00 add (%eax),%al
6:00 00 add %al,(%eax)
8:03 00 add (%eax),%eax …Run Code Online (Sandbox Code Playgroud)