① 物理存儲器和存儲地址空間的區別
區別
1、存在方式
物理存儲器是實際存在的儲存地址,而存儲地址空間指邏輯上的儲存地址。
物理存儲器和存儲地址空間兩者都用B、KB、MB、GB來度量其容量大小。
物理存儲器:是指實際存在的具體存儲器晶元。如主板上裝插的主存條和裝載有系統的BIOS的ROM晶元,顯示卡上的顯示RAM晶元和裝載顯示BIOS的ROM晶元,以及各種適配卡上的RAM晶元和ROM晶元都是物理存儲器。
存儲地址空間:是指對存儲器編碼(編碼地址)的范圍。所謂編碼就是對每一個物理存儲單元(一個位元組)分配一個號碼,通常叫作「編址」。分配一個號碼給一個存儲單元的目的是為了便於找到它,完成數據的讀寫,這就是所謂的「定址」。
(1)物理地址與高速緩存地址擴展閱讀
主板上裝插的主存條和裝載有系統的BIOS的ROM晶元,顯示卡上的顯示RAM晶元和裝載顯示BIOS的ROM晶元,以及各種適配卡上的RAM晶元和ROM晶元都是物理存儲器。
存儲器是用來存儲程序和數據的部件,對於計算機來說,有了存儲器,才有記憶功能,才能保證正常工作。存儲器的種類很多,按其用途可分為主存儲器和輔助存儲器,主存儲器又稱內存儲器(簡稱內存,港台稱之為記憶體)。
內存又稱主存,是CPU能直接定址的存儲空間,由半導體器件製成。內存的特點是存取速率快。內存是電腦中的主要部件,它是相對於外存而言的。
② 物理地址.內存地址和RVA地址有什麼區別
打個比喻:內存,段號,偏移量,存儲單元的內容-》學校,班級,學號,具體的學生。通過班級和學號就可以找到對應的學生,內存的訪問也類似,通過段號和段內偏移量訪問對應的存儲單元。
段可以理解為一片連續的內存空間塊,開始處指的是這片空間的第一個位元組。
對於一個16位的偏移量,它的取值范圍是0--65535(2的16次方減去1),所以偏移量可以是1。
你可能混淆了概念,仔細的想一下學校,班級,學號,學生;這種關系就跟內存,段號,偏移量,存儲單元的內容一樣。 下面介紹一下相關虛擬地址(Relative Virtual Addresses)
PE格式文件中經常用到RVA,即相關虛擬地址,用在不知道基地址的情況下表示一個內存
地址。它需要加上基地址才能得到線性地址(Linear address)。
例如:假設一個可執行程序調入內存0x400000處並且程序從RVA 0x1560處開始執行。那
么正確的開始地址是0x401560。如果可執行程序調入0x100000處,則開始地址為0x101560。
因為PE文件的每一個段不必按同樣的邊界對齊方式調入,因此RVA地址的計算變得比較復
雜。例如,在文件中每一個段往往按512個位元組的方式對齊,而在內存中可能以4096位元組的方
式對齊。這方面的介紹可見下面的「SectionAlignment」、「FileAlignment」。舉個例子,
假設你知道一個程序從RVA 0x1560開始執行,你想從那兒反匯編它。你發現內存中的段對齊方
式為4096並且.code段開始於內存RVA 0x1560並且有16384位元組長;那麼你可以知道RVA 0x156
0在這個段的0x560處。你又發現這個段在文件中以512位元組方式對齊並且.code開始於文件0x8
00處,那現在你知道了可執行程序開始於0x800+0x560 = 0xd60處。