|
|
ret_sp macro dummy 2 `1 |( z8 @" I
local llll, lll
$ M4 O! f6 j1 Q& j# v even
/ I& v* ^6 f, p: c" T; V% a% u mov sp, offset cs:lll 4 c- K: z9 A6 j- c# [+ v
jmp dummy
. }" s/ B8 K* glll:+ o3 e8 J) p( i( a% n
dw offset cs:llll ; return address
" G# d: t& u6 @3 W: J4 a9 Fllll:
; ^7 h: n6 l3 R" n' j, Y/ d) q0 @8 y- l1 ]endm
$ ~% ?! ]! t" a" V Z
1 R J5 n5 c+ [. G关于ret_sp这个宏我有一点没有搞明白
9 A5 x+ @& I5 i" c0 Z' M" h0 v# I" V' ^假设lll的地址为200h,那么mov sp, offset cs:lll这条语句就是把200h赋给了SP,而jmp dummy中的dummy函数最后的ret语句相当于直接把sp pop给了IP,也就是说dummy执行完以后,IP直接回到了lll处,那么还要llll这个标号干什么呢?3 W: J9 ?6 U7 x( w+ m
为什么不能直接写成:% q+ m D$ w3 @1 G. U/ N
ret_sp macro dummy ; k' g; f9 t Z! ?' }
local lll ; M; P- { ^: }1 e! d; U! ]
even
0 e+ N- D) C5 ~& F4 c) ` mov sp, offset cs:lll : b+ [9 d" _" t# | W5 M! u. g; m( m
jmp dummy' [* X: f+ i4 l; s
lll:
* C$ m) f- r+ U6 y1 nendm8 g8 e& F6 C! e( g/ w# f
; o! @8 i2 u0 w$ @- p请知道的指点一下,谢谢! |
|