**:
首先必須明白 cpu和記憶體的區別
cpu **處理器 記憶體是物理資料存放的地方
cpu不直接存放資料而是通過記憶體來存放資料
cpu和記憶體之間通過20條位址匯流排相連線,位址匯流排就是cpu通過位址找到對應的記憶體的物理資料的傳遞工具
計算機只能處理0,1 二進位制資料
每一條線可以處理 0,1 兩種型別資料
所以20根線的 總共能擁有 2^20=1048576個不相同的位址 也就是能搜尋 1048576個位址範圍內的記憶體
那麼 乙個位址代表乙個儲存單元 乙個儲存單元能夠儲存 1byte資料
那麼也就是1048576個位址 能夠找到 1048576個1byte資料=1m的資料
也就是說 20位位址匯流排總共也就能處理1m的記憶體 資料
然後cpu的定址能力只能16位不能達到20位 怎麼處理了
cpu的位址都是使用16進製表示
最多也只能找到 2的16次方 個位址 也就是65536個位址 只能處理 也就是只能處理 64k的記憶體資料 64k記憶體的電腦能用???
這裡就提出了段的概念 將1g的資料劃分為 n個段 每乙個段 是64k
64k也就是65536個位址 16位的定址就能找到了這65536個位址了 難道每個64k的 相同的位置的位址都有同乙個 但是有n個64mk歇菜了 還是找不到
真正的那個位址啊
如果在加入乙個位址了??? 這個位址用來處理n個 這個位址就是段位址
每乙個段也就是每乙個64k就是乙個基位址 段內的資料的位址就是當前基位址的偏移位址
此時 段位址+偏移位址就能夠找到真正的記憶體資料了
而偏移位址相當於在首位址的基礎上 移動的距離
比如 0bac:0100
0bac是基位址,0100是偏移位址
0bac 4位的十六進製制 表示 16位的2進製資料 轉換後為:
0000 1011 1010 1100
必須要轉換成 20位(也就是5位的16進製制) 才能在20位位址匯流排中傳遞 才能達到 1g的資料訪問範圍
怎麼轉換成 20位 能讓資料傳遞到記憶體中找到物理資料了
記憶體的實體地址 =基位址*16+偏移位址
記憶體的實體地址 =0bac*16+0100=0bac0+0100=0bbc0h
0bbc0 就是5位的十六進製制 就是 4*5=20位了 可以傳遞到記憶體了
實際傳遞二進位制就是:
0000 1011 1011 1100 0000
20根位址匯流排就能處理了
32位彙編 32根位址匯流排 總共能夠直接 就找到 2的32次方個位址 也就是4294967296 byte資料 也就是 4g的記憶體
而且不在將記憶體分成一段一段 所有的記憶體區域都是連續的
基位址和偏移位址的概念
首先必須明白 cpu和記憶體的區別 cpu 處理器 記憶體是物理資料存放的地方 cpu不直接存放資料而是通過記憶體來存放資料 cpu和記憶體之間通過20條位址匯流排相連線,位址匯流排就是cpu通過位址找到對應的記憶體的物理資料的傳遞工具 計算機只能處理0,1 二進位制資料 每一條線可以處理 0,1 ...
段位址和偏移位址
該書所使用的cpu是8086,字長16位,資料匯流排寬度為20位。字長如果是16的話,那麼cpu定址範圍是2 16 64k,而資料匯流排寬度是20位的話,那麼通過資料匯流排定址範圍就是2 20 1m 這就是為什麼32位機器2 32 4g只能使用4g記憶體空間的原理 這裡就出現矛盾了,一邊是64k,一...
獲取ntkrnlpa exe基位址
獲取核心摸塊的位址,在一般,二般,三般的情況下,你可能會遇到下面的情況 1 zwquerysysteminformation被hook 2 斷了鏈 3 擦了 mz 沒有第乙個模組ntkrnlpa.exe.很多anti rootkit都不能正確執行吧但方法還是有的,思路 ntkrnlpa.exe基位址...