• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

Linux精灵.text方向

c/c++ 来源:Xabi E 5次浏览

我想知道我的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部分中的第一个符号。


版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)