问题标签 [readelf]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
621 浏览

linux - readelf 如何计算函数大小

我试图了解 readelf 实用程序如何计算函数大小。我写了一个简单的程序

现在检查我使用的函数大小(可以吗?):

readelf -sw a.out|sort -n -k 3,3|grep FUNC

这产生了:

现在,如果我检查 main 函数的大小,它会显示 16。它是如何得出的?那是堆栈大小吗?

编译器使用 gcc 版本 4.8.5 (Ubuntu 4.8.5-2ubuntu1~14.04.1)

GNU readelf(用于 Ubuntu 的 GNU Binutils)2.24

0 投票
0 回答
609 浏览

elf - 填充如何在 elf 文件中工作

我知道 ELF 文件中的虚拟地址和文件偏移量之间的关系

我知道这是由于页面尺寸(x86 架构中的 0x1000)。第一个问题:

  1. x64 架构中的页面尺寸是多少?它是 0x200000 还是可以更低?

继续前进,如果我尝试readelf -lW /bin/ls,我会获得以下信息:

并使用命令readelf -SW /bin/ls

该段中的最后一个部分LOAD (R E).eh_frame; 段中的第一部分LOAD (R W).init_array.

在 ELF 文件中,两个部分之间有很多零hexdump -C /bin/ls

  1. 为什么这两个部分之间有很多零?

我认为它没有链接到页面:如果它的文件偏移量是(例如)0x1f100 而不是 0x1f390,它应该可以正常工作。

在这种情况下,它的虚拟地址应该是 0x21f100,因此尊重同余律

我的解释有什么问题?

0 投票
0 回答
616 浏览

elf - 分析 ELF 内存布局

我正在使用 readelf 分析 ELF 可执行文件并获取以下程序和标题。

1)。为什么程序头表中的 GNU_STACK 没有大小或起始地址?

2)。在布局为什么从 1536 到 3852(2316 字节)的内存位置没有信息?这个空间是用来做什么的?

3)。添加额外的文本部分需要对此格式进行哪些更改?

0 投票
1 回答
499 浏览

binary - 如何使用 readelf 确定要重定位的内容

从下面的片段中,我可以看到重定位条目将应用于0x000000201018某个部分的偏移量,但我如何确定哪个部分?

我的所有部分也都小于这个偏移量。这意味着什么?

搬迁:

部分标题:

0 投票
1 回答
194 浏览

linux - 链接器如何将程序头添加到可重定位文件?

所以我们知道linker(在我的情况下ldProgram HeadersRelocatable file创建实际的Executable.

然后这些标头用于在运行时将程序加载到内存中。

  • 首先如何ld计算这些头文件并将其添加到文件中?

  • 然后如果Program Headers仅用于将程序加载到内存中(如果我错了,请纠正我),为什么不同的可执行文件有不同的数量Program Headers

例如,用汇编语言编写的简单 helloworld 有2 个程序头

但是bash11 个程序头

0 投票
2 回答
956 浏览

elf - 如何理解elf中Program Headers中Offset和VirAddr的区别?

有一个共享库elf文件,我readelf -l用来查看程序头文件,输出为:

如果以下结构表示程序头:

那么我的问题是:如何理解与输出对应的p_offset和之间的区别?他们会永远一样吗?并且它们会被动态加载的过程改变吗?p_vaddrOffsetVirtAddrreadelf -l

0 投票
1 回答
308 浏览

linux - 我可以通过“GOT 地址”获取符号名称吗?

现在我正在开发程序,比如readelf使用pyelftools库。

我想打印如下表。
在这里,Offset字段是stderr@GOT地址。


假设我只有00001c50未知符号的 GOT 地址()。

我的情况是我想get_symname_by_GOTaddress00001c50tostderr@GLIBC_2.0

问题:但是,我找不到二进制之间的GOT address任何symbol name我怎么才能得到它?

0 投票
1 回答
1180 浏览

gdb - 如何从给定偏移量的 ELF 文件中提取符号名称

我有一个十六进制偏移量说 0xcccddd 。使用gdb info symbol 0xcccdddi 可以获得符号名称,例如。节名中的 fn()。如何使用readelf 或 objdump命令执行此操作。或任何其他不运行 gdb 的命令。

编辑: 使用以下命令后

我正进入(状态

谁能帮我这个。提前致谢

0 投票
1 回答
1081 浏览

elf - ELF 文件中重定位表的位置

我没有找到任何关于 ELF 文件中重定位表位置的信息。

我的项目是显示有关 ELF 文件的信息,例如readelf. 我做了 Header、Section Header 和 Symbol 表的显示,但我不知道在哪里可以找到重定位表。

谁能解释我重定位表在 ELF 文件中的位置?

谢谢

0 投票
0 回答
941 浏览

object - 如何使用 binutils 确定 elf 的 Ram/Rom 使用情况?

我想借助 binutils 工具提取每个模块的 Ram 和 Rom 使用情况。我有几个对象(可重定位的 elf 文件)和一个最终的可执行文件(elf)来确定这些数据。

我正在为内存分析编写一个可重用的(在不同的编译器中)后端。编译器倾向于创建一个地图文件并存储我正在寻找的信息,所以我可以编写一个工具来将这些地图文件转换为统一格式,但我宁愿使用已经统一的 elf 文件并编写一个提取这些文件的例程数据一次。

我还没有真正实现一些东西,因为我不太确定要走哪条路。

我很想听听相关项目或一些关于该主题的提示或信息。我已经完成了我的研究,但只能从 binutils 中找到使用“elfread”、“nm”或“size”的建议,这就是我已经在做的。