elf相关内容
是否可以在输出ELF格式文件的末尾强制 gcc 或 ld 位置代码部分? 例如,如果例如我没有,我可以强迫他们除了 .text 以外不产生其他任何节 .data,.rodata,.bss 和其他部分中的任何内容? 解决方案 最适合我的脚本版本如下: ENTRY(_start) 部分 { .data:{*(。data)} .bss:{*(。bss)*(COMMON)
..
在将其标记为重复之前,请先阅读问题。 因此,这可能是一个非常愚蠢的问题,但它困扰着我。从阅读以及许多其他SO问题中,我知道由于编译器添加的填充,不能保证C中的结构体中的字段是连续的。例如,根据C标准: 13 / 在结构对象中,非位字段成员和位字段所在的单元的地址按照声明的顺序增加。指向经过适当转换的结构对象的指针指向其初始成员(或者,如果该成员是位字段,则指向它所驻留的单元),反之亦然
..
我有一个Linux应用程序,该应用程序在运行时会加载非常小的(一些小功能)共享库。由于各种重要原因,我需要将共享库加载到某个虚拟内存范围内。但是, dlopen()没有提供任何方法(我可以看到)来告诉它或提示它将加载的内容放在何处。 有没有办法告诉 dlopen()应该将加载的库放在哪里? dlopen()是否可以提供该功能? 解决方案 我认为,如果您愿意修改库,则预链接程序实
..
字符串文字的地址在编译时确定。该地址和字符串文字可以在内置的可执行程序(ELF格式)中找到。例如,以下代码输出 String Literal:0x400674 printf( “字符串文字:%p\n”,“ Hello World”); 和 objdump -s -j .rodata test1 显示 .rodata节的内容: 400670 01
..
对于一个相当晦涩的用例,我希望有一个(大型)静态链接的Linux可执行文件,该可执行文件由一小段控制代码和一大段静态(只读)数据组成。是否可以节省内存,以使加载程序仅加载控制代码的各个部分,然后根据需要手动加载RO数据的各个部分,并在处理完成后再次将其卸载? 这可能吗? (我想(文件系统级别的)数据流可以用来解决这个问题,但是它们(EXT3)不可用,并且分发会很棘手,因为数据流很容易丢
..
我有一个使用musl libc编译的共享库 $ readelf -d ./libinterop_d.so 偏移量为0x8ecb0的动态部分包含22个条目: 标签类型名称/值 0x0000000000000001(需要)共享库:[libc.so] 0x000000000000000f(RPATH)库rpath:[/ usr / local / musl / lib] 0x00
..
对此我非常陌生,我有elf文件 input.out ,需要从中创建十六进制可执行文件。我正在使用objcopy以intel十六进制格式创建可执行文件,如下所示: objcopy -O ihex input.out out.hex hex包含所有部分(.interp,.note.ABI-tag等)的数据,但是我不确定可执行文件是否全部必需。只是.text部分足以创建可执行
..
使用ptrace_attach时,如何知道您要附加的进程是以32位还是64位运行的呢? 我正在编写类似strace的代码而且我需要知道它是32位还是64位,因为RAX(EAX)中的系统调用数将没有相同的含义。 cmd(strace ls)很简单,您可以映射二进制文件并与Elf进行一些检查。 但是我找不到关于已经存在的进程的任何信息吗? 谢谢! 解决方案 这是一个非常
..
我正在尝试计算C ++文件中的静态初始值设定项。 我已经拥有的解决方案(曾经与gcc-4.4配合使用)正在查看.ctors ELF部分。 升级到gcc-4.6后,这似乎不再返回有效结果(静态初始化器的计算数量为0,这不会匹配现实,例如由nm返回)。 现在的问题是我希望解决方案即使在没有符号的情况下也可以工作(否则我会使用nm )。 下面是示例可执行文件的readelf -S
..
我想获取源代码路径&&只是通过ELF文件获得的源名称, .debug_str 部分包含了我所需要的,但是我该如何过滤掉它们? 解决方案 $ readelf --string-dump = .debug_str YOUR_PROGRAM 可以正常工作。 但是,请确保未使用命令删除your_program 文件YOUR_PROGRAM
..
我想将C ++源代码添加到相应的 elf 二进制文件中,我正在寻找实现此目的的最佳方法。 (我使用的是我的代码的多个版本,而不是每个版本都应该提交到svn中。) 我可以仅添加源代码而不破坏 elf 文件使用bash的>> 运算符? 还是 objcopy --add-section 做到这一点的方法? 还有一个更好的主意,就是从源代码文件中以 grep 递归所有 #include 行来
..
最近,我对ELF文件结构感兴趣。在网上搜索时,我发现了一个名为 pyelftools 的出色脚本。但是实际上我不知道保存修改后的ELF的方法; ELFFile类没有任何方法。 首先,我的操作如下: 标头= self.elf.header self._emitline(“%s”%标头['e_shnum']) 标头['e_shnum'] = 30 self._emitline(“%
..
ELF 中的 SHT_NULL 部分的目的是什么? 是操作系统还是加载程序引用的? 此部分的大小是什么? 可以吗?与 NULL 指针有什么关系? 此外,为什么本节在节段映射中没有条目? 根据ELF规范: SHT_NULL :此值标记节标题为无效;它没有关联的部分。该节标题的其他成员具有未定义的值。 解决方案 目的是什么elf中的SHT_NULL部分? 它用作前
..
我试图了解ELF段是如何进行内存映射的。我注意到,各个部分都映射到相同的ELF段。例如,.rodata与.text映射到相同的段。 为什么会这样?为什么不将.rodata映射到单独的只读段而不是可执行段? 此外,将.text段映射到“仅执行”段意味着什么? (不可读)? 编辑: 我还可以补充一点,我正在使用GNU链接器,如果这样会使 解决方案 从上面的评论中收集
..
该问题与以下问题相关:为什么找不到库,即使它们显然在-L路径上也是如此?。看来我的库和目标文件具有不同的ELF格式,这可能会导致链接器无法“找到”库。 现在,这导致了一些问题: 似乎我的编译器通常会生成SYSV ELF文件。 (已通过文件检查)。但是,对于该特定C ++源,它将生成Linux / GNU ELF对象文件。我不知道为什么,所以我将该源简化为一个空的main方法-突然我得到
..
我现在了解如何通过如下的过程链接表来引用动态函数: 转储函数foo的汇编代码@plt: 0x0000000000400528 0x000000000040052e
..
我已经使用Android ndk构建了一个静态库。 我现在尝试在另一个Android项目中使用该库 //在mainActivity中 静态 { System.loadLibrary(“ MILlib”); } 构建测试项目时出现以下错误 02 17:07:24.890 2785-2785 / com.MIL.testlib E / Andr
..
在下面的文件中这意味着什么? 2 ** 2 和 2 ** 0 $ objdump -h main.o main.o:文件格式elf32-i386 节: Idx名称大小VMA LMA关闭文件Algn 0 .text 0000000b 00000000 00000000 00000034 2 ** 2 目录,ALLOC,加载,READONLY,代码 1 .data 00000
..
#include const int str [1000] = {0}; int main(void) { printf(“ arr is%d\n”,str [0]); 返回0; } 具有以下输出: [-exercises / adam / stack2]:大小a.out 文本数据bss dec十六进制文件名 5133
..
我想编写一个程序,读取二进制文件的字符串表。 Binary在运行于REDHAT linux 32上的ELF中。 我做了以下操作- 阅读Elf标头 阅读所有部分 下面是我的程序的输出。 二进制文件的入口地址-0x8048340 程序标题开始-52 节标题开始-3272 标头大小-52 部分标题的数量-36 每个部分标题的大小-40 部分标题的数量-36 部分标题的
..