2015-05-09 16 views
1

我在這裏有一些彙編代碼(32位,Linux,NASM),在這裏我假設有一個調用到.rodata段的一部分的地址。我無法找到關於這個確實做了什麼的信息,或者我可能只是解釋了錯誤的代碼。對.rodata段中某個地址的CALL有什麼作用?

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字符。

但是這條指令的效果是什麼?還是我錯了?

回答

2

這是一個間接調用。

call 0x6001000中,要呼叫的地址是立即值。

call eax中,要撥打的電話號碼是eax

call dword ptr[eax*4+0x6001000],要撥打的地址是[eax*4+0x6001000]。你在.rodata中看到的角色可能是一個地址。

相關問題