问题标签 [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.
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
elf - 填充如何在 elf 文件中工作
我知道 ELF 文件中的虚拟地址和文件偏移量之间的关系
我知道这是由于页面尺寸(x86 架构中的 0x1000)。第一个问题:
- 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
- 为什么这两个部分之间有很多零?
我认为它没有链接到页面:如果它的文件偏移量是(例如)0x1f100 而不是 0x1f390,它应该可以正常工作。
在这种情况下,它的虚拟地址应该是 0x21f100,因此尊重同余律
我的解释有什么问题?
elf - 分析 ELF 内存布局
我正在使用 readelf 分析 ELF 可执行文件并获取以下程序和标题。
1)。为什么程序头表中的 GNU_STACK 没有大小或起始地址?
2)。在布局为什么从 1536 到 3852(2316 字节)的内存位置没有信息?这个空间是用来做什么的?
3)。添加额外的文本部分需要对此格式进行哪些更改?
binary - 如何使用 readelf 确定要重定位的内容
从下面的片段中,我可以看到重定位条目将应用于0x000000201018
某个部分的偏移量,但我如何确定哪个部分?
我的所有部分也都小于这个偏移量。这意味着什么?
搬迁:
部分标题:
linux - 链接器如何将程序头添加到可重定位文件?
所以我们知道linker
(在我的情况下ld
)Program Headers
在Relocatable file
创建实际的Executable
.
然后这些标头用于在运行时将程序加载到内存中。
首先如何
ld
计算这些头文件并将其添加到文件中?然后如果
Program Headers
仅用于将程序加载到内存中(如果我错了,请纠正我),为什么不同的可执行文件有不同的数量Program Headers
?
例如,用汇编语言编写的简单 helloworld 有2 个程序头:
但是bash
有11 个程序头:
elf - 如何理解elf中Program Headers中Offset和VirAddr的区别?
有一个共享库elf文件,我readelf -l
用来查看程序头文件,输出为:
如果以下结构表示程序头:
那么我的问题是:如何理解与输出对应的p_offset
和之间的区别?他们会永远一样吗?并且它们会被动态加载的过程改变吗?p_vaddr
Offset
VirtAddr
readelf -l
linux - 我可以通过“GOT 地址”获取符号名称吗?
现在我正在开发程序,比如readelf
使用pyelftools
库。
我想打印如下表。
在这里,Offset
字段是stderr@GOT
地址。
假设我只有00001c50
未知符号的 GOT 地址()。
我的情况是我想get_symname_by_GOTaddress
从00001c50
tostderr@GLIBC_2.0
。
问题:但是,我找不到二进制之间的GOT address
任何symbol name
我怎么才能得到它?
gdb - 如何从给定偏移量的 ELF 文件中提取符号名称
我有一个十六进制偏移量说 0xcccddd 。使用gdb info symbol 0xcccddd
i 可以获得符号名称,例如。节名中的 fn()。如何使用readelf 或 objdump命令执行此操作。或任何其他不运行 gdb 的命令。
编辑: 使用以下命令后
我正进入(状态
谁能帮我这个。提前致谢
elf - ELF 文件中重定位表的位置
我没有找到任何关于 ELF 文件中重定位表位置的信息。
我的项目是显示有关 ELF 文件的信息,例如readelf
. 我做了 Header、Section Header 和 Symbol 表的显示,但我不知道在哪里可以找到重定位表。
谁能解释我重定位表在 ELF 文件中的位置?
谢谢
object - 如何使用 binutils 确定 elf 的 Ram/Rom 使用情况?
我想借助 binutils 工具提取每个模块的 Ram 和 Rom 使用情况。我有几个对象(可重定位的 elf 文件)和一个最终的可执行文件(elf)来确定这些数据。
我正在为内存分析编写一个可重用的(在不同的编译器中)后端。编译器倾向于创建一个地图文件并存储我正在寻找的信息,所以我可以编写一个工具来将这些地图文件转换为统一格式,但我宁愿使用已经统一的 elf 文件并编写一个提取这些文件的例程数据一次。
我还没有真正实现一些东西,因为我不太确定要走哪条路。
我很想听听相关项目或一些关于该主题的提示或信息。我已经完成了我的研究,但只能从 binutils 中找到使用“elfread”、“nm”或“size”的建议,这就是我已经在做的。