Linux elf .text方向
Linux elf .text direction
我想知道我的 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 部分的起始地址。我需要知道大小或结束地址...这可能吗?
I want to know to the .text start and size of my c++ application.
如果你告诉我们为什么你想知道那个,你可能会得到更好的答案。
请注意,executable 根本不需要 .text
部分: table 部分可能会被删除,executable 仍然 运行 就好了。对于这样的二进制文件,您的问题无法回答。
要知道 ELF 二进制文件 .text
的确切偏移量和大小,只需阅读 table 部分(就像 readelf
一样)。这是 not hard。
如果不这样做,您可以通过使用启发式/近似法获得相当接近的结果。
您已经找到 __executable_start
和 __etext
。可以通过使用 &__start
获得更严格的界限—— 通常 是 .text
部分中的第一个符号。
我想知道我的 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 部分的起始地址。我需要知道大小或结束地址...这可能吗?
I want to know to the .text start and size of my c++ application.
如果你告诉我们为什么你想知道那个,你可能会得到更好的答案。
请注意,executable 根本不需要 .text
部分: table 部分可能会被删除,executable 仍然 运行 就好了。对于这样的二进制文件,您的问题无法回答。
要知道 ELF 二进制文件 .text
的确切偏移量和大小,只需阅读 table 部分(就像 readelf
一样)。这是 not hard。
如果不这样做,您可以通过使用启发式/近似法获得相当接近的结果。
您已经找到 __executable_start
和 __etext
。可以通过使用 &__start
获得更严格的界限—— 通常 是 .text
部分中的第一个符号。