0

我正在尝试比较两段代码的程序集,它们如下所示。我的问题是添加[esp+4] [esp+8] [esp+0Ch]是在运行时执行的,还是在此之前以某种方式解决的。

版本 1

00FE104D  mov         eax,dword ptr [esp+4]  
00FE1051  imul        eax,dword ptr [esp+8]  
00FE1056  mov         esi,dword ptr [esp+0Ch]  

版本 2

00FE104D  mov         eax,dword ptr [x]  
00FE1051  imul        eax,dword ptr [y]  
00FE1056  mov         esi,dword ptr [z]  
4

1 回答 1

0

它当然是在运行时执行的。之前“解决”它是没有意义的。

mov eax,dword ptr [x]

意思是:把所指DWORD的东西x放进去eax。在 C 中它会是这样的:

   DWORD x;
   ...
   eax = *((DWORD*)x);

   mov eax,dword ptr [x + 4]

在C中会是这样的

   DWORD x;
   ...
   eax = *((DWORD*)(x + 4));
于 2019-02-21T11:29:20.210 回答