调用 .rodata 段中的地址有什么作用?

What does a CALL to an address in the .rodata segment do?

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

但是这条指令的作用是什么?还是我听错了?

这是间接调用。

call 0x6001000中,调用的地址是立即数

call eax中,要调用的地址在eax中。

call dword ptr[eax*4+0x6001000]中,要调用的地址在[eax*4+0x6001000]中。您在 .rodata 中看到的字符可能是一个地址。