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

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

2008-10-12 18:10
6943

哦,是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+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
i equ invoke

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 7
支持
分享
最新回复 (4)
雪    币: 466
活跃值: (175)
能力值: ( LV9,RANK:190 )
在线值:
发帖
回帖
粉丝
2
标记一下。万一以后用得上
2008-10-17 20:22
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
[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]
占个沙发
菜鸟
现在看这个东西
漫天都是星星
2008-10-17 21:12
0
雪    币: 207
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
汗... 好长啊.
这段代码是干啥用的啊.看不明白....
2008-10-19 06:25
0
雪    币: 249
活跃值: (10)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
5
处理字符串的,可以对字符串增加删除替换内容
代码不长啊..很短很简单
2008-10-19 10:18
0
游客
登录 | 注册 方可回帖
返回
//