与 MOVZX 混淆

逆向工程 部件 德尔福
2021-06-29 11:52:59

我正在尝试对应用程序进行逆向工程。我无法理解一些说明:

EBP-4h=>Self
EBP-8h=>OptionData
...
mov     eax, [ebp+var_4]
movzx   eax, byte ptr [eax+1Ch]      // (1)
mov     edx, [ebp+var_8]
mov     [edx+8], eax
mov     eax, [ebp+var_4]
movzx   eax, byte ptr [eax+1Dh]     // (2)
mov     edx, [ebp+var_8]
mov     [edx+0Ch], eax
mov     eax, [ebp+var_8]
mov     dword ptr [eax+10h], 1F41h  // (3)
...

基于逆向应用的其他部分,我认为edx+8、edx+0C、edx+10都是整数;eax+1C 是“scP8B”,eax+1D 是“ocDynamicMR2”。

我不明白说明(1)和(2)。

1个回答

eax + 0x1c是一个指向字节的指针,并且该地址eax处的字节值被放入寄存器,其中字节值是“零扩展”(因此是 mov zx),因此例如一个字节0xdf将成为一个双字0x000000df,所以不签名- 扩展。所以在 C: 中eax = (unsigned int) b[0x1c]unsigned char *b指针存储在哪里var_4,比如说。