我正在尝试使用逻辑地址进行一些分析。以下程序说明 我的动机......
#include<stdio.h>
int main()
{
int x=10;
printf("The address of main is %p\n",&main);
printf("The address of x is %p\n",&x);
return 0;
}
当我在我的32位系统中运行该程序时,显示
The address of main is 0x80483b4
The address of x is 0xbfe3b1e0
size page_size
text data bss dec hex filename
993 260 4 1257 4e9 page_size
getconf PAGESIZE
4096
我希望将逻辑地址与页面大小相关联。 我的意思是说这个逻辑地址是如何创建的(就偏移量,页面,数据而言)
对于这个程序大小是1257字节,但我认为整个页面将被加载(纠正我,如果我错了)是否有任何方式,我可以确定整个页面加载或只有1257字节 加载。
我希望我的问题很明确,如果有任何不符,请告诉我。感谢
答案 0 :(得分:0)
您最好了解二进制程序如何加载到操作系统中。二进制文件中的不同部分将被加载到不同的页面中。
尝试阅读文件/ proc / [proc-id] / maps,您将获得有关此类问题的更多想法。
同时学习ELF格式也有帮助。
答案 1 :(得分:0)
您需要牢记两件事。一个是你将拥有构成主要和第二个的指令的地址,你将拥有正在运行的程序所需的堆栈空间。 main的地址将在指令空间中,x的地址实际上在堆栈中。