| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4822 人关注过本帖
标题:用汇编写的代码OD打开以后多了很多东西,找不到原程序代码
只看楼主 加入收藏
lyl930130
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:323
专家分:111
注 册:2013-5-13
结帖率:91.43%
收藏
已结贴  问题点数:20 回复次数:8 
用汇编写的代码OD打开以后多了很多东西,找不到原程序代码
源码如下:
程序代码:
DATA SEGMENT
    BUF DB 'HELLO WORLD!  THIS IS MY FIRST ASM FILE! $'
DATA ENDS

 
CODE SEGMENT
    ASSUME  CS:CODE,DS:DATA
START:   MOV AX,DATA
    MOV DS,AX
    LEA DX,BUF
    MOV AH,09
    INT 21H
    MOV AH,4CH
    INT 21H
CODE ENDS
END START


用IDA打开以后还正常,只是数据段和函数名有些东西变了,但是主体的代码段没变
但是用OD打开以后,多了很多函数,而且找不到INT 21h 的中断  
如图,图片依次为OD打开exe以后的起始位置、输出字符串的函数位置、输出字符串函数里的一个循环(该循环能循环很久很久,我调了很久一直在循环中,后来用自动步过,过了好久分钟以上,才停下来输出了字符串;该循环在每次返回上面之前所有寄存器的值都没有变过。)
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册


问题:用OD找不到代码段在哪里,整个里面也没有看到INT XX的中断语句,而是由很多的call。但是自己没有写,不明白为什么

link之后的exe:
3.rar (502 Bytes)
2015-01-15 09:54
lyl930130
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:323
专家分:111
注 册:2013-5-13
收藏
得分:0 
表达有误,不是所有寄存器的值没有变,是每次循环以后的值和上一次的值一样
2015-01-15 09:56
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:10 
你的程序是16位的 在支持运行16位程序的32位Windows里面 是用一个专门的模块来运行的 也就是你OD标题栏里面的ntvdm 相当于一个虚拟机 而调试虚拟机是比较困难的 你就在做这件困难的事

有两个办法能变简单

1. 不写16位程序 改成32位的 这样OD就能调试了 注意必须是32位的哦 64位的OD也不支持
2. 用16位的调试器 比如Debug调试
2015-01-15 12:59
lyl930130
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:323
专家分:111
注 册:2013-5-13
收藏
得分:0 
回复 3楼 zklhp
知道了,谢谢。还有一个问题没有解决,就是中断。我怎么也找不着一个中断,是编译器把中断用其他方式表示出来了吗?
2015-01-15 14:39
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用lyl930130在2015-1-15 14:39:39的发言:

知道了,谢谢。还有一个问题没有解决,就是中断。我怎么也找不着一个中断,是编译器把中断用其他方式表示出来了吗?

你的代码完全在那个虚拟机里运行 而你还没跟踪到执行你的程序的地方

至于中断是怎么实现的 我也不知道
2015-01-15 15:05
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
16位已经淘汰了 不值得研究 如果你不是搞安全的 这个16位虚拟机也不值得研究

当然了 你喜欢就好 祝您好运
2015-01-15 15:06
lyl930130
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:323
专家分:111
注 册:2013-5-13
收藏
得分:0 
回复 6楼 zklhp
谢谢。因为是刚开始接触汇编,从网上下的几十道代码挺适合的,但是没想到是16位的。
2015-01-15 17:02
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:10 
使用int应该是在cpu的实模式下完成的,在保护模式下,早期系统会用虚拟dos完成,不知道后来的操作系统能不能虚拟dos模式,好像从win2000后就完全丢弃了吧。int8时钟、int10h显示、int13h硬盘、int16h键盘、int21h dos调用...,这些曾经折磨过早期程序员的中断调用,已经汇入历史长河,渐渐不见踪影了!

能编个毛线衣吗?
2015-01-15 17:15
lyl930130
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:323
专家分:111
注 册:2013-5-13
收藏
得分:0 
回复 8楼 wmf2014
看来我的教材已经被淘汰很久了。。。。要更新了
2015-01-15 21:53
快速回复:用汇编写的代码OD打开以后多了很多东西,找不到原程序代码
数据加载中...
 
   



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

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