Tag: elf

从ELF目标文件转储C结构大小

如何从带有调试符号的ELF目标文件中提取所有C结构的大小? 可以使用“print sizeof(some_struct)”从GDB获取单个结构大小,但我需要的是获取所有结构的列表。 我看过“nm”和“objdump”,但我看不到做我正在寻找的选项。 有没有办法用标准的Unix工具做到这一点,或者我是否需要从ELF文件中提取调试符号部分并自行处理? 我希望不是后者。 提前感谢任何建议。 射线

如何将库定义的符号加载到指定的位置?

测试在Ubuntu 12.04,32位, gcc 4.6.3。 基本上我正在对ELF二进制文件进行一些二进制操作工作,我现在要做的是组装一个汇编程序并保证libc符号被我加载到预定义的地址。 让我在一个简单的例子中详细说明。 假设在原始代码中使用了libc符号stdout@GLIBC_2.0 。 #include int main() { FILE* fout = stdout; fprintf( fout, “hello\n” ); } 当我编译它并使用以下命令检查符号地址时: gcc main.c readelf -s a.out | grep stdout 我懂了: 0804a020 4 OBJECT GLOBAL DEFAULT 25 stdout@GLIBC_2.0 (2) 0804a020 4 OBJECT GLOBAL DEFAULT 25 stdout@@GLIBC_2.0 和.bss部分是这样的: readelf -S a.out | grep bss [25] .bss […]

如何使用C语言函数识别文件是否是elf文件?

在我的程序中,我想确定文件是否是ELF(可执行和可链接格式)类型。 如何使用C语言函数识别文件是否是elf文件?

如何.bss部分不是零初始化

我们知道.bss包含未初始化的变量。 如果在c代码中,程序员在使用它们之前初始化变量。 然后.bss在执行C代码之前不必为零。 我对吗? 谢谢

创建ELF而不是a.out

我需要使用gcc生成一个简单的“Hello World”ELF32可执行文件。 我似乎没有gcc-elf命令。 是否可以在不再构建gcc的情况下创建ELF二进制文件而不是a.out? (我假设它应该可以有一些选项,但我不确定如何继续)

为什么objdump不显示.bss,.shstratab,.symtab和.strtab部分?

我目前正在C中执行自己的objdump实现。 对于我的-s选项,我必须显示ELF文件部分的全部内容。 我做得很好,但我显示的部分比“真正的”objdump更多。 实际上,它不会输出.bss,.shstrtab,.symtab和.strtab部分。 我正在寻找Shdr结构上的sh_flags值,但我找不到任何逻辑…… 为什么objdump -s没有显示这些部分?

如何在C(gcc)中获取自定义ELF部分的起始和结束地址?

我已经看到使用gcc __section__属性 (特别是在Linux内核中)将数据(通常是函数指针)收集到自定义ELF部分中。 如何检索和使用这些自定义部分中的“东西”?

为什么GCC编译C程序需要.eh_frame部分?

测试是在32位x86 Linux上使用gcc 4.6.3 当使用gcc编译C程序并使用readelf检查部分信息时,我可以在里面看到.eh_frame部分和.eh_frame_hdr部分。 例如,这是二进制程序Perlbench的部分信息。 readelf -S perlbench There are 28 section headers, starting at offset 0x102e48: Section Headers: [Nr] Name Type Addr Off Size ES Flg Lk Inf Al [ 0] NULL 00000000 000000 000000 00 0 0 0 [ 1] .interp PROGBITS 08048154 000154 000013 00 A 0 0 1 [ 2] .note.ABI-tag […]