内存引用作为NDISASM输出中的指令参数的含义是什么



我正在用ndisasm反汇编程序。我的问题是,在调用指令和跳转之后,内存引用是什么意思?

它们是相对于指令的,还是从程序开始就计数的?它们是指ndisasm输出文本的第一列中的地址吗?

它指的是输出第一列给出的地址,通常也是指令相对于文件开头的位置。该程序不知道代码将被加载到内存中的何处,因此通常无法告诉您目标实际在内存中的位置

注意,这仅适用于近直接跳转和调用指令(包括条件Jcc跳转指令)的目的地地址,因为这些地址是相对于指令编码的。其他指令中的地址不使用相对编码,因此显示的地址不引用第一列中的地址。相反,它是运行时使用的实际地址,假设程序加载到内存时没有重新定位到其他地方。

(64位RIP相对寻址是上述情况的例外,使用此寻址模式的指令使用相对地址编码。)

由于显示地址的实际含义存在这些差异,ndisasm通常只擅长于反汇编平面二进制文件,如引导程序和MS-DOS.COM文件。在这种情况下,您可以告诉它程序将在内存中加载的位置(使用-o选项),以便显示的地址是一致的,并反映程序在内存中的加载位置。

最新更新