|
|
ret_sp macro dummy 1 i6 S- _ D% q( U2 {
local llll, lll ' Y6 \& u/ x5 S5 p% |
even) y) ?; `/ |4 v2 m
mov sp, offset cs:lll ! l1 {, E" O" N; D0 N$ }
jmp dummy
/ T D! X2 L( ]! Plll:0 W4 P, F# y' F/ P8 l! @2 [7 j% `
dw offset cs:llll ; return address7 V9 P* I6 M* l! m) Y
llll: C3 o3 }" x7 }# V3 K4 E4 F5 r- f
endm6 ?* Z2 X$ i3 N/ \. C: r
& g% K. d, l1 g& Q+ @8 H+ \2 _关于ret_sp这个宏我有一点没有搞明白# U, e, D* S7 e
假设lll的地址为200h,那么mov sp, offset cs:lll这条语句就是把200h赋给了SP,而jmp dummy中的dummy函数最后的ret语句相当于直接把sp pop给了IP,也就是说dummy执行完以后,IP直接回到了lll处,那么还要llll这个标号干什么呢?+ [% d$ z/ o B! Z4 m# u
为什么不能直接写成:
8 G# `: x* y8 |" \ret_sp macro dummy
6 o8 m" ` v1 y% h0 Y+ Z3 G local lll
3 I$ c: o |- P" e& P8 I- K- X' M even
2 O/ Q2 S9 i! o( ?. ? mov sp, offset cs:lll
9 s3 x# W0 N4 {; h" K$ x2 ?2 P jmp dummy
' Q/ _* V2 w$ @, tlll:
9 E X ?. _; j( Bendm N* j4 Q, ~8 y4 _+ ~
! \; k2 \: h' v+ j$ z请知道的指点一下,谢谢! |
|