对.rodata段中的地址进行CALL操作有什么作用?

时间:2015-05-09 12:17:27

标签: assembly nasm

我这里有一些汇编程序代码(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字符。

但这条指令的效果是什么?或者我弄错了?

1 个答案:

答案 0 :(得分:2)

这是间接电话。

call 0x6001000中,要调用的地址是立即值。

call eax中,要调用的地址位于eax

call dword ptr[eax*4+0x6001000]中,要呼叫的地址位于[eax*4+0x6001000]。你在.rodata中看到的角色可能就是一个地址。