|
ret_sp macro dummy
/ F5 x$ y: M+ j. E local llll, lll
/ F( a' G+ h# ?$ o- Z even
Y/ Y8 N5 @, ^/ S mov sp, offset cs:lll 4 ^0 u7 T: ` W5 S! K
jmp dummy
+ t; Z( Q% F( `$ y# Ulll:
( ~; s0 {3 U _ dw offset cs:llll ; return address3 p0 r F2 u( R+ M% Y. \
llll:
2 r$ Q: t) r( a* B& nendm4 T+ Z- r# w& ~: _( D3 ^
' j/ ?" a& f1 {
关于ret_sp这个宏我有一点没有搞明白
# Z+ O* a# g/ ?8 H" l% I' x6 B6 P假设lll的地址为200h,那么mov sp, offset cs:lll这条语句就是把200h赋给了SP,而jmp dummy中的dummy函数最后的ret语句相当于直接把sp pop给了IP,也就是说dummy执行完以后,IP直接回到了lll处,那么还要llll这个标号干什么呢?
+ ^0 m; i1 E! E9 _7 V* X: T为什么不能直接写成:
. H j! b4 n) k. Fret_sp macro dummy 4 B& z0 S1 g) W# Z% x2 Z* s
local lll : o( i D$ R5 ^( j1 L4 F. |
even$ ^; I. @0 o0 A4 Q
mov sp, offset cs:lll
% c5 d- {, Y2 b) s' ? jmp dummy' W+ `" }) Q/ b0 i( N4 z" \
lll:# {: w$ N' l5 d, h
endm7 f M: }/ j; D$ D0 J- ^- Z. w0 x
2 H8 w, J1 _6 V* _2 p* C请知道的指点一下,谢谢! |
|