Linux精灵.text方向
我想知道我的C++应用程序的.text开始和大小。我一直在阅读这方面的相关主题(link),但我无法做到我想要的。Linux精灵.text方向
分析我的示例程序的readelf输出我得到这个:
Section Headers: [Nr] Name Type Address Offset
Size EntSize Flags Link Info Align
[14] .text PROGBITS 0000000000400830 00000830
0000000000000252 0000000000000000 AX 0 0 16
所以据我所知,在0x400830地址我的程序启动的.text段。
,但我不能访问这个地址从我的程序:
printf("My process ID : %d\n", getpid()); printf("Executable Start address: 0x%lx\n", (unsigned long)&__executable_start);
printf("Text Start Address: 0x%lx\n", (unsigned long)&__etext);
但输出是:
My process ID : 4029 Executable Start address: 0x400000
Text Start Address: 0x400a8d
正如你可以看到起始地址是不一样的。我如何访问.text部分的起始地址。我需要知道大小或最终地址......这可能吗?
回答:
我想知道我的C++应用程序的.text开始和大小。
如果你告诉我们为什么你想知道的是,你很可能已经获得了更好的答案。
注意,可执行并不需要有一个.text
部分在所有:部分表可能被剥离,并将可执行将仍然运行得很好。对于这样的二进制文件,你的问题是不可回答的。
要知道ELF二进制文件.text
的确切偏移量和大小,只需阅读截面表(就像readelf
一样)。这是not hard。
不这样做,你可以通过使用启发式/近似值得到相当接近。您已找到__executable_start
和__etext
。通过使用&__start
-通常是可以获得更紧密的界限,这是.text
部分中的第一个符号。
以上是 Linux精灵.text方向 的全部内容, 来源链接: utcz.com/qa/260294.html