|
|
ret_sp macro dummy
+ P$ ^) y0 l. D) N local llll, lll
1 {& ^3 t( H; W t" V6 [ even
# e1 v$ ]8 [1 e* h6 }$ `; r# P mov sp, offset cs:lll
3 Q- V [* Z( O+ Q" O: k jmp dummy
7 s3 Q0 f0 ]/ J8 v2 t9 `& klll:6 P5 b/ Z1 N. {
dw offset cs:llll ; return address! ?0 I5 b' P; r
llll:* l4 }9 }$ v: ^
endm
9 X4 ^+ Z4 s" U3 V$ P0 u0 a& s) Z; R+ b& y$ H8 ^- n4 k6 p+ l
关于ret_sp这个宏我有一点没有搞明白+ A; ?8 }( Y0 }2 A3 c! P
假设lll的地址为200h,那么mov sp, offset cs:lll这条语句就是把200h赋给了SP,而jmp dummy中的dummy函数最后的ret语句相当于直接把sp pop给了IP,也就是说dummy执行完以后,IP直接回到了lll处,那么还要llll这个标号干什么呢?7 i9 x s; A$ L1 `! }6 f1 z
为什么不能直接写成:
~) r8 H+ c z/ [& t2 Fret_sp macro dummy 1 m3 ?* @! k2 F: }
local lll
8 _8 F9 N3 V$ j: ? even3 z, }, O! E1 K* v9 e' w. p
mov sp, offset cs:lll ! @+ G V, s2 q9 K; b7 G
jmp dummy0 S9 o, \$ i% X) p7 t7 B+ O
lll:. g5 E/ I& T( g6 H7 D
endm% N j5 i5 B* V/ ]- ^: k2 Y
1 `) [0 n; C K请知道的指点一下,谢谢! |
|