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

回到顶部