2009-12-08 75 views
0

我想用逻辑地址做一些分析。下面的程序说明 我的动机......逻辑地址混淆

#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字节,但我认为整个页面将被加载(纠正我,如果我错了)有什么办法我可以确定整个页面得到加载或只有1257bytes 得到加载。

我希望我的问题清楚,如有任何差异,请让我知道。谢谢

回答

0

你最好多了解一个二进制程序如何加载到操作系统。二进制中的不同部分将被加载到不同的页面中。

尝试读取文件/ proc/[proc-id]/maps,你会得到更多关于这个问题的想法。

也学习ELF格式也有帮助。

0

有两件事需要牢记。一个是你将拥有构成你的主要指令的地址,其次你将拥有正在运行的程序所需的堆栈空间。 main的地址位于指令空间中,x的地址实际上位于堆栈中。