delphi内联汇编调试不过,请高手指点(100分)

  • 主题发起人 主题发起人 冬月
  • 开始时间 开始时间

冬月

Unregistered / Unconfirmed
GUEST, unregistred user!
两个参数放入汇编代码,得到一个返回值,显示出来,请汇编高手调试下,
var
edx1,eax1:string;
begin
edx1:='kongyang';
eax1:='888888888888';
asm
push ebp
mov ebp, [esp+$0C] { 将用户名地址放入EBP,也就是EDX的地址}
push esi
push edi
mov edi, [esp+$018]
mov ecx, 3 { ECX置3}
xor esi, esi { ESI清零}
xor eax, eax { EAX清零}
cmp edi, ecx
jle @TraceMe_00401379
push ebx

@TraceMe_00401359:

cmp eax, 7 { 比较EAX是否小于7,循环}
jle @TraceMe_00401360
xor eax, eax { EAX大于7将EAX清零}

@TraceMe_00401360:

xor edx, edx { EAX于7将用EDX清零}
xor ebx, ebx { EBX清零}
mov dl, [ecx+ebp]
mov bl, [eax+$0405030]
imul edx, ebx
add esi, edx
inc ecx
inc eax
cmp ecx, edi
jl @TraceMe_00401359
pop ebx

@TraceMe_00401379:

push esi
push $0405078 { ASCII "%ld"}
push ebp
//call [<&USER32.wsprintfA>] { USER32.wsprintfA}
mov eax, [esp+$01C]
add esp, $0C
push ebp
push eax
//call [<&KERNEL32.lstrcmpA>] { kernel32.lstrcmpA}
neg eax
sbb eax, eax
pop edi
pop esi
inc eax
pop ebp
retn {<= Procedure End}
end;
 
都不知道你想做什么
 
edx1:='kongyang';
eax1:='888888888888'
是两个输入参数,通过这段内联汇编(其实是一段很简单的加密算法)得到一个返回直,现在就是这段内联汇编调试不过,
 
手工调用你注释的地方的API吧
 
你这段汇编码是哪里抄来的?难不成是DEDE反过来的?
看不明白.
比如
push $0405078 { ASCII "%ld"}
你怎么知道编译后的这个地址是 %ld??
 
同意 fanboynet.
这个地址不知道放的什么东西.类似 mov bl, [eax+$0405030] 硬编码.
 
为什么我就编译过去了???
我用的D7
 

Similar threads

I
回复
0
查看
752
import
I
I
回复
0
查看
816
import
I
I
回复
0
查看
548
import
I
I
回复
0
查看
729
import
I
I
回复
0
查看
659
import
I
后退
顶部