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

Assembly 在NDISSM输出中,内存引用作为指令参数的含义是什么?,assembly,nasm,Assembly,Nasm,我正在用NDISAM反汇编程序。我的问题是,在调用指令和跳转之后,内存引用意味着什么 它们是相对于指令的还是从程序开始计算的?它们指的是NDISAM输出文本第一列中的地址吗?它指的是输出第一列中给出的地址,通常也是指令相对于文件开头的位置。程序不知道代码将加载到内存中的什么位置,因此通常无法告诉您目标在内存中的实际位置 请注意,这仅适用于近直接跳转和调用指令(包括条件Jcc跳转指令)的目标地址,因为这些地址是相对于指令编码的。其他指令中的地址不使用相对编码,因此显示的地址不引用第一列中的地址。相

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


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

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

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

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


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

它们指的是第1列中的相对跳转。对于绝对值,将显示指令中编码的实际地址。感谢您的帮助!