【发布时间】:2010-06-14 14:49:03
【问题描述】:
为什么每次我反汇编同一个 .exe 文件时,相同的指令在同一个地址?那是什么地址(RAM?HDD?虚拟?)?
【问题讨论】:
标签: assembly disassembly virtual-address-space
为什么每次我反汇编同一个 .exe 文件时,相同的指令在同一个地址?那是什么地址(RAM?HDD?虚拟?)?
【问题讨论】:
标签: assembly disassembly virtual-address-space
基本思想是,为了允许程序的可移植性并允许不同的程序在同一系统上运行而不会发生冲突,您所看到的基本上相当于操作系统在程序运行时将其转换为实际地址的相对地址。
您完全需要地址的原因是指令引用了其他指令的地址,例如跳转。
【讨论】:
没有理由。这就是那个操作系统上的可执行/链接格式决定如何工作的。每种架构都是不同的,例如,即使在 x86 和 x64 上,可执行文件也可以加载到随机的虚拟地址,或者每次都加载到同一个地址。反汇编器将给出文件中的偏移量或虚拟地址,它只是在运行时确定的基地址 + 文件偏移量,可能还有节偏移量。这是高度架构依赖,所以我真的不能给出一个具体的答案......
【讨论】: