|
|
ret_sp macro dummy , w. D; n2 S, }' ]9 j, ^; c& u3 {
local llll, lll 2 i5 I# p6 k6 C
even
" ]+ ]) s: @: x, L+ W mov sp, offset cs:lll
3 A' u. w8 I B# @! W, Y jmp dummy n1 u8 c% Q- `
lll:
" {, B0 t: D) c. T' k: w7 @* T dw offset cs:llll ; return address
3 ^. Z% L, h% S2 l7 [6 Allll:% c' Q0 ^3 l( U; K+ E% b4 Y
endm: G( }9 |. _0 }! F, ^' J. b( O
. e1 |+ L1 a" _1 S& f4 U$ |
关于ret_sp这个宏我有一点没有搞明白! C/ ^+ H" U6 E
假设lll的地址为200h,那么mov sp, offset cs:lll这条语句就是把200h赋给了SP,而jmp dummy中的dummy函数最后的ret语句相当于直接把sp pop给了IP,也就是说dummy执行完以后,IP直接回到了lll处,那么还要llll这个标号干什么呢?$ T6 H$ C. c( t v X) l! B
为什么不能直接写成:
3 V" D3 C0 e- k, X Sret_sp macro dummy & S# B* h. z, _, r4 [+ _- }
local lll
/ B5 \9 l* J2 h3 u even! \4 b7 v/ D P; O" U- l% o1 Q
mov sp, offset cs:lll
5 S% ^$ e, `5 g- }' T9 B( h. S jmp dummy" W" u8 A) O9 x5 P
lll:8 H, r$ X, [$ r
endm
* Z. k5 h9 d7 t0 w9 N( S6 s; T. ?- z' v$ ~- F$ i2 b5 r
请知道的指点一下,谢谢! |
|