难以理解不同类型的调用语句

时间:2011-06-24 17:42:47

标签: assembly reverse-engineering

考虑到以下类型的CALL语句,我无法清楚地理解这种差异。

CALL EAX

CALL DWORD PTR[EAX]

3 个答案:

答案 0 :(得分:7)

CALL EAX

将调用eax中的任何地址。如果eax直接存储函数地址,这是正确的方法。

CALL DWORD PTR[EAX]

首先取消引用eax中的任何地址并跳转到该结果。如果eax存储函数指针,这是正确的方法。

答案 1 :(得分:6)

第一个表单调用其地址存储在eax中的函数。

第二个调用函数,其地址存储在内存位置,其地址依次存储在eax中(这只是一个间接级别)。

答案 2 :(得分:4)

CALL EAX

将获取EAX的值并跳转到该值。

CALL DWORD PTR [EAX]

将获取EAX的值,然后取消引用它(在内存中查找)然后调用它。

所以用C表示..

function_ptr=eax;
//v.s.
function_ptr=*eax;

(eax)();
//v.s.
(*eax)();
相关问题