我需要获取可以从可执行文件中获取的段的开头和结尾,例如使用 objdump 命令(文本、数据、bss)。我需要获取有关我调用的文件的信息(程序应该检索有关自身的信息)。我怎样才能做到这一点。 我还尝试获取堆栈段的起始地址和结束地址。我试图获取第一个和最后一个局部变量的地址,但这只会显示完整堆栈的一部分。如何获取完整堆栈的地址?
如果有任何帮助,我将不胜感激。提前谢谢。
最佳答案
I need to get start and end of segments that I can get from executable file , for instance using size command (text,data,bss).
.text
, .data
和.bss
是部分,而不是段。文件中可能根本不存在节,但必须存在段(只有运行时需要段)。
How can I do this.
学习/usr/include/elf.h
,还有很多resources可以在网上找到。每个ELF
文件以 Elf{32,64}_Ehdr
开头,其中包含 .e_phoff
和.e_phnum
。使用这些成员,您可以查找并解码段表。您可以使用.e_shoff
和.e_shnum
以类似方式查找节表(如果存在)。
Also I have tried to get start and end addresses of stack segment
你不能:堆栈启动不包含在二进制文件中,而是由内核在进程启动时动态确定。此外,堆栈的结束是正在运行的程序的动态属性,并且取决于程序正在做什么,以及ulimit
设置。
关于linux - 如何从可执行文件中获取段地址并找到堆栈地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26701556/