|
|
ret_sp macro dummy 9 {& d* I; H, P+ X+ L5 Z
local llll, lll
' p8 v, t; ^! e6 `5 `0 M even6 E4 l* O( @% v# [/ Q2 R2 E
mov sp, offset cs:lll r0 D3 r: \' |: P8 z/ y6 r4 ?& |
jmp dummy1 j: ?$ S j9 p4 i
lll:
" f! b1 Y K2 x, g dw offset cs:llll ; return address
f" i: n- l: e/ \" r5 zllll:+ O- Q4 e3 ~, ^ [& W. S- l/ e
endm+ V7 Q3 z( D* N& W: r% h
8 x6 ` e' q( z E0 Y
关于ret_sp这个宏我有一点没有搞明白8 C$ R3 d. R3 W( s! a- L
假设lll的地址为200h,那么mov sp, offset cs:lll这条语句就是把200h赋给了SP,而jmp dummy中的dummy函数最后的ret语句相当于直接把sp pop给了IP,也就是说dummy执行完以后,IP直接回到了lll处,那么还要llll这个标号干什么呢?
( e$ b$ P4 {/ S6 O为什么不能直接写成:
$ m/ R; `" ?) Z* l: q" p6 a" Mret_sp macro dummy 4 F7 \2 H* U2 F" S
local lll
5 u$ H9 J4 _' o: d& O6 Q9 I) e2 H9 K even
+ R: M1 R# W8 x4 g" K1 Z4 ~+ D mov sp, offset cs:lll 1 q- K6 B* t* p
jmp dummy
" W% M: [7 o! V6 Xlll:' r) f& ?. u0 k1 f
endm4 d6 l1 g/ x8 [& d/ T2 ~1 z$ x x7 k
0 \/ b( g9 z; |, h* @1 B6 u请知道的指点一下,谢谢! |
|