对于 asm 模拟器,我正在尝试编写将 ASM 代码转换为可以正常工作的等效工作代码。最好的代码是可以在一行或最多两到三行中完成的代码,不要关心速度。
据我了解。如果在 C++ 中完成,MOVZX 将与 MOV.. 相同。
MOV
转换。
MOV ESI,DWORD PTR [ESP+8]
就像
regs.d.esi = *(unsigned int *)(regs.d.esp+0x00000008);
MOVZX
转换。
MOVZX EAX,BYTE PTR DS:[EDI]
就像
regs.d.eax = *(unsigned char *)(regs.d.edi);
几乎相同的事情没有改变。
现在MOVSX
我无法转换为简单的 C 代码.. 似乎与上述两个相同.. 除了它尝试在移动的值前面附加尽可能多的完全设置位.. 像
000000C7
变成FFFFFFC7