|
|
ret_sp macro dummy
$ \( l6 y* g4 b8 o9 x local llll, lll
7 Z( C, F; r# N# v$ j5 C7 G even- h) U ^, p: Z; l( F
mov sp, offset cs:lll ; h, `: t0 J5 M- x
jmp dummy8 z1 ?0 d2 h7 W9 w
lll:
3 d0 r! R9 S L+ A; p dw offset cs:llll ; return address
0 H* a( F q& K. u, q8 vllll:
" [9 H" X9 A- L( k( l8 w1 D3 a9 z% _endm
' s% d% ?% l8 Q; V! h# g! t8 w9 t1 M% `6 _2 @$ l$ O& p
关于ret_sp这个宏我有一点没有搞明白, @/ C% i0 H' Q$ K! e' C2 W9 ]' \% |
假设lll的地址为200h,那么mov sp, offset cs:lll这条语句就是把200h赋给了SP,而jmp dummy中的dummy函数最后的ret语句相当于直接把sp pop给了IP,也就是说dummy执行完以后,IP直接回到了lll处,那么还要llll这个标号干什么呢?
1 {2 M$ I1 e; P4 H' R/ q为什么不能直接写成:
0 L- u; k& _6 S& L3 yret_sp macro dummy ( q" C8 S- G" J6 e h8 ~! \
local lll
2 X/ Y: G7 z5 q- Y6 g2 z M/ U- U0 q even4 j# v ~1 o9 ^: z
mov sp, offset cs:lll
3 S+ o; P3 \& I) |! L! { p jmp dummy) k. l8 E2 V) y4 E8 U- S
lll:; y( N* I' p. k: S: T* U" z; u
endm
3 d/ ]+ K p- ?0 _# f2 B
! [+ _4 u# ^' w* L1 c请知道的指点一下,谢谢! |
|