首页
社区
课程
招聘
[原创]字串处理,asm,支持简单的表达式
2008-10-12 18:10 6340

[原创]字串处理,asm,支持简单的表达式

2008-10-12 18:10
6340
哦,是fasm不是masm

i equ invoke

__atoi,lpStr
__strDel,lpSrc,lpX
__strFindX,lpStr,lpX
__strlen,lpSrc
__strInsert,lpSrc,lpStr,lpX
__strReplace,lpSrc,lpStr,lpX
__strGet,lpSrc,lpRet,lpX
Xsearch,lpStr,lpX

支持的简单的表达式
; \(123\|321\)
; \?{}
; \*
; \n
; \t
; \\
; \w{1}
; \d{1}


主要代码
proc Xsearch; lpStr,lpX
	pushad
	mov esi,[esp+4*9]
	mov edi,[esp+4*10]
	call @F
	mov eax,[esp+4*3]
	mov esp,[eax+0xC4]
	jmp Xsearch_Err
@@:
	xor eax,eax
	push [fs:eax]
	mov [fs:eax],esp

.Start:	
	or ecx,-1
@@:	inc ecx
	mov al,byte[edi+ecx]
	cmp al,0
	je @F
	cmp al,'\'
	jne @B
@@:	rep cmpsb
	jne Xsearch_Err
	or ecx,ecx
	jne Xsearch_Err
	cmp byte[edi],0
	je Xsearch_Suc
	
	inc edi
	mov al,byte[edi]
	cmp al,'n'
	je .n
	cmp al,'w'
	je .w
	cmp al,'?'
	je .?
	cmp al,'t'
	je .t
	cmp al,'d'
	je .d
	cmp al,'*'
	je .xx
	cmp al,'('
	je .c	;\(....\|...\)
	cmp al,'|'
	je Xsearch_Suc
	cmp al,')'
	je Xsearch_Suc
;.\\:
	inc edi
	lodsb
	cmp al,'\'
	jne Xsearch_Err
	jmp .Start
.xx:	;.*:
	inc edi
	dec esi
@@:	inc esi
	cmp byte[esi],0
	je Xsearch_Err
	i Xsearch,esi,edi
	jnc @B
	xchg eax,esi
	jmp Xsearch_Suc
.t:
	lodsb
	cmp al,9
	jne Xsearch_Err
	inc edi
	jmp .Start
.n:
	lodsw
	cmp ax,0x0A0D
	jne Xsearch_Err
	inc edi
	jmp .Start
.?:
	inc edi
	inc esi
	cmp byte[edi],'{'
	jne .Start
	i __atoi,addr edi+1
	dec eax
	add esi,eax
@@:	inc edi
	cmp byte[edi],'}'
	jne @B
	inc edi
	jmp .Start
.w:
	mov ecx,1
	inc edi
	cmp byte[edi],'{'
	jne .w_loop
	i __atoi,addr edi+1
	xchg eax,ecx
@@:	inc edi
	cmp byte[edi],'}'
	jne @B
	inc edi
.w_loop:
	lodsb
	or al,0x20
	cmp al,'a'
	jb Xsearch_Err
	cmp al,'z'
	ja Xsearch_Err
	loop .w_loop
	jmp .Start
.d:
	mov ecx,1
	inc edi
	cmp byte[edi],'{'
	jne .d_loop
	i __atoi,addr edi+1
	xchg eax,ecx
@@:	inc edi
	cmp byte[edi],'}'
	jne @B
	inc edi
.d_loop:
	lodsb
	cmp al,0
	jb Xsearch_Err
	cmp al,9
	ja Xsearch_Err
	loop .w_loop
	jmp .Start
.c:
	inc edi
	i Xsearch,esi,edi
	jc .c_end
@@:	inc edi
	cmp word[edi],'\)'
	je Xsearch_Err
	cmp word[edi],'\|'
	jne @B
	inc edi
	jmp .c
.c_end:
	xchg eax,esi
@@:	inc edi
	cmp word[edi],'\)'
	jne @B
	inc edi
	inc edi
	jmp .Start
	
;-------------------------------
Xsearch_Suc:
	mov dword[esp+4*9],esi
	sub esi,[esp+4*11]	
	mov dword[esp+4*8],esi
	stc
	jmp Xsearch_Ret
Xsearch_Err:
	clc
Xsearch_Ret:
	pop dword[fs:0]
	pop eax
	popad
	retn 4*2
endp


全部代码在附件中.

[培训]内核驱动高级班,冲击BAT一流互联网大厂工 作,每周日13:00-18:00直播授课

上传的附件:
收藏
点赞7
打赏
分享
最新回复 (4)
雪    币: 466
活跃值: (119)
能力值: ( LV9,RANK:190 )
在线值:
发帖
回帖
粉丝
kusky 4 2008-10-17 20:22
2
0
标记一下。万一以后用得上
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yusilong 2008-10-17 21:12
3
0
[QUOTE=洋洋洒洒;520402]哦,是fasm不是masm

支持的简单的表达式

主要代码
proc Xsearch; lpStr,lpX
        pushad
        mov esi,[esp+4*9]
        mov edi,[esp+4*10]
        call @F
        mov eax,[esp+4*3]
        mov esp,[eax+0xC...[/QUOTE]
占个沙发
菜鸟
现在看这个东西
漫天都是星星
雪    币: 207
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
athlor 2008-10-19 06:25
4
0
汗... 好长啊.
这段代码是干啥用的啊.看不明白....
雪    币: 249
活跃值: (10)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
洋洋洒洒 2008-10-19 10:18
5
0
处理字符串的,可以对字符串增加删除替换内容
代码不长啊..很短很简单
游客
登录 | 注册 方可回帖
返回