|
ret_sp macro dummy - _' e" A" u# q- X# C1 R+ U
local llll, lll
. t! s9 c3 n- R( u/ C9 M0 i% T3 S4 q$ H6 l even4 `0 f. ~2 h2 N! S' X8 s( z
mov sp, offset cs:lll
* A: y7 ^0 |: |1 z N% m1 v( `' h jmp dummy. J5 S% g+ f( p
lll:3 D1 t3 h8 D% H( c4 W
dw offset cs:llll ; return address
' n$ i6 l2 V- w) |# J6 r+ Y, a' Kllll:
: g# U! @* T& z7 z( Dendm
, _# s9 R& ^' o1 C$ G' u0 p1 @/ ~0 g, q( A' w7 z) E# t& E4 p) D8 d
关于ret_sp这个宏我有一点没有搞明白% C" C( w0 i% C2 ]: J4 C
假设lll的地址为200h,那么mov sp, offset cs:lll这条语句就是把200h赋给了SP,而jmp dummy中的dummy函数最后的ret语句相当于直接把sp pop给了IP,也就是说dummy执行完以后,IP直接回到了lll处,那么还要llll这个标号干什么呢?
( y" t3 N% K) p为什么不能直接写成:
6 \! ~, l- R7 Z+ G# K& ]: B) ?) dret_sp macro dummy
+ L( R+ O0 T1 A8 v0 S+ R local lll
' f+ H7 G& U6 b7 x9 m) W even
( }8 t4 n$ h, _$ n mov sp, offset cs:lll ; ^: v3 ]4 j2 E5 c2 l6 W
jmp dummy
& K% c; S/ K3 p, Y& j4 B- k/ f" plll:
9 ^8 B* |6 S6 B9 R+ ~! aendm
0 |9 ^1 e6 N+ J' ]
- }0 k$ ~' j, P6 e+ y. @请知道的指点一下,谢谢! |
|