27得票2回答
ELF中程序头和节头的区别

Q1 ELF中程序头(Program header)和节头(Section Header)之间有什么区别? Q1.1 段(segment)和节(section)之间的区别是什么? 我认为pheaders只指向sections。 Q2 文件头(File Header)和程序头(Program ...

27得票3回答
位置无关代码的区别:x86与x86-64

我最近在构建一个针对x86-64架构的特定共享库(ELF),如下所示:g++ -o binary.so -shared --no-undefined ... -lfoo -lbar 以下是该问题的错误信息: 重定位R_X86_64_32至“一个本地符号”时无法用于制作共享对象;请使用 ...

27得票3回答
为什么我的可执行文件的入口地址是0x8048330?(0x330是.text段的偏移量)

我写了一个小程序来相加两个整数,在使用readelf -a 可执行文件名命令时,它显示 elf header 中的入口点地址为:Entry point address: 0x8048330 我的可执行文件如何在加载到内存之前就知道这个地址呢?elf_format.pdf中说,这个成员提供了系统...

26得票4回答
读取ELF文件中DWARF调试信息的库

有没有推荐一个跨平台的库,可以读取DWAF格式的ELF文件调试信息?我想在Python程序中读取DWARF调试信息。

26得票4回答
elf格式中可执行文件和可重定位文件有什么区别?

ELF格式中的可执行文件和可重定位文件有何区别?

26得票1回答
强制GNU链接器生成32位ELF可执行文件

你好,我正在为自己编写的编译器生成x86汇编代码,但在64位虚拟机上链接文件时遇到了一些问题(汇编代码是32位的)。 我使用以下命令可以成功地组装目标文件:as --32 mult.S -o mult.o 但是我似乎找不到任何选项可以使ld生成一个32位的ELF文件:ld <some-...

26得票2回答
为什么 ELF 执行入口点的虚拟地址形式是 0x80xxxxx 而不是零 0x0?

执行程序时,程序将从虚拟地址0x80482c0开始运行。此地址不指向我们的main()过程,而是链接器创建的名为_start的过程。 目前我的谷歌研究只导致了一些(模糊的)历史推测,比如这个: “有一种传说是0x08048000曾经是STACK_TOP(也就是说,栈从接近0x0804800...

25得票1回答
在64位x86平台上,比较PIE、PIC代码和可执行文件有什么区别?

这个测试运行在Ubuntu 12.04 64位的x86架构上。 我对位置无关可执行文件(PIE)和位置无关代码(PIC)的概念感到困惑,而且我猜它们不是正交的。 这是我的快速实验。gcc -fPIC -pie quickSort.c -o a_pie.out gcc -fPIC ...

25得票6回答
在Mac OS X上构建Linux内核

我的项目是修改Linux内核。我有一台桌面Linux机器,构建内核没有问题。 然而,我要外出旅行,并希望边走边工作。我只有一台MacBook。当我尝试构建Linux内核时,它抱怨找不到elf.h。 我从互联网上下载了一个elf.h。现在它报错:NO ELF 我试着将整个/usr/incl...

25得票5回答
如何找出程序或其他库使用的共享对象的哪些函数?

我该如何找到一个程序或另一个库使用的共享对象中的哪些函数? 在这个具体的情况下,我想知道在 /lib/libgcc1_s.so.1 中的哪些函数被另一个动态库使用。 由于它们是动态链接的,objdump -d 无法解析函数调用地址。 除了在调试器中运行程序或静态地重新链接之外,是否有其他方法?...