| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1073 人关注过本帖
标题:王爽试验 8-----分析一个奇怪的程序
只看楼主 加入收藏
Explorerlxz
Rank: 9Rank: 9Rank: 9
来 自:zzu
等 级:蜘蛛侠
威 望:4
帖 子:302
专家分:1032
注 册:2013-4-24
结帖率:100%
收藏
 问题点数:0 回复次数:0 
王爽试验 8-----分析一个奇怪的程序
分析下面的程序,在运行前思考:这个程序可以正确返回吗?
运行后再思考:为什么是这种结果?
通过这个程序加深对相关内容的理解
程序代码:
assume cs:codesg
codesg segment

    mov ax,4c00h
    int 21h

start:    mov ax,0
s:    nop
    nop

    mov di,offset s
    mov si,offset s2
    mov ax,cs:[si]
    mov cs:[di],ax

s0:    jmp short s

s1:    mov ax,0
    int 21h
    mov ax,0

s2:    jmp short s1
    nop

codesg ends
end start

程序的执行结果是可以正常返回
图片附件: 游客没有浏览图片的权限,请 登录注册
(程序名为8.exe)
分析程序,程序在内存中把s2处一个长为两个字节的jmp short s1移动到s处(nop为一字节指令)
看下图反汇编结果以及机器码
图片附件: 游客没有浏览图片的权限,请 登录注册

jmp short s1被翻译为ebf6,其中后一字节f6表示转移地址,f6代表的原码为10001010即-0ah,表示向上跳转十个字节,而执行此指令时ip指向0b3b:0022处的nop指令,向上跳转10正好到0b3b:0018即s1标号处,这才是jmp指令的本质,在内存中移动jmp指令后,执行依旧是按照偏移地址而不是标号来执行的,
mov ax,4c00h;3字节
int 21h;2字节
mov ax,0;3字节
jmp short s1;2字节,执行后向上偏移10字节继续执行,所以程序正常返回

[ 本帖最后由 Explorerlxz 于 2014-6-6 10:42 编辑 ]
搜索更多相关主题的帖子: color 
2014-06-06 10:41
快速回复:王爽试验 8-----分析一个奇怪的程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017237 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved