有没有什么办法可以指定dos com程序的加载位置?

发布于 2022-09-23 14:07:54 字数 66 浏览 11 评论 0

我想将编译好的程序加载到常规内存中80000h的位置,c语言有什么办法么?或者是哪个编译器可以指定内存的加载位置?
谢谢

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

青巷忧颜 2022-09-30 14:07:55

原帖由 toes 于 2009-1-7 09:15 发表
我想将编译好的程序加载到常规内存中80000h的位置,c语言有什么办法么?或者是哪个编译器可以指定内存的加载位置?
谢谢

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

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

一指流沙 2022-09-30 14:07:55

这里的0x100应该是相对偏移,里面的代码应该是位置无关的吧。

给我一枪 2022-09-30 14:07:55

原帖由 cjaizss 于 2009-1-7 11:58 发表
这里的0x100应该是相对偏移,里面的代码应该是位置无关的吧。

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

堇色安年 2022-09-30 14:07:55

谢谢
我想想其他办法

小…红帽 2022-09-30 14:07:55

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 编辑 ]

反目相谮 2022-09-30 14:07:55

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

最后就是用3着这种方式在汇编开始搬移跳转的 。

伊面 2022-09-30 14:07:54

好象没有办法,com加载不能限定其位置。快10年没有去接触过com了,我印象中的com貌似就是这样。不过还有一个长驻程序,忘记是怎么回事了。
不过我说的不一定对,你可以去查查com的加载,以及其他的一些与com相关的东西

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文