|
|
ret_sp macro dummy
! |0 m0 u B* Y# u+ q local llll, lll & I( w3 B H6 C6 |! E" |! V3 C2 F
even- @9 |8 Y6 b+ z8 F* N! E$ C
mov sp, offset cs:lll 1 `) v0 _( J' `" s
jmp dummy
( f }) P" N7 l$ Ulll:0 i' k1 ?6 j2 w, H7 o
dw offset cs:llll ; return address
) P( R) V$ f1 e0 h" P. C' Allll:
' `' O) ]; ? s8 F1 b; @endm) [4 X+ p) X" L2 s0 m! H e
1 D: q, }7 L# `6 {! O9 o: U
关于ret_sp这个宏我有一点没有搞明白
g$ o" C+ j) K$ g' l6 `假设lll的地址为200h,那么mov sp, offset cs:lll这条语句就是把200h赋给了SP,而jmp dummy中的dummy函数最后的ret语句相当于直接把sp pop给了IP,也就是说dummy执行完以后,IP直接回到了lll处,那么还要llll这个标号干什么呢?, O( V0 e) _) n* N1 ?( e
为什么不能直接写成:# u& q) \/ j' m0 _+ L1 }" Q) A
ret_sp macro dummy , b8 R, ]6 M8 b/ }$ o7 R9 z
local lll A$ j; ^! p5 ~. e5 y
even
9 R- @; I6 ]3 C: M mov sp, offset cs:lll , L% }6 r2 h" g/ ~9 D8 G
jmp dummy
f; t+ t+ T% T% L) J8 @lll:
9 c4 P: j3 W$ h0 _9 V. fendm
: ?* G3 _1 T5 O" K! C7 b: X. L1 a; W3 q0 U
请知道的指点一下,谢谢! |
|