由.exe 转换为 .com文件问题?

ti_ta 2007-01-04 10:08:29
exe2bin.exe 制作 驻留内存的.com文件.

在dos下敲入命令行: exe2bin.exe D:\A(待转换文件)

但结果提示:File cannot be converted

请问:是怎么回事啊?
...全文
3021 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
ti_ta 2007-01-07
  • 打赏
  • 举报
回复
这是来了小广告了啊!

我得继续讨教我的问题,刨根问底的弄清楚,大家别嫌烦啊!呵呵.

mydo: 看过你写的文章了,主要是读取物理地址中的内容. 本人对windows的工作机理和内核不熟悉,不清楚和写打印驱动的关联,所以,还希望能指点一下有关打印驱动的内容.非常感谢了啊!

另,可否发 masm32v9.0 到我邮件: dypzdj@yahoo.com.cn 我实在是下载不下来.谢谢!
大熊猫侯佩 2007-01-06
  • 打赏
  • 举报
回复
用驱动可以修改中断idt的项,有兴趣的话可以看看我写的文章:

http://community.csdn.net/Expert/TopicView3.asp?id=5242379
hero4u 2007-01-05
  • 打赏
  • 举报
回复
........................................
对汇编不熟悉。参观一下
以前win95 就只知道 win.com 和 mouse.com
现在的操作系统写.com程序不大可能吧。好像.com size限制在64k。不清楚啊,门外汉。
做嵌入式系统,单片机。搞硬件编程又是另外一门学问了。呵呵
mLee79 2007-01-05
  • 打赏
  • 举报
回复
下 DDK , 看例程, 写驱动还是满简单的 ....

xylegend 2007-01-05
  • 打赏
  • 举报
回复
mark
ti_ta 2007-01-05
  • 打赏
  • 举报
回复
RE- mLee79:

可否具体些!或指点一些参考资料.本人该方面门外汉一个.多谢!
ti_ta 2007-01-04
  • 打赏
  • 举报
回复
多谢zara对我提出的所有问题的回复,谢谢啦!

转.com文件的问题,已经成功,但奇怪,我的源程序中包含了
     mov word ptr old_print[2],es  ; 段地址
也成功转换了啊!

在此希望和zara(当然也包括能帮我解惑的朋友),具体讨论一下:

1、我所有的问题都是围绕一个中心的,修改17h中断服务程序,并使之永远有效!

2、我现在的.com文件是一个内存驻留程序,把17h的中断地址修改,希望之后的所有程序,只要调用 int 17h,则进入我的新的入口程序.

3、问题是,只要我编写的程序一结束,再用别的汇编程序调用int 17h,则又跑到原来的中断服务程序去执行了!!

请看看我的代码,是否有错呢?

cseg segment
assume cs:cseg,ds:cseg
org 100h

start:
JMP Initialize
old_print dd ?

new_print proc far ;新的中断服务程序入口
assume cs:cseg,ds:cseg
STI
pushf
assume ds:nothing
push ax
push dx
mov al,'M'
mov ah,0
mov dx,0
call dword ptr old_print
pop dx
pop ax
popf
NOP
IRET
new_print endp

Initialize:
assume cs:cseg,ds:cseg
mov bx,cs
mov ds,bx
mov al,17h ;保存原中断向量
mov ah,35h
int 21h
mov word ptr old_print,bx
mov word ptr old_print[2],es

mov dx,OFFSET new_print ;置新的中断向量
mov al,17h
mov ah,25h
int 21h

mov dx,offset Initialize
int 27h ;将标签Initialize前的程序驻留内存

cseg ends
end start

再次感谢了啊!



zara 2007-01-04
  • 打赏
  • 举报
回复
文件不能被转换, 即你的 .exe 不满足 .com 的条件. 要能被转换为 .com, .exe 必须满足两个条件, 一个是程序是从 0100h 处开始执行的; 另外就是不能有段址的引用, 如 mov ax, DataSeg 这样的
ti_ta 2007-01-04
  • 打赏
  • 举报
回复
谢谢大家的回复!

也就是说,我现在即使在保护模式下写汇编程序,修改 int 17h的方式,是不可能实现的了!对吧!

有关windows驱动,了解这方面内容的朋友,能否稍微具体指点迷津,给我个方向,好去动手做.

再次感谢了!
haotz 2007-01-04
  • 打赏
  • 举报
回复
DOS 下不行,需要写windows的driver
Sime507 2007-01-04
  • 打赏
  • 举报
回复
楼主想做的功能肯定能实现,不过要写Windows驱动而不是Dos驱动。
zara 2007-01-04
  • 打赏
  • 举报
回复
如果是要视图拦截 Windows 的打印数据的话, 通过 int17h 肯定是没有丝毫用处的. Windows 下的 dos 窗口提高的这些功能, 都是临时模拟出来的. 不过, 如何实现你的要求, 我也不了解, 没有做过这方面的内容.
ti_ta 2007-01-04
  • 打赏
  • 举报
回复
RE: mydo- 对,是要修改中断服务程序的入口地址

RE:zara

再次感谢一直以来的关注.

再讨教一下,我在xp的dos下运行了.com程序,紧接着查看0:5c,确实是修改后的地址; 但当我退出当前的command窗口,重新开启一个command窗口时,发现地址又恢复成原地址了.
所以,我想是否是和windows下的保护模式相关呢!

另:"直接传送到打印端口比较有效率",我也考虑过这个问题.确实也是不清楚,打印功能到底是怎样发送数据的? 在不同的操作系统下也会有所不同吧,windows下呢?能否指点一下!

其实,一直以来,我希望解决的问题就是: 在windows下截获打印数据并对其进行修改,再传送去打印!

我也是初次来到该版不久,非常感谢大家的帮助!
zara 2007-01-04
  • 打赏
  • 举报
回复
> 转.com文件的问题,已经成功,但奇怪,我的源程序中包含了
>      mov word ptr old_print[2],es  ; 段地址
> 也成功转换了啊
不是说 .com 文件中不能使用 es 这样的段寄存器, 而是不能引用自己程序段的段址. 这是因为程序段的段址, 由于程序被加载到内存中时, 由于起始地址的不同, 也会有不同. 所以, dos 会根据加载的基址对其调整, 使其引用正确. 这个就是所谓的 exe 程序的重定位. com 文件就没有重定位项, 所以也不能有对段的引用. 其它方式对段寄存器的使用都是可以的. 比如:
mov ax, 0b800h
mov es, ax

上面的那个代码, 是有个问题:
new_print proc far ;新的中断服务程序入口
assume cs:cseg,ds:cseg
STI
pushf
assume ds:nothing
push ax
push dx
mov al,'M'
mov ah,0
mov dx,0
pushf ;*+ 需用这个指令. 如同 int17h 一样, 标记寄存器需用压栈的
call dword ptr old_print
pop dx
pop ax
popf
NOP
IRET
new_print endp

另外, 这个代码的驻留功能是正常的吧. 我在 xp 的 dos 窗口下直接运行了, 再进 debug 查看 0:5c 处的 int17h 的中断向量, 是指向这段代码的.
不过, 看过你的另外的帖子, 要求以此修改打印的内容. 这个, 恐怕不能这么实现的. 一般来说, 打印功能, 通过 int17h 来发送数据的, 可能比较少吧, 还是直接传送到打印端口比较有效率. 所以, 通过拦截 int17h 可能难以达到原来设想的目的
Sime507 2007-01-04
  • 打赏
  • 举报
回复
初学DOS驱动开发,楼主有什么资料可以给我参考一下吗?最好有完整的DOS驱动开发过程或汇编源代码,谢谢啦。
大熊猫侯佩 2007-01-04
  • 打赏
  • 举报
回复
你是想改v8086中的中断地址么?
ti_ta 2007-01-04
  • 打赏
  • 举报
回复
忘记说一个前提环境了.

我现在的程序都是在windows XP下的win-masm汇编工具下编写,并测试的.在windows的虚拟dos模式下的debug调试,可以看到内存的内容.

我的中断设置之所以无效,是否和在windows下有关呢?处于保护模式了?

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧