|
ret_sp macro dummy + f! n9 X! e' _5 p' |% w
local llll, lll
7 v' S' g- B j3 s even
; v9 h9 X. n; o2 o- W) a- G8 }% v mov sp, offset cs:lll
# i- E! N% T6 s! | jmp dummy
" f1 ?' E# [; G* `; ~' m+ N% u# g4 d& I% \lll: j8 a3 b; D) G+ X$ l
dw offset cs:llll ; return address
1 }5 D8 y8 v5 M7 J/ D! D N# [llll:1 f" Z/ m3 h) s" G8 r3 Y/ c
endm% S4 `# _* z: O2 r T
3 V- Q% j6 i9 U3 ^' x
关于ret_sp这个宏我有一点没有搞明白, m. B9 C. \1 D5 F5 s$ Z: o- B
假设lll的地址为200h,那么mov sp, offset cs:lll这条语句就是把200h赋给了SP,而jmp dummy中的dummy函数最后的ret语句相当于直接把sp pop给了IP,也就是说dummy执行完以后,IP直接回到了lll处,那么还要llll这个标号干什么呢?8 ?* Q# h% @, J2 N8 x
为什么不能直接写成:
( S; _- p% N5 `! [; B3 T1 Cret_sp macro dummy ) S3 y0 x9 q! N; \
local lll * Z+ ~1 a, q D2 L- j
even" g2 ^2 Y% O b3 U! T
mov sp, offset cs:lll
7 k4 o: |$ S0 |: k$ l jmp dummy
9 P: N0 F/ g3 i& w/ L+ Illl:
$ i* W$ |, E+ dendm
1 e6 v3 `) H: r2 v1 c2 y5 T# R9 ?7 Z3 l, k( A% d. N4 e
请知道的指点一下,谢谢! |
|