【发布时间】:2020-03-29 23:41:41
【问题描述】:
我正在熟悉 C 语言,并且正在研究程序的内存布局。 我确实设法获得了一些关于变量在内存中的位置的信息,但我仍然有一些我不清楚。
我在运行在 virtualbox 上的 lubuntu 18.04 和作为主机的 windows 10 上运行了这个
假设我有以下程序:
int foo(); // (??)
void point(void* p); // (??)
int data1; // bss segment
int data2 = 3; // data segment
int main(){
char str[3] = {'a','b','c'}; // text segment(??)
char *str1 = "word"; // str1 - stack, *str1 = 'w' - text segment (??)
point(&data1); // call stack
return 0;
}
void point(void* p){
long dist1 = (size_t)&data2 - (size_t)p; // call stack - inside point's AF: dist1, p
printf("%ld\n", dist1); /* is a long integer generally enough to hold addresses (or difference of
addresses). is it legal to calculate differences of addresses of different
segments? */
}
int foo(){
return 0;
}
对于我在 cmets 中添加的问题,我需要一些帮助,并且可能需要对我已经完成的工作进行确认。
提前致谢。
【问题讨论】:
-
如果您使用的是 Linux,请尝试
readelf和objdump。
标签: c ubuntu-18.04 memory-layout