(1)strlen(char *s)
.386
.model flat, stdcall
include kernel32.inc
includelib kernel32.lib
include msvcrt.inc
includelib msvcrt.lib
.data
szText db "Reverse Engineering", 0
format db "length = %d", 0AH, 0
.code
main PROC
LEA EDI, szText
MOV ECX,0FFFFFFFFH
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
XOR AL, AL
MOV EBX, EDI
REPNE SCASB
INC EDI
SUB EDI, EBX
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INVOKE crt_printf, addr format, EDI
INVOKE crt_getchar
INVOKE ExitProcess, 0
main ENDP
END main
将eax置为0,用scasb,使得edi与eax的值比较,直到edi所指地址存的数据为’/0′,即为字符串结束时停止循环,此时与edi最初的位置(ebx)向减,再减去’/0’所占用的1,即为字符串长度,结果为19 。
(2)strchr(const *char s)
.386
.model flat, stdcall
include kernel32.inc
includelib kernel32.lib
include msvcrt.inc
includelib msvcrt.lib
.data
szText db "Reverse Engineering", 0
chr db 'i'
format db "%d", 0AH, 0
.code
main PROC
LEA EDI, szText
MOV ECX,0FFFFFFFFH
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV EBX,EDI
MOV EA

本文介绍了逆向工程中涉及的字符串处理函数strlen、strchr、strcmp和strset的汇编实现,并展示了如何在Windows环境下创建键盘钩子程序,通过HookDll.dll动态库在记事本中监听键盘输入。实验中,当检测到'q'键被释放时,钩子程序会停止监听并记录键盘输入。
最低0.47元/天 解锁文章
1万+





