将德尔福风格的ASM翻译成英文?
发布时间:2020-12-15 04:13:38 所属栏目:大数据 来源:网络整理
导读:我继承的最近的Delphi项目在ASM中有一个过程.我是一个完整的ASM新手,所以我不明白.我已经阅读了各种ASM指令,试图解读程序流程,但我仍然没有得到它. 有ASM经验的人可以帮助我理解并将以下程序翻译成英语(然后我可以翻译成Delphi,以便将来更容易阅读代码!!!) M
我继承的最近的Delphi项目在ASM中有一个过程.我是一个完整的ASM新手,所以我不明白.我已经阅读了各种ASM指令,试图解读程序流程,但我仍然没有得到它.
有ASM经验的人可以帮助我理解并将以下程序翻译成英语(然后我可以翻译成Delphi,以便将来更容易阅读代码!!!) Mem1的声明是字节[0..15]的字节;. Mem2是一个LongInt. 这是程序: procedure TForm1.XorMem(var Mem1; const Mem2; Count : Cardinal); register; begin asm push esi push edi mov esi,eax //esi = Mem1 mov edi,edx //edi = Mem2 push ecx //save byte count shr ecx,2 //convert to dwords jz @Continue cld @Loop1: //xor dwords at a time mov eax,[edi] xor [esi],eax add esi,4 add edi,4 dec ecx jnz @Loop1 @Continue: //handle remaining bytes (3 or less) pop ecx and ecx,3 jz @Done @Loop2: //xor remaining bytes mov al,al inc esi inc edi dec ecx jnz @Loop2 @Done: pop edi pop esi end; end; 编辑:感谢Roman R我已将ASM转换回Delphi procedure TForm1.XorMem2(var Mem1; const Mem2 :LongInt; Count : Cardinal); var Key : array [0..3] of byte absolute Mem1; Num : array [0..3] of byte absolute Mem2; idx : byte; begin for Idx := 0 to Count -1 do Key[idx] := Key[idx] Xor Num[idx]; end; 解决方法
该函数接受两个指针(对于任何数组)及其长度(以字节为单位).该函数使用第二个数组字节(Mem2)对第一个数组字节(Mem1)执行字节到字节的XOR运算.伪代码:
for Index = 0 to Count - 1 (Mem1 as Byte Array) [Index] = (Mem1 as Byte Array) [Index] Xor (Mem2 as Byte Array) [Index] (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |