我正在尝试在64位x86环境下的Linux中加载使用 "gcc -m32 test.c -o test.exe"编译的ELF文件。我正在尝试将这个32位文件(test.exe)加载到具有以下核心逻辑(32位ELF)的用户空间ELF加载器中。 问题在于调用返回的起始地址会导致分段错误核心转储。...
我查看了http://newlib.sourcearchive.com/documentation/1.18.0/init_8c-source.html中的__libc_init_array源代码。 但我不太理解这个函数的作用。 我知道这些符号 /* These magic symbols...
我正在努力更好地理解符号可见性。GCC Wiki(http://gcc.gnu.org/wiki/Visibility)有一节关于“C++异常问题”。据GCC Wiki称,由于未导出异常,可能会出现运行时错误。没有编译时错误/警告的运行时错误非常危险,因此我试图更好地理解这个问题。我进行了一些...
作为尝试从零开始编写编译器的一部分,我目前正在处理处理ELF文件的部分。 经过阅读多篇文章和规范,我仍然不太明白节到段映射存储在哪里。 当观察使用NASM+ld生成的小型可执行文件时,我可以看到.text节被某种方式映射到LOAD类型的程序头上,但是如何实现呢? 给定一个小型(工作)可执行...
只是好奇。显然这不是实际编程的非常好的解决方案,但是假设我想在Bless(一个十六进制编辑器)中创建一个可执行文件。 我的架构是x86。我能制作一个非常简单的程序吗? 一个Hello World? 一个无限循环?类似于这个问题,但在Linux下。
可执行文件的ELF格式包含程序头部(segment header)和节头部(section header),这些可以通过readelf -a命令查看,下面是一个例子: 上述两张图片分别为节头部和程序头部。可以看出,一个程序头部由多个节头部组成,用于将程序加载到内存中。 只有.tex...
我对这些术语感到有些困惑。 输入链接器的文件称为目标文件,链接器生成的映像文件被加载器用作输入。 这段内容来自于《MS PE & COFF规范》。 问题1:映像文件也称为二进制映像、二进制文件或者只是二进制。对吗? 问题2:根据上述术语,PE/ELF/COFF是映像文件的格式,而不...
这段代码针对 x86_64-unknown-linux-musl 目标编译时,会生成一个 .got 段: fn main() { println!("Hello, world!"); } $ cargo build --release --target x86_64-unknow...