|
|
ret_sp macro dummy
! o% V0 m1 K: g( |8 G1 o( w- M/ A local llll, lll & q0 ?5 @% |2 e3 r
even& U0 p5 W7 {9 ~2 B
mov sp, offset cs:lll
1 c% P. {1 E; z jmp dummy5 u6 ?2 b1 L# r. B/ L
lll:
* ]' U( T1 k/ Z6 `& S: U( { q dw offset cs:llll ; return address1 F& s0 R/ p9 U0 W
llll:; C2 m1 b7 \: I2 ]5 M* G ~
endm
8 w9 c5 w4 C: F$ m# |7 i3 f/ K/ C# S$ r
关于ret_sp这个宏我有一点没有搞明白* M( m3 d# ~, H/ a9 p) T2 S
假设lll的地址为200h,那么mov sp, offset cs:lll这条语句就是把200h赋给了SP,而jmp dummy中的dummy函数最后的ret语句相当于直接把sp pop给了IP,也就是说dummy执行完以后,IP直接回到了lll处,那么还要llll这个标号干什么呢?
* t: u/ ~. t! z* s9 E$ u% P为什么不能直接写成:
: e$ ]- Y {/ G" F) v# k( mret_sp macro dummy 0 `6 o: c y" ^, ~5 B% C
local lll
) y8 d# K# t- Z: U% R; z8 U even
, M8 d0 {) N% T* t2 z- {5 z9 v# ^ mov sp, offset cs:lll ; Q" @8 e' O, {' {; h
jmp dummy
/ L+ K& K( c; V1 Vlll:
) W* ]$ y' |* I0 @$ s* {& ]9 J4 zendm( I7 t4 J7 B) s) ?; U$ N
0 l, r! S* @/ i; a) f+ V+ e请知道的指点一下,谢谢! |
|