12得票2回答
使用Linux头文件中的unistd.h构建不带libc的静态ELF

我想构建一个静态的ELF程序,而不使用(g)libc,而是使用Linux头文件提供的unistd.h。我已经阅读了这些文章/问题,大致了解了我正在尝试做什么,但还不够清楚:http://www.muppetlabs.com/~breadbox/software/tiny/teensy.html...

22得票3回答
在用户空间中用C语言加载ELF文件

我正在尝试在64位x86环境下的Linux中加载使用 "gcc -m32 test.c -o test.exe"编译的ELF文件。我正在尝试将这个32位文件(test.exe)加载到具有以下核心逻辑(32位ELF)的用户空间ELF加载器中。 问题在于调用返回的起始地址会导致分段错误核心转储。...

9得票2回答
Linux size 命令,为什么 bss 和 data 部分不为零?

我发现了一个名为size的命令,它可以给出ELF文件中某个部分的大小。在尝试使用该命令时,我为最简单的C++程序创建了一个输出文件: int main(){return 0;} 显然我没有定义任何已初始化或未初始化的数据,那么为什么我的BSS和DATA段大小分别为512和8字节? 我认...

9得票1回答
如何在ELF中改变代码段的对齐方式

在ELF二进制文件中,如何更改可加载段的对齐方式?在下面的示例中(请参见右侧),我想将0x200000减少到0x40960。 LOAD 0x000000 0x000000400000 0x0000000000400000 0x000704 0x000704 R E **0x200000...

8得票4回答
一个程序能读取它自己的ELF节吗?

我想使用ld的--build-id选项为我的二进制文件添加构建信息,但我不确定如何使该信息在程序内可用。假设我想编写一个程序,在每次出现异常时写入回溯,以及解析此信息的脚本。该脚本读取程序的符号表,并搜索回溯中打印的地址(因为该程序是静态链接的,backtrace_symbols无法正常工作,...

73得票2回答
在“int main() { return(0); }”中出现浮点异常(SIGFPE)

我正在尝试为两个不同的Linux环境构建一个简单的C程序。在一台设备上,程序可以正常运行;而在另一台设备上,程序会生成浮点异常。该程序仅从主函数返回0,这使我相信可能存在一些与启动代码(可能是ABI)不兼容的问题。 使用gcc编译程序时,采用了以下构建规格: 使用内置规格。目标:i3...

12得票1回答
解释readelf -S输出

我正在尝试将一个 ELF 文件加载到我制作的 MIPS 模拟器中。我遇到的问题是我不太理解 ELF 节头偏移量背后的含义。当我进行段转储时,段 25-31 和 33-35 “开始”于 0x00000000,但头部表明段从某个值的偏移量开始(例如 010190)。另外,在 -S 节的开头,rea...

16得票5回答
将共享库打包到ELF文件中

有没有一个工具可以把精灵需要的所有SO文件转换成静态文件,然后将精灵转换为不需要SO文件?

8得票1回答
为什么LTO在armv8a NDK构建中引入了新的DT标志TLSDESC_PLT和TLSDESC_GOT

我正在使用NDK构建一个armv8a Android SDK,并希望启用LTO构建。我将 -flto 添加到C ++工具链的编译和链接标志中,一切都进行得很顺利,直到我尝试在模拟器中运行时,就会发出以下类似的错误: 警告:链接器:/ data / lib / libservice.so:未...

24得票2回答
使用clang++,-fvisibility=hidden和typeinfo以及类型抹除

这是我在Mac OS X上使用clang++时遇到的问题的简化版本。为了使问题更真实,对其进行了严格编辑(第一次尝试描述该问题时并未展现问题)。 失败原因: 我有一个大型C++软件,其中目标文件中有大量符号,因此我使用“-fvisibility=hidden”来保持我的符号表小。众所周知,...