能力值:
(RANK:570 )
2 楼
自己用汇编写
能力值:
( LV2,RANK:10 )
3 楼
我想做一个验证语句,想在edit文本框里输入12345如果与比较值12345相同就跳出。请问该怎么写汇编语句?
能力值:
( LV2,RANK:10 )
4 楼
是这样的,我想把一个edit文本值如12345与我预定的12345比较,如果相同就跳出来,请问怎么写这个汇编语句?
能力值:
( LV2,RANK:10 )
5 楼
想走捷径,又找不到API函数是哪个^_^
能力值:
( LV2,RANK:10 )
6 楼
想走捷径,又找不到API函数是哪个?
能力值:
(RANK:570 )
7 楼
用汇编实现超简单啊。。。5位数字也没必要用优化算法。。直接一个BYTE减另外一个BYTE就OK了。。不等于0就调试循环。。
能力值:
(RANK:410 )
8 楼
if(lstrcmp(str1,str2))
....
else
....
能力值:
( LV2,RANK:10 )
9 楼
谢谢,这个函数在kernel32.dll里面有,可是我想用lstrcmp读edit.text的值来与s123比较,比如lstrcmp('edit1.text','s123')=0 这样的语句括号里写'edit1.text'却不不是edit1.text的值,去掉''又不执行,。。。该怎么办?
能力值:
( LV2,RANK:10 )
10 楼
终于搞好了,括号里的写法改为:(pchar(edit1.text),'s123')就好了!
即 if lstrcmp(pchar(edit1.text),'s123')=0 then .....但不知这个 lstrcmp(pchar(edit1.text),'s123')=0 在汇编语句里怎么表述的?
能力值:
( LV2,RANK:10 )
11 楼
004414FC /. 55 PUSH EBP
004414FD |. 8BEC MOV EBP,ESP
004414FF |. 6A 00 PUSH 0
00441501 |. 53 PUSH EBX
00441502 |. 8BD8 MOV EBX,EAX
00441504 |. 33C0 XOR EAX,EAX
00441506 |. 55 PUSH EBP
00441507 |. 68 64154400 PUSH Project1.00441564
0044150C |. 64:FF30 PUSH DWORD PTR FS:[EAX]
0044150F |. 64:8920 MOV DWORD PTR FS:[EAX],ESP
00441512 |. 68 70154400 PUSH Project1.00441570 ; ASCII "s123"
00441517 |. 8D55 FC LEA EDX,DWORD PTR SS:[EBP-4]
0044151A |. 8B83 D0020000 MOV EAX,DWORD PTR DS:[EBX+2D0]
00441520 |. E8 170DFEFF CALL Project1.0042223C
00441525 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
00441528 |. E8 DF27FCFF CALL Project1.00403D0C
0044152D |. 50 PUSH EAX ; |String1
0044152E |. E8 C94BFCFF CALL <JMP.&kernel32.lstrcmpA> ; \lstrcmpA
00441533 |. 85C0 TEST EAX,EAX
00441535 |. 75 07 JNZ SHORT Project1.0044153E
00441537 |. 8BC3 MOV EAX,EBX
00441539 |. E8 2AB6FFFF CALL Project1.0043CB68
0044153E |> BA 80154400 MOV EDX,Project1.00441580 ;ASCII "error"
00441543 |. 8B83 D8020000 MOV EAX,DWORD PTR DS:[EBX+2D8]
00441549 |. E8 1E0DFEFF CALL Project1.0042226C
0044154E |. 33C0 XOR EAX,EAX
00441550 |. 5A POP EDX
00441551 |. 59 POP ECX
00441552 |. 59 POP ECX
00441553 |. 64:8910 MOV DWORD PTR FS:[EAX],EDX
00441556 |. 68 6B154400 PUSH Project1.0044156B
0044155B |> 8D45 FC LEA EAX,DWORD PTR SS:[EBP-4]
0044155E |. E8 6523FCFF CALL Project1.004038C8
00441563 \. C3 RETN
能力值:
( LV2,RANK:10 )
12 楼
00403D0C /$ 85C0 TEST EAX,EAX
00403D0E |. 74 02 JE SHORT Project1.00403D12
00403D10 |. C3 RETN
00403D11 | 00 DB 00
00403D12 |> B8 113D4000 MOV EAX,Project1.00403D11
00403D17 \. C3 RETN
能力值:
( LV2,RANK:10 )
13 楼
用了这个lstrcmp函数,汇编语句少多了^_^
再次谢谢『Win32/Win64编程』版主帮我找到了可用的API函数^_^
能力值:
(RANK:570 )
14 楼
VC真麻烦,搞这么多函数,搞这么多规则。。。
用汇编写,早写好了。。。
参考新兵训练场第一期第一题那个NATIVE API的反汇编代码。。。
程序小了,是以运行效率为代价的。。。而且有时编译器也未必会用API。。
能力值:
( LV12,RANK:770 )
15 楼
int __cdecl memcmp(const void *, const void *, size_t);
int __cdecl strcmp(const char *, const char *);
能力值:
( LV2,RANK:10 )
16 楼
最初由 笨笨雄 发布 VC真麻烦,搞这么多函数,搞这么多规则。。。 用汇编写,早写好了。。。 参考新兵训练场第一期第一题那个NATIVE API的反汇编代码。。。 ........
楼主那个是delphi的
能力值:
( LV2,RANK:10 )
17 楼
还有更好的吗?
目标为:找到edit1.text框里面的字符值,去与预定的字符如s123比较,
如果相同就转出到retn,如果不同就显示“error”
如果有很精练的反汇编语句,请贴出来用用^_^
能力值:
( LV9,RANK:170 )
18 楼
我本人是不太习惯用汇编写程序了,主要是效率不高。不过我可以给你一点小建议。
对于不太熟悉又比较复杂的过程。你可以先用自己熟悉的语言写出来,然后再用OD或W32DASM反汇编察看他的ASM的写法
能力值:
( LV5,RANK:70 )
19 楼
TCHAR szBuff[21];
GetDlgItemText(WinhWnd,IDC_EDIT1,szBuff,20);
if (lstrcmp(szBuff,TEXT("12456"))==0)//same
{
//okay,do things you want
}
else//diff
{
//error,do things you want
}
自己写的汇编码,未必一定快过API,API的函数在调用之前,已在内存,和调用自己的函数速度是一样的
如果程序高度追求快速,且对文件大小非常敏感,当然首选汇编,否则,用高级语言吧,便于以后维护(对自己阅读方便,对接班人门槛比较低),便于迁移到64位平台,....