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




  

相关话题

  可以用ACM/ICPC竞赛成绩来判定一个高校的计算机专业水准吗? 
  C# 这么优秀的语言,现在到底出了什么问题? 
  一条C语言语句不一定是原子操作,但是一个汇编指令是原子操作吗? 
  为什么自学Python看不进去? 
  为什么会有码农控? 
  一千块能做什么提升? 
  如何评价知乎用户灵剑? 
  智能手机的流行,是否会造成年轻人不会用电脑只会用手机的现象? 
  如何减少代码中的if else或者找到代替的方式? 
  为什么感觉国外的程序员更专业? 

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





© 2024-05-17 - tinynew.org. All Rights Reserved.
© 2024-05-17 - tinynew.org. 保留所有权利