|
|
ret_sp macro dummy $ r5 q" `- b. c c/ d0 T
local llll, lll
4 j! ]5 d. [( @9 i even C# C3 g8 }! |* H' j
mov sp, offset cs:lll
7 L$ I8 `$ [: r jmp dummy- g4 y5 ^& k* O( p1 F w
lll:+ u% P7 M5 y: F3 x$ M
dw offset cs:llll ; return address
% s% {( M' ]3 ?8 e- @/ V% T5 ~3 Ollll:/ `/ O+ h: j0 L* a/ m0 p
endm
; `% M V# g* d9 E! i, f: t
4 n! u E$ w% C1 h# H2 h关于ret_sp这个宏我有一点没有搞明白1 E, p4 g5 Q) Z8 X: p
假设lll的地址为200h,那么mov sp, offset cs:lll这条语句就是把200h赋给了SP,而jmp dummy中的dummy函数最后的ret语句相当于直接把sp pop给了IP,也就是说dummy执行完以后,IP直接回到了lll处,那么还要llll这个标号干什么呢?
8 \2 M9 [# C+ a0 R$ W ^4 _为什么不能直接写成:
# E0 l D, J7 bret_sp macro dummy # H& }* K, G& e4 v9 H
local lll ' R! C7 V7 [( m. E
even6 ~, K5 ^9 O7 V
mov sp, offset cs:lll
! P) U) O n; e* X" c% r7 ~0 ~/ m jmp dummy3 z' u6 d) t5 D3 _* {& W, @+ k
lll:
5 y6 N7 @6 p1 {. ?' S8 [$ ?endm" A0 |. e0 c; \
$ b+ {. x7 ]& x# |% k" ?5 R" R请知道的指点一下,谢谢! |
|