|
|
ret_sp macro dummy 4 p+ V$ W+ R" O9 H, v* a
local llll, lll & F$ U8 {: K+ e) ~" Q+ G- y1 y
even8 H0 f/ l) h4 E- a, m) d- o
mov sp, offset cs:lll
+ q: t6 p Y: y5 ^/ q2 S/ { jmp dummy
( M) e0 W$ Z) M! zlll:% ~8 P+ z3 j. O- S( p
dw offset cs:llll ; return address& A, b m/ B, U2 a
llll:. U6 D( ]8 p" ^4 G: v# K
endm
/ G2 \+ R: a7 B& ]+ k) \$ B0 y W ] _ Y9 B1 h
关于ret_sp这个宏我有一点没有搞明白
# ?% t) L, W% N6 b1 r+ C假设lll的地址为200h,那么mov sp, offset cs:lll这条语句就是把200h赋给了SP,而jmp dummy中的dummy函数最后的ret语句相当于直接把sp pop给了IP,也就是说dummy执行完以后,IP直接回到了lll处,那么还要llll这个标号干什么呢?: k% |2 B3 K" v3 S
为什么不能直接写成:
1 D( |, ?2 G* G1 d9 R1 fret_sp macro dummy
. Z$ b8 V/ ?' w k! j, Y' c local lll
3 Z' M* m0 k6 e$ ^3 Z1 { D3 K even
6 I9 k- Q6 D: r2 [+ \ mov sp, offset cs:lll
- d( i% u4 Z4 }; o8 w8 S7 o jmp dummy) P2 `# L$ I: i2 O; y; E
lll:
, S3 D, R$ B, Kendm
7 {- u6 W0 ]# A& P6 s
* U% E7 E( l3 M. ~3 h- s P请知道的指点一下,谢谢! |
|