|
ret_sp macro dummy . _. A! ]' U6 t* |: B2 ~ r
local llll, lll
3 H2 D9 p$ U, D! q {# e5 A$ K even& s6 i8 |. Y+ E+ Q
mov sp, offset cs:lll
7 E7 u: T; x: ~* T" \ jmp dummy# u' Q5 i3 p1 A3 s+ s* r
lll:
! C, q9 h7 Z' a' |: B dw offset cs:llll ; return address3 B7 F- {& U4 F' Z# B/ u9 B% z+ ?
llll:7 N, O% f1 Q0 l
endm6 ~* o" R6 p- z- h
( b1 T0 I1 v8 n9 B7 ^关于ret_sp这个宏我有一点没有搞明白: x w( |$ G) f1 E7 L0 j, a
假设lll的地址为200h,那么mov sp, offset cs:lll这条语句就是把200h赋给了SP,而jmp dummy中的dummy函数最后的ret语句相当于直接把sp pop给了IP,也就是说dummy执行完以后,IP直接回到了lll处,那么还要llll这个标号干什么呢?
- u' V# W | n7 [! ]: Q N) [2 h$ l( [为什么不能直接写成:
/ u+ S$ P: V' b- `: E1 d5 rret_sp macro dummy , f3 S. d' e/ d
local lll % D8 ?7 M) P3 `
even
+ F% E j) M d( x" B% y" M mov sp, offset cs:lll
7 z; _5 S% w; K' Q* ^5 i jmp dummy) H/ S& p# m1 j& }& X+ W' |! ]( C
lll:
. n8 M6 F1 Q9 s* o7 Pendm
: u+ ?0 V4 ~1 }! h! o5 g; f( N" j$ ~; {
请知道的指点一下,谢谢! |
|