调用 .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 中看到的字符可能是一个地址。
我这里有一些汇编代码(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 中看到的字符可能是一个地址。