|
发表于 2018-6-20 18:25:20
|
显示全部楼层
本帖最后由 xypmyp 于 2018-6-20 18:37 编辑
我都是剛剛開始學習assembly language, 你這樣一問我就做了實驗, 發現 debug.exe 應該是沒有直接查出物理地址的功能(不確定). 因為用-d, 輸出一定有偏移地址, 而且我想物理地址應該不會只有16^5 = 1048576 個空間這樣細, 所以我用cheat engine 查一查, 發現本身的 virtual address "073f:0000" 的數據在 physical address "07a67411" 這個應該不只用加減法可以得到的(應該是某某算法), 所以我去了 google 一下, 發現這個是 内存管理的部分, 跟系統有很大的關係.
分页内存管理方案 應該是影響 physical address 的因素
引用 "Felix 的博客 算法与.NET之路"
(分页的最大作用就在于:使得进程的物理地址空间可以是非连续的。
物理内存被划分为一小块一小块,每块被称为帧(Frame)。分配内存时,帧是分配时的最小单位,最少也要给一帧。在逻辑内存中,与帧对应的概念就是页(Page)。
逻辑地址的表示方式是:前部分是页码后部分是页偏移 ) [段地址*16+偏移地址 的表示方式? (不確定)]
*https://www.cnblogs.com/felixfang/p/3420462.html <- 内存管理笔记(分页,分段,逻辑地址,物理地址与地址转换方式)
結論:
這個很肯定内存管理有關.由於剛開始學習, 所以其實不太了解而且可能有很多不正確的地方, 但希望可以提供一下思路.
*先bookmark, 未來有能力的時候再解答
問:
段地址*16+偏移地址 只用在沒有内存管理的系統?
那段地址*16+偏移地址 是什麼?
如何找出分页内存表?
cheat engine 的address 只有 16^8 = 4gb 的空間, 但我有16gb 的内存, 那其他的 12gb 哪去呢? |
|