|
|
ret_sp macro dummy . S$ \1 Y* r, U% x; V: x" q2 h
local llll, lll 6 V6 }' B/ v' [3 o5 r
even
9 _- D% ?- F+ f9 E mov sp, offset cs:lll : Z5 k- u& q- u9 B) T
jmp dummy
9 c' A* ?. c5 V; tlll:
+ [! j* S7 u" e- P# r" s& ] dw offset cs:llll ; return address: @) C" z/ S6 |4 P. N
llll:& X$ D. l6 n4 p( z+ W
endm
2 I# e( U' r% O! B$ U; |: i% U1 ]3 s2 {. ?4 u4 _
关于ret_sp这个宏我有一点没有搞明白: c( X2 Y( T9 N- T
假设lll的地址为200h,那么mov sp, offset cs:lll这条语句就是把200h赋给了SP,而jmp dummy中的dummy函数最后的ret语句相当于直接把sp pop给了IP,也就是说dummy执行完以后,IP直接回到了lll处,那么还要llll这个标号干什么呢?
$ g" n n9 Y/ \+ S7 i$ Z, d为什么不能直接写成:- i8 F5 U/ R) }+ |) z# q/ t( l) H
ret_sp macro dummy
6 A3 c! a. \) m- j1 u local lll - z( G* V$ R, r! {8 z* g6 G
even
# q" [- e* T7 C/ j. d0 q7 _ mov sp, offset cs:lll
* e) x. u; g2 R/ i$ G jmp dummy
2 k7 \- F8 g) N0 f- olll:) L9 E% ?9 W3 V3 T
endm* x2 l; f' S. h5 g. w& i/ f
: }; O* i$ H" t8 u9 @/ N& l+ z请知道的指点一下,谢谢! |
|