elf相关内容

elf 文件中各节的虚拟地址和物理地址

objdump 如何计算 elf 段的物理地址 (LMA)?据我所知,elf 节标题仅包含节 [1] 的虚拟地址 (VMA). 通常,VMA 和 LMA 是相同的.但对于初始化数据段 (.data),VMA 是变量的 RAM 位置,LMA 是初始值所在的 ROM 位置.Crt0 负责在调用 main() 之前将初始值复制到 RAM 中.例如: $ objdump -h my.elf部分:I ..
发布时间:2022-01-11 15:32:08 其他开发

编译后的 C++ 类是什么样的?

有了汇编指令和 C 程序的一些背景知识,我可以想象编译函数的样子,但有趣的是,我从来没有仔细考虑过编译后的 C++ 类的样子. bash$ cat class.cpp#include类基础{诠释我;浮动 f;};bash$ g++ -c 类.cpp 我跑了: bash$objdump -d class.obash$readelf -a 类.o 但我得到的东西我很难理解. ..
发布时间:2022-01-11 15:30:38 C/C++开发

为什么 ELF 入口点 0x8048000 不能用“ld -e"更改?选项?

跟进为什么ELF执行入口点虚拟地址是0x80xxxxx而不是0x0形式的0x0? 和 为什么虚拟内存地址为linux 二进制文件从 0x8048000 开始?,为什么我不能让 ld 使用与 ld -e 的默认入口点不同的入口点? 如果这样做,我会得到一个返回代码为 139 的 segmentation fault,即使对于靠近默认入口点的地址也是如此.为什么? 编辑: 我会让问题 ..
发布时间:2022-01-11 15:30:02 其他开发

关于 DSO 引用隐藏符号的警告到底意味着什么?

我在将某些共享库与 g++ 链接时遇到问题.它给了我一个警告,例如: YYY 中的隐藏符号 XXX 被 DSO/usr/lib/... 我已经阅读了一些关于特定问题的相关问题,但我想整体理解它——这个警告是什么意思,原因是什么: 什么是 DSO? 什么是隐藏符号? 如果隐藏了,如何引用? 解决方案 什么是 DSO? DSO 是一个动态共享对象,或者不太正式的 共享库. ..
发布时间:2022-01-11 15:06:45 C/C++开发

.bss vs COMMON:什么去哪儿了?

从我的书中: .bss: 未初始化的全局 C 变量 常见: 尚未分配的未初始化数据对象 我不得不说,我看不出明显的区别.我什至不太明白什么是未初始化、未分配的数据对象……似乎什么都没有.我使用 GNU 的 readelf 工具尝试查看一些简单的 C 代码,但找不到单个 COMMON 符号.我读过诸如 FORTRAN 的 COMMON 类型是 COMMON 符号的示例之 ..
发布时间:2022-01-11 15:00:20 其他开发

我可以在已编译的二进制文件中更改“rpath"吗?

我有一个计划用于废料堆的旧可执行文件,但它还没有.它依赖于一些已从我的环境中删除的库,但我有一些存根库可以正常工作.我想将此可执行文件指向这些存根库.是的,我可以设置 LD_LIBRARY_PATH,但是这个可执行文件是从许多脚本和许多用户中调用的,我很想在一个地方修复它. 我没有这方面的来源,而且很难得到.我在想 - 我可以编辑这个文件,使用一个 ELF 感知编辑器,并添加一个简单的 PA ..
发布时间:2022-01-11 14:53:18 服务器开发

为什么 ELF 可执行文件可以有 4 个 LOAD 段?

有一个远程 64 位 *nix 服务器可以编译用户提供的代码(应该用 Rust 编写,但我认为这并不重要,因为它使用 LLVM).我不知道它使用哪个编译器/链接器标志,但编译后的 ELF 可执行文件看起来很奇怪——它有 4 个 LOAD 段: $ readelf -e 可执行文件...程序标题:类型 偏移 VirtAddr PhysAddrFileSiz MemSiz 标志对齐...加载 0x0 ..
发布时间:2022-01-11 14:51:42 服务器开发

R_X86_64_32S 和 R_X86_64_64 重定位是什么意思?

尝试在 64 位 FreeBSD 中编译 C 应用程序时出现以下错误: relocation R_X86_64_32S 制作共享对象时不能使用;用 -fPIC 重新编译 什么是R_X86_64_32S重定位,什么是R_X86_64_64? 我已经用谷歌搜索了这个错误,这可能是原因 - 如果有人能说出 R_X86_64_32S 的真正含义,那就太好了. 解决方案 R_X86 ..
发布时间:2022-01-11 14:49:41 其他开发

ELF 程序头虚拟地址和文件偏移量

我知道两者的关系: 虚拟地址 mod 页面对齐 == 文件偏移量 mod 页面对齐 但是谁能告诉我这两个数字是在哪个方向计算的? 虚拟地址是根据上面的关系从文件偏移量计算出来的,还是反之? 更新 这里有一些更详细的信息:链接器在写入ELF文件头时,会设置程序头的虚拟地址和文件偏移量.(段) 例如有 readelf -l someELFfile 的输出: Elf ..
发布时间:2022-01-09 19:56:34 服务器开发

位置无关代码的区别:x86 vs x86-64

我最近正在构建一个针对 x86-64 架构的共享库 (ELF),如下所示: g++ -o binary.so -shared --no-undefined ... -lfoo -lbar 由于以下错误而失败: 重新定位R_X86_64_32针对`a local symbol'不能在制作共享对象时使用;用 -fPIC 重新编译 当然,这意味着我需要将其重新构建为与位置无关的代码,因此 ..
发布时间:2022-01-06 13:12:33 服务器开发

为什么 Linux/gnu 链接器选择地址 0x400000?

我正在 Linux x86_64 上试验 ELF 可执行文件和 gnu 工具链: 我已经链接并(手动)剥离了一个“Hello World"测试: .global _start.文本_开始:移动 $1, %rax... 转换为 267 字节的 ELF64 可执行文件... 0000000: 7f45 4c46 0201 0100 0000 0000 0000 0000 .ELF………… ..
发布时间:2022-01-06 13:01:30 服务器开发

为什么 linux 二进制文件的虚拟内存地址从 0x8048000 开始?

在 Ubuntu x86 系统上反汇编 ELF 二进制文件 我不禁注意到 code(.text) 部分从虚拟地址 0x8048000 开始,所有较低的内存地址似乎都未使用. 这似乎相当浪费,所有谷歌出现的要么是民间传说涉及 STACK_TOP 或防止空指针取消引用.后一种情况看起来可以通过使用单个页面而不是留下 128MB 的间隙来修复. 所以我的问题是 - 是否有明确的答案来解释为什 ..
发布时间:2022-01-06 12:42:51 服务器开发

如何将文本文件的内容添加为 ELF 文件中的一个部分?

我有一个正在组装和链接的 NASM 组装文件(在 Intel-64 Linux 上). 有一个文本文件,我希望文本文件的内容出现在生成的二进制文件中(基本上是一个字符串).二进制文件是一个 ELF 可执行文件. 我的计划是在 ELF 文件中创建一个新的只读数据部分(相当于传统的 .rodata 部分). 理想情况下,应该有一个工具可以将文件逐字添加为 elf 文件中的新部分,或者 ..
发布时间:2022-01-06 12:42:41 其他开发

“没有这样的文件或目录"执行二进制文件时出错

我在 Ubuntu 9.10 x86_64 上安装了一个二进制 Linux 应用程序.该应用程序附带了旧版本的 gzip (1.2.4),该版本是为更旧的内核编译的: $ 文件 gzipgzip:ELF 32 位 LSB 可执行文件,Intel 80386,版本 1 (SYSV),动态链接(使用共享库),用于 GNU/Linux 2.0.0,已剥离 我无法执行此程序.如果我尝试过,就会发生这种 ..
发布时间:2022-01-06 12:35:10 服务器开发

为什么编译器将数据放在 PE 和 ELF 文件的 .text(code) 部分,CPU 如何区分数据和代码?

所以我参考这篇论文: 二元搅拌:自随机指令地址旧版 x86 二进制代码 https://www.utdallas.edu/~hamlen/wartell12ccs.pdf 代码与数据交错:现代编译器积极地交错PE 和 ELF 二进制文件中的代码段中的静态数据性能原因.在编译的二进制文件中,通常没有区分数据字节和代码的方法.不经意间将数据与代码一起随机化会破坏二进制文件,为指令级随 ..
发布时间:2022-01-06 12:34:17 其他开发

不同 ebpf 程序类型之间的映射共享

是否可以在不同的程序类型之间共享 ebpf 映射.我需要在 tc-bpf 程序和 cgroup bpf 程序之间共享一个映射.如果映射被固定到充当全局命名空间的文件系统,这应该是可能的.但是,我还没有完成这项工作. 映射由 tc-bpf 程序创建并固定到全局命名空间.由于是tc-bpf程序,所以map的类型是struct bpf_elf_map.这个bpf程序是通过iproute2加载的. ..
发布时间:2022-01-04 22:32:47 其他开发

ELF、PIE ASLR 以及介于两者之间的所有内容,特别是在 Linux 中

在问我的问题之前,我想介绍一些技术细节,以确保我的回答是正确的: 位置独立可执行文件 (PIE) 是一种无论加载到哪个内存地址都能够执行的程序,对吗? ASLR(地址空间布局随机化)几乎说明为了保持地址静态,我们会以某种方式随机化它们, 我读过专门在基于 Linux 和 Unix 的系统中,无论我们的代码是 PIE,还是 PIE,所有跳转、调用和偏移都是相对的,因此我们没有问题, ..
发布时间:2022-01-04 21:39:54 其他开发

如何打印像nm这样的ELF文件的符号名称?

我知道符号的名称在 shstrtab 中.但我不知道如何抓住它们.我应该将我的 shstrab 转换成 Elf64_Sym 以便我可以使用 st_name 吗? Elf64_Shdr *shdr = (Elf64_Shdr *) (data + elf->e_shoff);Elf64_Shdr *symtab;Elf64_Shdr *shstrtab;Elf64_Shdr *strtab;cha ..
发布时间:2021-12-31 21:43:44 其他开发