Linux精灵.TEXT方向

Linux elf .text direction

本文关键字:方向 TEXT 精灵 Linux      更新时间:2023-10-16

我想知道我的C 应用程序的.TEXT启动和大小。我一直在阅读有关此的相关主题(链接),但我无法做我想做的事。

分析样本程序的阅读输出,我得到了:

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 : %dn", getpid());
printf("Executable Start address: 0x%lxn", (unsigned long)&__executable_start);
printf("Text Start Address: 0x%lxn", (unsigned long)&__etext);

,但输出为:

My process ID : 4029
Executable Start address: 0x400000
Text Start Address: 0x400a8d

您可以看到起始地址并不相同。我如何访问.TEXT部分的开始地址。我需要知道大小或结束地址...这可能吗?

我想知道我的C 应用程序的.TEXT启动和大小。

如果您告诉我们为什么您想知道,您可能会得到更好的答案。

请注意,可执行文件不需要一个.text完全可以剥离:可以剥离截面表,并且可执行文件仍然可以运行正常。对于这样的二进制,您的问题是无法回答的。

要了解精灵二进制的.text的确切偏移和大小,只需读取部分表(就像readelf一样)。这并不难。

不这样做,您可以通过使用启发式/近似。

您已经找到了__executable_start__etext。可以使用&__start- 通常获得更严格的绑定,这是.text节中的第一个符号。