我想访问c程序的数据段。我找到了一个适用于Linux的解决方案: Where are the symbols etext ,edata and end defined?
但是为MacOS提出的解决方案对我不起作用。 我有以下代码:
#include <stdio.h>
#include <stdlib.h>
#include <mach-o/getsect.h>
int i;
int main(int argc, char *argv[])
{
printf("%p\n", &i);
printf(" program text (etext) %p\n", (void*)get_etext());
printf(" initialized data (edata) %10p\n", (void*)get_edata());
printf(" uninitialized data (end) %p\n", (void*)get_end());
exit(EXIT_SUCCESS);
}
哪个输出:
0x10c35b038
program text (etext) 0x100000ee6
initialized data (edata) 0x0
uninitialized data (end) 0x100003000
i
的地址不在etext
和end
之间。 edata
似乎是NULL
。