百科问答小站 logo
百科问答小站 font logo



以下我关于虚拟地址与物理地址的理解是正确的吗? 第1页

  

user avatar   bei-ji-85 网友的相关建议: 
      
1,调试程序用到的都是虚拟地址。虚拟地址转化成物理地址的方式,有严谨的逻辑支持,让程序员只用在虚拟地址层面分析程序,依然不会出错?学习逆向,需要对物理地址有足够认识吗?还是既然别人集成好了,只需要在虚拟地址层面分析就行了?

需要,分析内核的时候需要跟物理地址打交道,比如修改GDT, IDT, 页表这些,拿到物理地址并攻击的话更方便。

2,虚拟地址的后12位是最终指向的物理内存段的段内偏移(32位)。如果某虚拟地址做加法后12位发生了溢出,•••••FFF+1,那么结果中间断加1,中间断不溢出的情况下,代表页表指向的是原项后面的一项(一个全新的页地址),整个加法结果作为虚拟地址所指向的物理地址便是一个新的地址。也就是虚拟地址加1,物理地址有可能加“1万”?这种溢出是被允许的吗?

你这段描述有点问题,在现有的Windows或者Linux的内存模型里,段的概念已经弱化了,所以可以不用考虑段内偏移的概念。

后面的描述更是看不明白要表达什么,物理地址跟虚拟地址可能不一一对应,也可能不连续对应,页边界的两块数据在物理地址上可能距离很远

3,虚拟地址前20位指示页目录“偏移”和页表“偏移”,这里偏移指第多少项,并非地址偏移。那么同一进程,前20位相同,后12位不同的虚拟地址指向的页目录相同,页表相同,页相同,物理地址不同?

两个地址如果页表和页目录地址相同,那么说明两个地址在同一个物理页里(一般是4K),至于你要问的什么,不是太明白,表述的不清楚。开启分页的情况下,虚拟地址的前20位都是索引(基于页表等),跟物理地址没关系,寻址需要做多次查表操作。

我感觉你没有分清楚保护模式下的段和页的区别,保护模式下,段的意义弱化了,主要是靠分页。

题外话:学习逆向,不建议直接看IA的手册,内容太多,不容易找到切入点。建议先从应用层面学,先学汇编(同时学点C语言就更好),再学操作系统,IA的手册太庞杂,不一定跟实际工程经验相关。




  

相关话题

  为什么一些人很瞧不起 Java? 
  为什么有关计算机 CPU 的知识不解密? 
  请教大家,我明年2022年8月份去美国读cs,后年2023年5月份就毕业了,那我还有机会找实习吗? 
  Yann LeCun、Geoffrey Hinton或Yoshua Bengio能得图灵奖吗? 
  程序员把工作完全自动化了是什么体验? 
  哪款笔记本电脑最适合学习写代码? 
  32位的cpu只能寻址4GB的内存空间,那么硬盘,flash这些存储设备是如何寻址的的?cpu怎样读取其中某个地址的数据? 
  Qt 为什么在桌面应用(Windows 平台)中不流行呢? 
  为什么google编程风格指南设置缩进为2个空格? 
  编程中,有哪些好的习惯从一开始就值得坚持? 

前一个讨论
2019年,汉族和满族在哪些方面还有不同?
下一个讨论
UFS使用SCSI指令,为啥不使用NVMe的指令呢?





© 2024-11-08 - tinynew.org. All Rights Reserved.
© 2024-11-08 - tinynew.org. 保留所有权利