|
ret_sp macro dummy ! L9 P5 z/ {3 m& B
local llll, lll " A! p- Y3 [" v
even
F& n3 w+ p8 g( E( ?0 F mov sp, offset cs:lll
4 q/ n$ C, f5 V! @" s% K# k( ] jmp dummy( U& L% v% r( a& m& O/ u' ]
lll:1 G3 P" y* Y/ V7 u5 J; l
dw offset cs:llll ; return address
. ?$ E# S" R. J( f- `4 N& L! nllll:; Z1 u- v- \0 q
endm _) Z6 k0 A1 U2 @, H' R. V5 I
, L0 ]5 `$ i0 \ f% o: A# d: f
关于ret_sp这个宏我有一点没有搞明白+ V8 O( f+ C2 u, T e7 i" k
假设lll的地址为200h,那么mov sp, offset cs:lll这条语句就是把200h赋给了SP,而jmp dummy中的dummy函数最后的ret语句相当于直接把sp pop给了IP,也就是说dummy执行完以后,IP直接回到了lll处,那么还要llll这个标号干什么呢?6 m' j2 K- w% A" x& z* J. j
为什么不能直接写成:
# ?/ R7 x/ C0 x' O3 e6 aret_sp macro dummy
* w6 F. Z" R2 D% \7 L9 u$ O0 ~ local lll
# T- k7 ~- ]! U' \ even$ g4 C: V$ W3 @. A7 }
mov sp, offset cs:lll # K( c' k" t ~
jmp dummy
$ T2 Z. b# l- i" E7 B- R# {; n S0 |lll:
9 Z1 H0 N0 ^/ ^, a( m, l/ S2 R. n8 Sendm$ C8 p5 w" u; X1 ` B4 @: K# k
" O: O) H6 E* X7 i请知道的指点一下,谢谢! |
|