SSp*_*oke 6 c x86 assembly transformation code-translation
对于asm模拟器,我正在尝试编写将ASM代码转换为等效的工作代码正常工作..最好的代码可以是一行或两三最多,不关心速度.
从我的理解.如果用C++完成MOVZX将与MOV相同.
MOV 转换.
MOV ESI,DWORD PTR [ESP+8]
Run Code Online (Sandbox Code Playgroud)
会是这样的
regs.d.esi = *(unsigned int *)(regs.d.esp+0x00000008);
Run Code Online (Sandbox Code Playgroud)
MOVZX 转换.
MOVZX EAX,BYTE PTR DS:[EDI]
Run Code Online (Sandbox Code Playgroud)
会是这样的
regs.d.eax = *(unsigned char *)(regs.d.edi);
Run Code Online (Sandbox Code Playgroud)
几乎一样的事情都没有改变.
现在MOVSX我无法转换为简单的C代码..似乎与上面的两个相同..除了它试图在尽可能多的移动前添加尽可能多的完全设置位...
000000C7 变 FFFFFFC7
movsx是带符号扩展移动。这些设置位是原始值中符号位的副本,如果原始值不是负数,则很清楚。它就像您的其他转换一样工作,除了您需要使用有符号类型而不是无符号类型。
regs.d.eax = *(signed char *)(regs.d.edi); // movsx eax, byte ptr ds:[edi]
Run Code Online (Sandbox Code Playgroud)