我这里有一些汇编程序代码(32位,Linux,NASM),在其中,我假设有一个地址调用,它是.rodata段的一部分。我无法找到有关此内容的信息,或者我只是将代码解释错误。
60000f7: mov edx, 0x2
60000fc: mov eax, 0x2
;[...] EAX and EDX are not changed
6000140: lea eax, [edx+eax*8]
6000143: call DWORD PTR [eax*4+0x6001000]
据我了解代码:它将EAX寄存器设置为地址2 + 2*8 = 18
,然后调用地址18*4 + 0x6001000 = 0x6001048
,该地址位于.rodata段中并指向单个ASCII字符。
但这条指令的效果是什么?或者我弄错了?
答案 0 :(得分:2)
这是间接电话。
在call 0x6001000
中,要调用的地址是立即值。
在call eax
中,要调用的地址位于eax
。
在call dword ptr[eax*4+0x6001000]
中,要呼叫的地址位于[eax*4+0x6001000]
。你在.rodata中看到的角色可能就是一个地址。