找回密码
 加入计匠网
搜索
热搜: BIOS ACPI CPU Windows
查看: 7051|回复: 1

关于ret_sp这个宏的问题

[复制链接]
发表于 2009-9-17 10:17:46 | 显示全部楼层 |阅读模式
ret_sp        macro        dummy                        ! H9 d8 m8 ^3 B( {  J( X: p/ Q
        local        llll, lll               
& L) y( q9 W, g        even
# k0 D: y0 b9 j$ q        mov        sp, offset cs:lll        
; X: X8 ?6 c3 N) C1 Y" u3 @        jmp        dummy0 e0 Q, h  k, |0 Q
lll:
0 A- L) C. }" l' z* ^4 ]        dw        offset cs:llll                ; return address( I, i$ q+ R  n2 Q
llll:
: V* y" `8 b" k. U2 J  T. [3 i* J2 ^endm
; X$ Z3 S8 H; Q0 {. V& [) Z; Q; P" h+ B
关于ret_sp这个宏我有一点没有搞明白- ?$ c  Y# j' J. ?6 b( `# @5 Q
假设lll的地址为200h,那么mov        sp, offset cs:lll这条语句就是把200h赋给了SP,而jmp dummy中的dummy函数最后的ret语句相当于直接把sp pop给了IP,也就是说dummy执行完以后,IP直接回到了lll处,那么还要llll这个标号干什么呢?4 B1 C+ p* e0 v6 E8 R5 g( \. ~# c
为什么不能直接写成:
8 h5 |6 D3 U0 B4 bret_sp        macro        dummy                        + f* `! m% w/ a) _* r
        local        lll               . t+ I" G  [* I
        even' V5 e: f& k2 _3 g* b! D( w: E/ u3 h. N
        mov        sp, offset cs:lll        
/ X9 N7 ~8 u/ G1 R        jmp        dummy
+ {( B' \) b0 o$ `. Hlll:
$ y6 s" t& p4 L  g$ b8 X# Y& d9 c& t' Yendm( ^0 `0 T; T/ h) I
9 _1 T- A' e3 p' I
请知道的指点一下,谢谢!
 楼主| 发表于 2009-9-17 19:49:24 | 显示全部楼层
问题已经解决,谢谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

Archiver|手机版|小黑屋|计匠网

GMT+8, 2024-5-19 14:44 , Processed in 0.024258 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表