2009-12-08 145 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的地址實際上位於堆棧中。