读书人

懂汇编的帮忙看下解决办法

发布时间: 2013-04-20 19:43:01 作者: rapoo

懂汇编的帮忙看下
这个函数传了两个参数 1:地址 2:字符串 返回是异或后的字符串 我不懂汇编 麻烦帮忙看下这段delphi的代码应该怎么写 谢谢!


00A13B30 /$ 51 push ecx
00A13B31 |. 8B5424 08 mov edx, dword ptr [esp+8]
00A13B35 |. 55 push ebp
00A13B36 |. 57 push edi
00A13B37 |. 8BFA mov edi, edx
00A13B39 |. 83C9 FF or ecx, FFFFFFFF
00A13B3C |. 33C0 xor eax, eax
00A13B3E |. F2:AE repne scas byte ptr es:[edi]
00A13B40 |. F7D1 not ecx
00A13B42 |. 49 dec ecx
00A13B43 |. 8BE9 mov ebp, ecx
00A13B45 |. 85ED test ebp, ebp
00A13B47 |. 0F8E 83000000 jle 00A13BD0
00A13B4D |. 53 push ebx
00A13B4E |. 56 push esi
00A13B4F |. 8B7424 1C mov esi, dword ptr [esp+1C]
00A13B53 |. 8BFA mov edi, edx
00A13B55 |. 2BFE sub edi, esi
00A13B57 |> 8A0437 /mov al, byte ptr [edi+esi]


00A13B5A |. 884424 18 |mov byte ptr [esp+18], al
00A13B5E |. C0E8 04 |shr al, 4
00A13B61 |. 8AD8 |mov bl, al
00A13B63 |. 8B4424 18 |mov eax, dword ptr [esp+18]
00A13B67 |. 25 FF000000 |and eax, 0FF
00A13B6C |. 25 0F000080 |and eax, 8000000F
00A13B71 |. 79 05 |jns short 00A13B78
00A13B73 |. 48 |dec eax
00A13B74 |. 83C8 F0 |or eax, FFFFFFF0
00A13B77 |. 40 |inc eax
00A13B78 |> 884424 10 |mov byte ptr [esp+10], al
00A13B7C |. 8B5424 10 |mov edx, dword ptr [esp+10]
00A13B80 |. 81E2 FF000000 |and edx, 0FF
00A13B86 |. 81E2 03000080 |and edx, 80000003
00A13B8C |. 79 05 |jns short 00A13B93
00A13B8E |. 4A |dec edx
00A13B8F |. 83CA FC |or edx, FFFFFFFC
00A13B92 |. 42 |inc edx
00A13B93 |> C0E8 02 |shr al, 2
00A13B96 |. C0E0 02 |shl al, 2


00A13B99 |. 2AC2 |sub al, dl
00A13B9B |. 04 03 |add al, 3
00A13B9D |. 80FB 04 |cmp bl, 4
00A13BA0 |. 74 11 |je short 00A13BB3
00A13BA2 |. 80FB 05 |cmp bl, 5
00A13BA5 |. 74 0C |je short 00A13BB3
00A13BA7 |. 80FB 08 |cmp bl, 8
00A13BAA |. 74 07 |je short 00A13BB3
00A13BAC |. 80FB 09 |cmp bl, 9
00A13BAF |. B2 11 |mov dl, 11
00A13BB1 |. 75 02 |jnz short 00A13BB5
00A13BB3 |> B2 0D |mov dl, 0D
00A13BB5 |> 2AD3 |sub dl, bl
00A13BB7 |. C0E2 04 |shl dl, 4
00A13BBA |. 02D0 |add dl, al
00A13BBC |. 8816 |mov byte ptr [esi], dl
00A13BBE |. 46 |inc esi
00A13BBF |. 49 |dec ecx
00A13BC0 |.^ 75 95 \jnz short 00A13B57
00A13BC2 |. 8B4424 1C mov eax, dword ptr [esp+1C]


00A13BC6 |. 5E pop esi
00A13BC7 |. 5B pop ebx
00A13BC8 |. 5F pop edi
00A13BC9 |. C60428 00 mov byte ptr [eax+ebp], 0
00A13BCD |. 5D pop ebp
00A13BCE |. 59 pop ecx
00A13BCF |. C3 retn
00A13BD0 |> 8B4C24 14 mov ecx, dword ptr [esp+14]
00A13BD4 |. 5F pop edi
00A13BD5 |. C60429 00 mov byte ptr [ecx+ebp], 0
00A13BD9 |. 5D pop ebp
00A13BDA |. 59 pop ecx
00A13BDB \. C3 retn


[解决办法]
直接用这个代码放到BASM中编译即可

00A13B92
[解决办法]
. 42
[解决办法]
inc edx
直接删除前面字符只保留语句inc edx,其他相似
00A13B93
[解决办法]
> C0E8 02
[解决办法]
shr al, 2
如果带有>的表示该行是跳转目的地
需要改成
@@00A13B93 : shr al, 2
所有这样的
00A13BB1
[解决办法]
. 75 02


[解决办法]
jnz short 00A13BB5
改成
jnz @@00A13BB5
就行了

读书人网 >.NET

热点推荐