免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2419 | 回复: 7
打印 上一主题 下一主题

有没有什么办法可以指定dos com程序的加载位置? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-01-07 09:15 |只看该作者 |倒序浏览
我想将编译好的程序加载到常规内存中80000h的位置,c语言有什么办法么?或者是哪个编译器可以指定内存的加载位置?
谢谢

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
2 [报告]
发表于 2009-01-07 10:13 |只看该作者
好象没有办法,com加载不能限定其位置。快10年没有去接触过com了,我印象中的com貌似就是这样。不过还有一个长驻程序,忘记是怎么回事了。
不过我说的不一定对,你可以去查查com的加载,以及其他的一些与com相关的东西

[ 本帖最后由 cjaizss 于 2009-1-7 10:14 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2009-01-07 11:27 |只看该作者
原帖由 toes 于 2009-1-7 09:15 发表
我想将编译好的程序加载到常规内存中80000h的位置,c语言有什么办法么?或者是哪个编译器可以指定内存的加载位置?
谢谢


dos 下的com程序加载的起始offset地址是100h,如果要到指定的地址,那么你自己要给它分配好cs和ip,可以在程序中用压栈和程序返回(ret)的方法来运行它.  不过注意dos下内存没有保护的功能,你可以强制指定指针到80000h,你要保证其他程也不用这个空间,幸好dos是单任务的,保证这点不是太难.

[ 本帖最后由 system888net 于 2009-1-7 11:31 编辑 ]

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
4 [报告]
发表于 2009-01-07 11:58 |只看该作者
这里的0x100应该是相对偏移,里面的代码应该是位置无关的吧。

论坛徽章:
0
5 [报告]
发表于 2009-01-07 12:27 |只看该作者
原帖由 cjaizss 于 2009-1-7 11:58 发表
这里的0x100应该是相对偏移,里面的代码应该是位置无关的吧。


代码是否跟位置无关有点记不清楚了,可能是无关的.
com程序的代码段和数据段都是相同的,而且限制在了64k,里面的数据的地址都是0x100+address的,因此加载时必须满足100h的要求,否则会出错。

论坛徽章:
0
6 [报告]
发表于 2009-01-07 14:08 |只看该作者
谢谢
我想想其他办法

论坛徽章:
0
7 [报告]
发表于 2009-01-08 18:33 |只看该作者
DOS上有.COM和.EXE两种机器码可执行程序文件格式。
1).COM
大小不能超过64KB(一个段)。由DOS将其装载在当前最低段里。代码从0100H可是执行。前面的256B由DOS写入,相当于UNIX里的进程块。
2).EXE
大小可以是几个段。开始执行地址可以由编码员设定,如果是汇编语言开发的话。用C开发,要看C编译器是否支持。好像TC可以,记不清了。
3).COM格式也有办法,可以在程序的开头写一段代码,当执行时,将代码整个搬到8000H处,再跳转到那里执行。

[ 本帖最后由 beepbug 于 2009-1-9 18:11 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2009-01-12 09:33 |只看该作者
原帖由 beepbug 于 2009-1-8 18:33 发表
DOS上有.COM和.EXE两种机器码可执行程序文件格式。
1).COM
大小不能超过64KB(一个段)。由DOS将其装载在当前最低段里。代码从0100H可是执行。前面的256B由DOS写入,相当于UNIX里的进程块。
2).EXE
大小可 ...

最后就是用3着这种方式在汇编开始搬移跳转的 。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP