|
|
ret_sp macro dummy 1 e" K. U% }1 B& V) f
local llll, lll
6 D- ]) _: E/ B* z" g; c even
) }% T9 z* d' b2 S mov sp, offset cs:lll + i. t- L# A4 I5 d L- Q, ^: X
jmp dummy. x3 F5 j* F1 j1 W$ A. V$ G- A3 @
lll:. M' o% @ W8 T4 F$ Q# `6 r) f
dw offset cs:llll ; return address
# ~6 U( y5 A" y) y$ g0 zllll:
1 f* O" n% Q% \2 l7 F h8 c4 }endm. \6 z( D- t9 k# V
$ `# x$ R2 D1 H
关于ret_sp这个宏我有一点没有搞明白
' h& V) b% z9 s* q假设lll的地址为200h,那么mov sp, offset cs:lll这条语句就是把200h赋给了SP,而jmp dummy中的dummy函数最后的ret语句相当于直接把sp pop给了IP,也就是说dummy执行完以后,IP直接回到了lll处,那么还要llll这个标号干什么呢?: ]/ m7 K7 X# b/ z2 U/ z
为什么不能直接写成:: L3 X' \8 ^: @/ ]: D
ret_sp macro dummy
0 K, f7 U; G1 ^# z( m local lll
# l4 }' [/ o9 M' j. _' ` even* H& h# p3 v4 @: G$ X' `$ G* K
mov sp, offset cs:lll * m% z/ p' E- B9 {# U$ r( R
jmp dummy: @& \2 w5 p8 t7 ~+ l
lll:1 I# ^2 }) e. h: [0 N+ O: p) }8 a
endm
8 Y. V1 I; E0 k* C6 s$ m( D0 c, ]. t3 z! m* L4 \
请知道的指点一下,谢谢! |
|