1. 程式人生 > 實用技巧 >讓你輕鬆掌握 Python 中的 Hook 鉤子函式

讓你輕鬆掌握 Python 中的 Hook 鉤子函式

實驗結論

  • 實驗任務1

程式設計:在螢幕中間分別顯示綠色、綠底紅色、白底藍色的字串'welcome to masm!'。

 1 assume cs:code,ds:data
 2 data segment
 3 
 4     db 'welcome to masm!'   ;ds:[si]
 5     
 6     db 00000010B            ;0000 0000 ds:[bx]
 7     db 00100100B            ; rgb rgb
 8     db 01110001B  
 9 data ends;
10 
11 stack segment stack
12     db 128 dup(0
) 13 stack ends 14 15 code segment 16 start: mov ax,stack 17 mov ss,ax 18 mov sp,128 19 20 mov bx,data 21 mov ds,bx 22 23 mov bx,0B800H 24 mov es,bx 25 26 mov si,0 ;結合push si和pop si實現反覆從開始地址讀取資料
27 mov di,160*11+32*2 ;從12行開始,中間顯示 28 mov bx,16 29 mov dx,0 30 31 mov cx,3 ;迴圈3次,輸出三行 32 33 m: push bx 34 push cx 35 push si 36 push di 37 38 mov cx,16 39 mov dh,ds:[bx] ;用dh存放顏色屬性
40 41 s: mov dl,ds:[si] ;dl存放資料 42 mov es:[di],dx 43 add di,2 44 inc si 45 loop s 46 47 pop di 48 pop si 49 pop cx 50 pop bx 51 add di,160 ;實現換行 52 inc bx ;bx改變一個位元組 53 loop m 54 55 mov ax,4c00h 56 int 21h 57 58 code ends 59 end start

輸出結果:

  • 實驗任務2

編寫子程式 printStr,實現以指定顏色在螢幕上輸出字串、呼叫它完成字串輸出。

 1 assume cs:code, ds:data
 2 data segment
 3     str db 'try', 0
 4 data ends
 5 
 6 code segment
 7 start:  
 8     mov ax, data
 9     mov ds, ax
10 
11     mov si, offset str
12     mov al, 2
13     call printStr
14 
15     mov ah, 4ch
16     int 21h
17 
18 printStr:
19     push bx
20     push cx
21     push si
22     push di
23 
24     mov bx, 0b800H
25     mov es, bx
26     mov di, 0
27 s:  mov cl, [si]
28     mov ch, 0
29     jcxz over
30     mov ch, al
31     mov es:[di], cx
32     inc si
33     add di, 2
34     jmp s
35 
36 over:   pop di
37     pop si
38     pop cx
39     pop bx
40     ret
41 
42 code ends
43 end start

執行結果如下:

對源程式做如下修改:

將line3改為:

1 str db 'another try', 0

將line12改為:

1 mov al, 4

執行結果如下:

⭐基於執行結果,理解原始碼,以及組合使用轉移指令call和ret實現子程式的原理與方法。具體地,在line18-40中:

⭐line 19-22,line 36-39,這組對稱使用的push、pop,這樣用的目的是什麼?