首页
社区
课程
招聘
[求助]判断是否是数字,编译不过丫,大家帮我看看
发表于: 2009-1-15 17:57 4028

[求助]判断是否是数字,编译不过丫,大家帮我看看

2009-1-15 17:57
4028
.386
.model flat, stdcall
option casemap :none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include     windows.inc
include     user32.inc
includelib   user32.lib
include     kernel32.inc
includelib   kernel32.lib
;include     masm32.inc
includelib   masm32.lib

isnumber PROTO :BYTE
.data
szDll db "1345678976543fgggg",0
szError db "账号必须是数字!",0
.code
start:
      lea eax,szDll
        invoke isnumber,BYTE ptr[eax]
      .if eax == FALSE
            invoke MessageBox,0,addr szError,0,MB_ICONSTOP
        .endif
        invoke ExitProcess,0
  end start

isnumber这个函数应该是masm32.lib里的才对

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 249
活跃值: (10)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
Proc IsNum    ;arg=esi
lodsb
cmp al,'0'
jb .retFalse
cmp al,'9'
ja .retFalse
xor eax,eax
inc eax
retn
.retFalse:
xor eax,eax
retn

endp
2009-1-15 18:05
0
雪    币: 454
活跃值: (1673)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3
可以编译过啊,不过isnumber只检查一个字节而已,貌似没多大用……
2009-1-15 19:56
0
雪    币: 796
活跃值: (370)
能力值: ( LV9,RANK:380 )
在线值:
发帖
回帖
粉丝
4
写出来了,龌龊代码共享一下:

.386
.model flat, stdcall
option casemap :none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include     windows.inc
include     user32.inc
includelib   user32.lib
include     kernel32.inc
includelib   kernel32.lib

.data
szDll db "13465789876543",0
szError db "账号必须是数字!",0
szOK    db "数字",0
.code
BufferIsnumber Proc _lpmun  ;arg=esi
local @hSizeNumber,@hCout
local szNumber[50]:byte
local szNumberBuffer[50]:byte

                invoke lstrlen,_lpmun
                mov @hSizeNumber,eax
                invoke RtlMoveMemory,addr szNumberBuffer,_lpmun,@hSizeNumber
_GoStart:               
                invoke lstrlen,addr szNumberBuffer ;如果已经没有字符了,说明已经检查完毕,并且都是数字,就返回
                .if eax == NULL
                        mov eax,1
                        ret
                .endif       
                mov @hCout,0
                inc @hCout
                invoke RtlZeroMemory,addr szNumber,sizeof szNumber
                invoke RtlMoveMemory,addr szNumber,addr szNumberBuffer,1   ;每次都只复制前面第一位来判断
                ;invoke MessageBox,0,addr szNumber,0,0
                lea esi,szNumber
                lodsb
                cmp al,'0'
                jb retFalse
                cmp al,'9'
                ja retFalse       
                invoke RtlZeroMemory,addr szNumber,sizeof szNumber
                invoke RtlMoveMemory,addr szNumber,addr szNumberBuffer,sizeof szNumberBuffer
                invoke RtlZeroMemory,addr szNumberBuffer,sizeof szNumberBuffer
                lea eax,szNumber
                add eax,@hCout ;减去前面1个数字,因为前面一个字符,已经判断是数字了
                invoke lstrcpy,addr szNumberBuffer,eax
                jmp _GoStart
                ret
retFalse:
                xor eax,eax
ret
BufferIsnumber endp

start:
      ;lea eax,szDll
                invoke BufferIsnumber,addr szDll
      .if eax == NULL
                        invoke MessageBox,0,addr szError,0,MB_ICONSTOP
                .elseif
                        invoke MessageBox,0,addr szOK,0,MB_ICONINFORMATION
                .endif       
                invoke ExitProcess,0
  end start
2009-1-15 23:17
0
雪    币: 249
活跃值: (10)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
5
Proc IsNum    ;arg=esi
.loop:
lodsb
cmp al,'0'
jb .retFalse
cmp al,'9'
ja .retFalse
cmp al,0
jne .loop
xor eax,eax
inc eax
retn
.retFalse:
xor eax,eax
retn

endp
2009-1-16 03:02
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
6
应该这样用才对吧
movzx eax,byte ptr [eax]
invoke isnumber,eax

PS:你的BufferIsnumber函数太烦琐了,用楼上的代码比较简单快速。
2009-1-16 10:13
0
雪    币: 796
活跃值: (370)
能力值: ( LV9,RANK:380 )
在线值:
发帖
回帖
粉丝
7
多谢各位大虾提出批评
2009-1-17 11:05
0
游客
登录 | 注册 方可回帖
返回
//