如何在MacOS上获取数据段地址

时间:2017-02-28 11:11:59

标签: c macos memory

我想访问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的地址不在etextend之间。 edata似乎是NULL

0 个答案:

没有答案