|
|
ret_sp macro dummy
% w. S! P M5 B! m local llll, lll
% z3 S: ]( q: q/ D8 a0 f, U# n even
2 h: n2 i! Y' s; L+ d mov sp, offset cs:lll @* f0 p* B" L) m
jmp dummy5 k% k6 E, [$ B- X4 ^* ^3 k: i
lll:. A3 f9 _3 q m
dw offset cs:llll ; return address M5 I3 g2 L- S ]' O
llll:
/ F* y, w$ M; q' @: N' Cendm/ w5 v6 C# ?# F" D7 M
( T8 T; t, Z7 E- K. ~关于ret_sp这个宏我有一点没有搞明白8 F2 l, S& a3 Q
假设lll的地址为200h,那么mov sp, offset cs:lll这条语句就是把200h赋给了SP,而jmp dummy中的dummy函数最后的ret语句相当于直接把sp pop给了IP,也就是说dummy执行完以后,IP直接回到了lll处,那么还要llll这个标号干什么呢?
* Z, P4 R4 P0 o! ^8 ]! ?为什么不能直接写成:6 @ o- j" k1 U$ C5 V: A
ret_sp macro dummy ; {8 y( Y {/ W% J; I
local lll
$ X4 T' C& a; N. H( n9 { even
6 m7 G z, I1 _, Y+ t# q mov sp, offset cs:lll ) _, B) L ~% N. B4 Y# ]
jmp dummy
" s |7 X, [3 ^lll:
$ [+ L; A$ }8 u' r0 Nendm
3 l* F& F7 x0 t' Y' h+ d
3 j% }" s O5 v5 \ b& R) T: m' k请知道的指点一下,谢谢! |
|