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




  

相关话题

  为什么 ARM 和 MIPS 那么多寄存器,x86 那么少? 
  PS4pro所谓棋盘渲染到底是什么概念? 
  有没有能向玩家保证服务器发牌时没有作弊的牌类游戏发牌算法? 
  计算机视觉顶级会议论文中比较适合初学计算机视觉的人做的复现实验有哪些? 
  递归和循环相比耗费更多的空间,对于循环来说除了可以简化逻辑外还有什么优点吗? 
  感觉算法在程序员中快被吹上天了,如果只是搞编程的话,是不是没必要死磕算法? 
  为什么数学专业要学计算机? 
  一名大二的计算机专业的学生,目前学了很多编程语言,但都学得很浅。是不是应该专攻一门感兴趣的语言? 
  为什么计算机科学没有系统的学派? 
  做一个优秀的程序员到底难在哪里? 

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





© 2025-01-29 - tinynew.org. All Rights Reserved.
© 2025-01-29 - tinynew.org. 保留所有权利