【发布时间】:2017-12-03 09:59:21
【问题描述】:
我想知道我的 c++ 应用程序的 .text 开头和大小。我一直在阅读与此相关的主题 (link),但我无法做我想做的事。
分析我的示例程序的 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
所以我知道我的程序的 .text 部分从 0x400830 地址开始。
但我无法从我的程序中访问此地址:
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 部分的起始地址。我需要知道大小或结束地址...这可能吗?
【问题讨论】:
-
__etext 是文本部分的结尾,“e”有点暗示你。
-
C != C++。仅使用您正在使用的语言进行标记,除非两者确实相关。
-
如果 __etext 是文本部分的结尾......我如何才能获得文本部分的开头?
-
另外,取决于你想要达到的目标,ALSR 可能是一个严肃的 PITA