我刚开始学习从汇编指令中重构 C 代码。
我有以下汇编代码:
mov eax dword ptr [ebp+8]
add eax, dword ptr[ebp-4]
movsx ecx, byte ptr [eax]
test ecx, ecx
jne XXXXX
comp dword ptr [ebp-4], ffh
jle XXXX
我想重建这些线路的条件,但我有一些问题或不确定的事情:我重新构建了以下内容:
让,ebp+8= param1和ebp-4 = i
if(param1[i]!=’\0’ || i<=0xff){
…
}
但我想知道这一行:
movsx ecx, byte ptr [eax]
据我了解,movsx它将一个带符号的值移动到一个寄存器中并用 1 对其进行符号扩展。因此,ecxshouble 看起来像0xFFFFFF<eax>. 因为只有byte ptr eaxeax的低字节 ( ) 被移动并且 ecx 被扩展了 1。我哪里错了?