虚拟地址、逻辑地址、线性地址、物理地址。是啥关系

谁学逆向工程 2014-02-28 03:27:35
刚学习这个层面的问题时是这么想的:假设源代码中第一个指令占1字节、第二个指令占3字节,第三个指令占1字节。那么编译后的EXE应为5字节,同时第一个指令的地址是0,第二个指令的地址是1,第三个指令的地址是4。我以为这里的0、1、4就是虚拟地址

后来学习王爽的8086汇编,知道了:物理地址 = 段地址 * 16 + 偏移地址。我对物理地址的理解是这样的:去电子市场买电脑,告诉他配个2G内存的电脑,这2G内存就是物理地址,同时也是物理地址上限。

后来又听说了逻辑地址和线性地址,我在想他俩是不是这样的:
假设:段地址:1000(十进制)。。。。。偏移地址:250(十进制)
逻辑地址是不是这样的:1000:【250】(假设运行在32位处理器)
线性地址是不是这样的:1000+250=1250(假设32未处理器)
然后用线性地址通过GDT和LDT查到物理地址
...全文
271 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
majia2011 2014-03-03
  • 打赏
  • 举报
回复
咱们别学8086了,除非你们考试要用,呵呵呵
Johnblx 2014-03-03
  • 打赏
  • 举报
回复
最近也在看这方面的文章, 我理解的是: 在链接阶段,连接器会将各个目标文件链接起来,链接的过程中就会知道代码段有多大,数据段有多大,BSS段有多大,连接器按找照链接脚本生成可执行文件或者库,这个文件内各个指令或代码都会有内存地址, 这个地址是虚拟地址,或相对地址。 当OS将该执行文件加载到内存执行时候,才会真正分配物理内存。 这个屋里内存地址是无法确定的,他是OS决定的。
引用 楼主 xiaoyuanyuan2009 的回复:
刚学习这个层面的问题时是这么想的:假设源代码中第一个指令占1字节、第二个指令占3字节,第三个指令占1字节。那么编译后的EXE应为5字节,同时第一个指令的地址是0,第二个指令的地址是1,第三个指令的地址是4。我以为这里的0、1、4就是虚拟地址 后来学习王爽的8086汇编,知道了:物理地址 = 段地址 * 16 + 偏移地址。我对物理地址的理解是这样的:去电子市场买电脑,告诉他配个2G内存的电脑,这2G内存就是物理地址,同时也是物理地址上限。 后来又听说了逻辑地址和线性地址,我在想他俩是不是这样的: 假设:段地址:1000(十进制)。。。。。偏移地址:250(十进制) 逻辑地址是不是这样的:1000:【250】(假设运行在32位处理器) 线性地址是不是这样的:1000+250=1250(假设32未处理器) 然后用线性地址通过GDT和LDT查到物理地址
引用 楼主 xiaoyuanyuan2009 的回复:
刚学习这个层面的问题时是这么想的:假设源代码中第一个指令占1字节、第二个指令占3字节,第三个指令占1字节。那么编译后的EXE应为5字节,同时第一个指令的地址是0,第二个指令的地址是1,第三个指令的地址是4。我以为这里的0、1、4就是虚拟地址 后来学习王爽的8086汇编,知道了:物理地址 = 段地址 * 16 + 偏移地址。我对物理地址的理解是这样的:去电子市场买电脑,告诉他配个2G内存的电脑,这2G内存就是物理地址,同时也是物理地址上限。 后来又听说了逻辑地址和线性地址,我在想他俩是不是这样的: 假设:段地址:1000(十进制)。。。。。偏移地址:250(十进制) 逻辑地址是不是这样的:1000:【250】(假设运行在32位处理器) 线性地址是不是这样的:1000+250=1250(假设32未处理器) 然后用线性地址通过GDT和LDT查到物理地址
JiMoKuangXiangQu 2014-03-03
  • 打赏
  • 举报
回复
可参考Intel芯片架构官方文档。 如《Intel 64 and IA-32 Architectures Software Developer's Manual》卷3第3章等其他相关章节。 个人建议,仅供参考。
Binzo 2014-03-03
  • 打赏
  • 举报
回复
如果你学过数字电路,就会很容易理解物理地址,就是访问(读或写)时的IO地址。 虚拟地址,应该就是虚拟内存地址,是操作系统的内存管理单元做的。便于给进程分配特定的内存和内存访问权限。
  • 打赏
  • 举报
回复
在物理地址的基础上又做了一层抽象,就是所谓的虚拟地址
熊熊大叔 2014-03-03
  • 打赏
  • 举报
回复
我的理解:逻辑地址 = 虚拟地址,是和物理地址相对而言的。 x86地址上地址可以有两种表示方式:段地址+偏移 和 线形地址。 逻辑地址可以有这两种表示方式。
谁学逆向工程 2014-03-03
  • 打赏
  • 举报
回复
引用 1 楼 neustar1 的回复:
虚拟地址和物理地址,楼主理解对了,逻辑地址是分段内存管理遗留的概念,至于线性地址,其实就是虚拟地址。
逻辑地址就是那种带冒号的吗
__cc__ 2014-02-28
  • 打赏
  • 举报
回复
参考http://bbs.chinaunix.net/thread-2083672-1-1.html 虚拟地址和物理地址,楼主理解对了,逻辑地址是分段内存管理遗留的概念,至于线性地址,其实就是虚拟地址。

64,681

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧