elf相关内容

在ELF中交换部分

是否可以在输出ELF格式文件的末尾强制 gcc 或 ld 位置代码部分? 例如,如果例如我没有,我可以强迫他们除了 .text 以外不产生其他任何节 .data,.rodata,.bss 和其他部分中的任何内容? 解决方案 最适合我的脚本版本如下: ENTRY(_start) 部分 { .data:{*(。data)} .bss:{*(。bss)*(COMMON) ..
发布时间:2020-10-28 21:33:20 服务器开发

使用C结构成员的连续内存

在将其标记为重复之前,请先阅读问题。 因此,这可能是一个非常愚蠢的问题,但它困扰着我。从阅读以及许多其他SO问题中,我知道由于编译器添加的填充,不能保证C中的结构体中的字段是连续的。例如,根据C标准: 13 / 在结构对象中,非位字段成员和位字段所在的单元的地址按照声明的顺序增加。指向经过适当转换的结构对象的指针指向其初始成员(或者,如果该成员是位字段,则指向它所驻留的单元),反之亦然 ..
发布时间:2020-10-28 21:33:16 服务器开发

有没有办法将Linux共享库加载到特定的内存位置?

我有一个Linux应用程序,该应用程序在运行时会加载非常小的(一些小功能)共享库。由于各种重要原因,我需要将共享库加载到某个虚拟内存范围内。但是, dlopen()没有提供任何方法(我可以看到)来告诉它或提示它将加载的内容放在何处。 有没有办法告诉 dlopen()应该将加载的库放在哪里? dlopen()是否可以提供该功能? 解决方案 我认为,如果您愿意修改库,则预链接程序实 ..
发布时间:2020-10-28 21:32:11 服务器开发

是否按需加载/卸载ELF部分?

对于一个相当晦涩的用例,我希望有一个(大型)静态链接的Linux可执行文件,该可执行文件由一小段控制代码和一大段静态(只读)数据组成。是否可以节省内存,以使加载程序仅加载控制代码的各个部分,然后根据需要手动加载RO数据的各个部分,并在处理完成后再次将其卸载? 这可能吗? (我想(文件系统级别的)数据流可以用来解决这个问题,但是它们(EXT3)不可用,并且分发会很棘手,因为数据流很容易丢 ..
发布时间:2020-10-28 21:32:02 服务器开发

如何从elf文件格式创建可执行十六进制

对此我非常陌生,我有elf文件 input.out ,需要从中创建十六进制可执行文件。我正在使用objcopy以intel十六进制格式创建可执行文件,如下所示: objcopy -O ihex input.out out.hex hex包含所有部分(.interp,.note.ABI-tag等)的数据,但是我不确定可执行文件是否全部必需。只是.text部分足以创建可执行 ..
发布时间:2020-10-28 21:31:58 服务器开发

C-如何检查跟踪的进程是否为32位?

使用ptrace_attach时,如何知道您要附加的进程是以32位还是64位运行的呢? 我正在编写类似strace的代码而且我需要知道它是32位还是64位,因为RAX(EAX)中的系统调用数将没有相同的含义。 cmd(strace ls)很简单,您可以映射二进制文件并与Elf进行一些检查。 但是我找不到关于已经存在的进程的任何信息吗? 谢谢! 解决方案 这是一个非常 ..
发布时间:2020-10-28 21:31:55 其他开发

如何计算ELF文件中的静态初始值设定项?

我正在尝试计算C ++文件中的静态初始值设定项。 我已经拥有的解决方案(曾经与gcc-4.4配合使用)正在查看.ctors ELF部分。 升级到gcc-4.6后,这似乎不再返回有效结果(静态初始化器的计算数量为0,这不会匹配现实,例如由nm返回)。 现在的问题是我希望解决方案即使在没有符号的情况下也可以工作(否则我会使用nm )。 下面是示例可执行文件的readelf -S ..
发布时间:2020-10-28 21:31:49 服务器开发

将源代码添加到elf文件

我想将C ++源代码添加到相应的 elf 二进制文件中,我正在寻找实现此目的的最佳方法。 (我使用的是我的代码的多个版本,而不是每个版本都应该提交到svn中。) 我可以仅添加源代码而不破坏 elf 文件使用bash的>> 运算符? 还是 objcopy --add-section 做到这一点的方法? 还有一个更好的主意,就是从源代码文件中以 grep 递归所有 #include 行来 ..
发布时间:2020-10-28 21:31:41 C/C++开发

如何通过pyelftools保存修改的ELF

最近,我对ELF文件结构感兴趣。在网上搜索时,我发现了一个名为 pyelftools 的出色脚本。但是实际上我不知道保存修改后的ELF的方法; ELFFile类没有任何方法。 首先,我的操作如下: 标头= self.elf.header self._emitline(“%s”%标头['e_shnum']) 标头['e_shnum'] = 30 self._emitline(“% ..
发布时间:2020-10-28 21:31:40 Python

ELF中SHT_NULL节的用途是什么?

ELF 中的 SHT_NULL 部分的目的是什么? 是操作系统还是加载程序引用的? 此部分的大小是什么? 可以吗?与 NULL 指针有什么关系? 此外,为什么本节在节段映射中没有条目? 根据ELF规范: SHT_NULL :此值标记节标题为无效;它没有关联的部分。该节标题的其他成员具有未定义的值。 解决方案 目的是什么elf中的SHT_NULL部分? 它用作前 ..
发布时间:2020-10-28 21:31:37 其他开发

代码(.text)是否仅执行? .rodata是否可执行?

我试图了解ELF段是如何进行内存映射的。我注意到,各个部分都映射到相同的ELF段。例如,.rodata与.text映射到相同的段。 为什么会这样?为什么不将.rodata映射到单独的只读段而不是可执行段? 此外,将.text段映射到“仅执行”段意味着什么? (不可读)? 编辑: 我还可以补充一点,我正在使用GNU链接器,如果这样会使 解决方案 从上面的评论中收集 ..
发布时间:2020-10-28 21:31:35 其他开发

SYSV与Linux / GNU ELF格式

该问题与以下问题相关:为什么找不到库,即使它们显然在-L路径上也是如此?。看来我的库和目标文件具有不同的ELF格式,这可能会导致链接器无法“找到”库。 现在,这导致了一些问题: 似乎我的编译器通常会生成SYSV ELF文件。 (已通过文件检查)。但是,对于该特定C ++源,它将生成Linux / GNU ELF对象文件。我不知道为什么,所以我将该源简化为一个空的main方法-突然我得到 ..
发布时间:2020-10-28 21:31:31 服务器开发

android静态库错误的ELF号

我已经使用Android ndk构建了一个静态库。 我现在尝试在另一个Android项目中使用该库 //在mainActivity中 静态 { System.loadLibrary(“ MILlib”); } 构建测试项目时出现以下错误 02 17:07:24.890 2785-2785 / com.MIL.testlib E / Andr ..
发布时间:2020-10-28 21:30:18 移动开发

从C读取Linux上的ELF字符串表

我想编写一个程序,读取二进制文件的字符串表。 Binary在运行于REDHAT linux 32上的ELF中。 我做了以下操作- 阅读Elf标头 阅读所有部分 下面是我的程序的输出。 二进制文件的入口地址-0x8048340 程序标题开始-52 节标题开始-3272 标头大小-52 部分标题的数量-36 每个部分标题的大小-40 部分标题的数量-36 部分标题的 ..
发布时间:2020-10-28 21:28:48 其他开发