elf 相关问题

ELF代表可执行文件和可链接格式,是包含机器代码的文件的文件格式。

`p_offset`

我正在尝试学习 ELF 格式并正在实现一个 ELF 解析器。到目前为止,我已经实现了 ELF 标头解析器,并且正在解析段,特别是 .text 段。我被困在这里

回答 1 投票 0

在 CMake 中构建期间添加链接器选项

是否可以向 CMake 生成的链接命令行添加其他选项作为某些构建操作的结果? 具体来说,我需要通过静态保留一些未引用的符号

回答 1 投票 0

使用SDL鼠标的ELF二进制游戏只去右侧

在使用 SDL 开发的 elf 文件类型的游戏中,当我移动鼠标时,即使我将鼠标移动到左侧,它也只会移动到右侧。我尝试使用 ubuntu 2...

回答 1 投票 0

从一个源文件生成多个对象文件

问题 在编译期间获取多个源文件并生成单个目标文件是相当常见的(g++ -c file1.cpp file2.cpp)。是否有可能走另一条路并创建多个

回答 1 投票 0

BSD 和 Linux 是否有始终使用且特定于内核的系统调用?

我目前正在开发一个项目,该项目依赖于检测可执行文件属于哪个操作系统。 我只处理 ELF 可执行格式,所以我尝试使用 e_ident[EI_OSABI] 值,但没有给出 hea...

回答 1 投票 0

在 Linux 上为 FatFS 和 FreeRTOS + FAT 创建 FAT 磁盘映像

我一直在使用带有 FreeRTOS + FAT 库的 CVA6 RISCV 核心来创建 RAMDisk,其中包含在裸机上运行 San Diego Vision Benchmark 所需的一些文件。 我一直在寻找一种方法来创建...

回答 1 投票 0

ELF 中的 <.got> 部分是什么?

据我所知,PLT和GOT是处理动态链接函数的部分。 如果代码调用 libc 的 printf 函数, 1. 首先调用PLT获取printf的地址。 2.并写下

回答 2 投票 0

为什么Linux无法映射这个PT_LOAD ELF段?

我正在尝试将任意数据嵌入到 ELF 可执行文件中,并让 Linux 在加载时自动映射它。最近问了另一个与此相关的问题,最终支持了这个用例

回答 1 投票 0

使用lazy_static!符号表中定义变量的大小为0

以下rust代码,在x86_64平台编译。 #[宏使用] 外部板条箱lazy_static; 使用 std::collections::HashMap; 惰性静态! { 静态引用 HASHMAP:HashMap 以下rust代码,在x86_64平台编译。 #[macro_use] extern crate lazy_static; use std::collections::HashMap; lazy_static! { static ref HASHMAP: HashMap<u32, &'static str> = { let mut m = HashMap::new(); m.insert(0, "foo"); m.insert(1, "bar"); m.insert(2, "baz"); m }; } fn main() { // First access to `HASHMAP` initializes it println!("The entry for `0` is \"{}\".", HASHMAP.get(&0).unwrap()); // Any further access to `HASHMAP` just returns the computed value println!("The entry for `1` is \"{}\".", HASHMAP.get(&1).unwrap()); } 我使用readelf命令查看符号表中HASHMAP变量的大小: readelf -sW target/debug/deps/section_test-4d7d6a03c56fdde3.o Symbol table '.symtab' contains 590 entries: Num: Value Size Type Bind Vis Ndx Name 452: 0000000000000000 0 OBJECT LOCAL DEFAULT 498 _ZN12section_test7HASHMAP17hbc6de818c577d166E 我们可以看到Size是0。 readelf -SW target/debug/deps/section_test-4d7d6a03c56fdde3.o There are 527 section headers, starting at offset 0x98690: Section Headers: [Nr] Name Type Address Off Size ES Flg Lk Inf Al [498] .rodata._ZN12section_test7HASHMAP17hbc6de818c577d166E PROGBITS 0000000000000000 00b528 000000 00 A 0 0 1 我们看一下符号所在的部分,符号位于rodata部分并且该部分的Size也为0。 既然长度为0,是不是意味着不能存储数据了,运行时HashMap内存分配到哪里了? C语言符号表中可以定义长度为0的变量吗? lazy_static 创建一个空类型和值,相当于: struct HASHMAP { __private_field: ()} static HASHMAP: HASHMAP = HASHMAP { __private_field: () } (源码) 然后它为此类型实现Deref,以便在您第一次尝试访问它时可以动态初始化实际值(实际值隐藏在由deref调用的私有函数内的静态值中)。

回答 1 投票 0

Rust 使用lazy_Static!符号表中定义变量的大小为0

以下rust代码,在x86_64平台编译。 #[宏使用] 外部板条箱lazy_static; 使用 std::collections::HashMap; 惰性静态! { 静态引用 HASHMAP:HashMap 以下rust代码,在x86_64平台编译。 #[macro_use] extern crate lazy_static; use std::collections::HashMap; lazy_static! { static ref HASHMAP: HashMap<u32, &'static str> = { let mut m = HashMap::new(); m.insert(0, "foo"); m.insert(1, "bar"); m.insert(2, "baz"); m }; } fn main() { // First access to `HASHMAP` initializes it println!("The entry for `0` is \"{}\".", HASHMAP.get(&0).unwrap()); // Any further access to `HASHMAP` just returns the computed value println!("The entry for `1` is \"{}\".", HASHMAP.get(&1).unwrap()); } 我使用readelf命令查看符号表中HASHMAP变量的大小: readelf -sW target/debug/deps/section_test-4d7d6a03c56fdde3.o Symbol table '.symtab' contains 590 entries: Num: Value Size Type Bind Vis Ndx Name 452: 0000000000000000 0 OBJECT LOCAL DEFAULT 498 _ZN12section_test7HASHMAP17hbc6de818c577d166E 我们可以看到Size是0。 readelf -SW target/debug/deps/section_test-4d7d6a03c56fdde3.o There are 527 section headers, starting at offset 0x98690: Section Headers: [Nr] Name Type Address Off Size ES Flg Lk Inf Al [498] .rodata._ZN12section_test7HASHMAP17hbc6de818c577d166E PROGBITS 0000000000000000 00b528 000000 00 A 0 0 1 我们看一下符号所在的部分,符号位于rodata部分并且该部分的Size也为0。 既然长度为0,是不是意味着不能存储数据了,运行时HashMap内存分配到哪里了? C语言符号表中可以定义长度为0的变量吗? lazy_static 创建一个空类型和值,相当于: struct HASHMAP { __private_field: ()} static HASHMAP: HASHMAP = HASHMAP { __private_field: () } (源码) 然后它为此类型实现Deref,以便在您第一次尝试访问它时它可以在堆上动态分配实际值。

回答 1 投票 0

在程序集中写入共享对象时如何处理“针对受保护符号的重定位 R_X86_64_PC32”?

我正在用汇编语言编写一个目标文件以包含在共享对象中。我正在使用 GNU 工具链,我的目标是 x86_64-pc-linux-gnu。请考虑以下(示例)sou...

回答 1 投票 0

如何读取嵌入到程序自身ELF中的数据?

objcopy 工具可以轻松地将任意文件嵌入到 ELF 可执行文件中: objcopy --add-section program.file1=file1.dat \ --add-section program.file2=file2.dat \ 程序程序+

回答 1 投票 0

CMSIS DSP 的选择性链接?

我的基于 ARM 的应用程序报告超过 1,250,000 字节的程序内存,但其中大部分是 .rodata(“只读常量”)而不是代码。我在 .map 文件中找到了这个: .rodata%268 0x00407318

回答 1 投票 0

在uefi-rs中获取文件大小

我正在制作一个基本的 uefi 应用程序,该应用程序应该加载 elf 内核。我已经加载了填充文件和包含文件信息的缓冲区。但要真正读取文件...

回答 1 投票 0

在运行时检查 C/C++ 指针是否指向只读内存(在 Linux 操作系统中)

当年,低级 C/C++ 代码通过执行以下操作来识别指针 ptr 是否指向 Linux 操作系统中的只读内存: 外部字符 etext、edata; ... (ptr > &etext) && (ptr <...

回答 1 投票 0

为什么 rpmbuild 会重写 elf 标头以及如何阻止它?

我有一个精简的规范文件,如下所示: 名称: 某些二进制 版本:6.1.0 发布:1 许可:专有 摘要:二进制 %描述 任何 %安装 安装 -d %{buildroot}/fromrpm...

回答 1 投票 0

有什么方法可以找到从哪个类抛出段错误吗?

段错误是由于对 std::mutex::lock 的读访问造成的,其中 si_addr = 0x278,si_code = SEGV_MAPERR。 程序中内联函数太多,堆栈只提供有限的

回答 1 投票 0

在自定义 ELF 加载程序中处理 DWARF-5 重定位

我正在构建一个自定义 ELF 对象加载器,它可以解析库依赖项(DT_NEEDED)并递归加载这些依赖项,执行重定位和符号解析,调用 preinit 等。ld.so 很有趣...

回答 1 投票 0

在构建 ELF 二进制文件后添加一些字符串

有什么方法可以设置一个 ELF 可执行文件,以便我可以在“构建”之后向其中添加一个键和值的小表,并访问这些键和值...

elf
回答 1 投票 0

修复 objcopy 输出二进制文件上的 elf 段地址

我正在尝试将一些编译的代码注入到 elf 可执行文件中。该策略是在“代码”段的末尾写入一些字节。我选择这个部分的原因是因为我需要我的工资...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.