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

时间:2016-04-18 16:21:08

标签: assembly nasm

我用ndisasm拆解程序。我的问题是在调用指令和跳转后,内存引用是什么意思?

它们是否与指令相关或从程序开始算起?它们是指ndisasm输出文本第一列中的地址吗?

1 个答案:

答案 0 :(得分:0)

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

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

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

由于显示的地址实际意味着什么不同ndisasm通常只擅长拆解平板二进制文件,如引导加载程序和MS-DOS .COM文件。在这些情况下,您可以告诉它程序将在内存中加载的位置(使用-o选项),这样显示的地址是一致的,并反映程序在内存中的加载位置。

相关问题