百科问答小站 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的手册太庞杂,不一定跟实际工程经验相关。




  

相关话题

  如何评价《鸟哥的Linux私房菜》说BSD和GPL很类似以及Windows不跨处理器架构等内容? 
  怎样才能写出 Pythonic 的代码? 
  IT 圈里有哪些经常被读错的词? 
  计算机编程算是否是理科中比较偏文的科目? 
  你遇到过哪些高质量的 C++ 面试? 
  如何看待代码中的中文变量名? 
  如何看待微软不再给OEM提供32位的Windows? 
  自学编程的难度如何? 
  程序员必备的书籍有哪些? 
  计算机专业必读哪些经典书籍? 

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





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