C “的结果;“尺寸”;linux中的命令和text&;edata&;目的不同
代码是C “的结果;“尺寸”;linux中的命令和text&;edata&;目的不同,c,linux,process,C,Linux,Process,代码是 /* test_etext.c */ #include <unistd.h> #include <stdio.h> extern char etext, edata, end; int main(int argc, char *argv[]) { pid_t pid, ppid; pid = getpid(); ppid = getppid(); printf("%ld\t%ld\t%ld\n", &etext,
/* test_etext.c */
#include <unistd.h>
#include <stdio.h>
extern char etext, edata, end;
int
main(int argc, char *argv[])
{
pid_t pid, ppid;
pid = getpid();
ppid = getppid();
printf("%ld\t%ld\t%ld\n", &etext, &edata-&etext, &end-&edata);
return 0;
}
问题是为什么“&edata-&etext”和“data”之间的段数据是不同的?当然它们是不同的!你看过手册了吗
是文本(code)结尾后的第一个地址etext
是经过初始化数据末尾的第一个地址,并且edata
是超过未初始化数据(bss)末尾的第一个地址end
/proc/self/statm
伪文件来询问内核的意见。如果需要更详细的信息(如动态加载库的详细信息)或与大小
命令输出匹配的信息,请阅读/proc/self/smap
或/proc/self/maps
伪文件。这些都将在中详细描述
对于可执行的ELF文件——例如,类似于
size
或objdump
的工作方式——使用现有的实用程序或至少使用现有的库。当然它们是不同的!你看过手册了吗
是文本(code)结尾后的第一个地址etext
是经过初始化数据末尾的第一个地址,并且edata
是超过未初始化数据(bss)末尾的第一个地址end
/proc/self/statm
伪文件来询问内核的意见。如果需要更详细的信息(如动态加载库的详细信息)或与大小
命令输出匹配的信息,请阅读/proc/self/smap
或/proc/self/maps
伪文件。这些都将在中详细描述
对于可执行ELF文件——例如,类似于size
或objdump
的工作方式——请使用现有的实用程序,或者至少使用现有的库。谢谢,“过去”一词让我感到困惑。我认为文本段和etext的结尾位置是连续的。谢谢,过去这个词让我感到困惑。我认为文本段末尾和etext的位置是连续的。
gcc -o test_etext test_etext.c
./test_etext
4196125 2099507 8
size ./test_etext
text data bss dec hex filename
1532 592 8 2132 854 ./test_etext