![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-10-31 10:47 |
共 47,815 主题排行 / 349,930 发帖 / 今日 0 篇 / 48,290 会员排行 |
| DOS开发编程 & 发展交流 (开发室) » 哪为高手知道这种程序是怎样编译出来的?(结贴) |
| 可打印版本 2,991 / 11 |
| 第1楼 19951001 | 发表于 2006-10-18 01:20 |
| 高级用户 发帖 272 积分 570 来自 北京 | |
|
哪为高手知道这种程序是怎样编译出来的?(结贴) 不知大家是否用过bootpart这个小工具没有,该软件既能够Windows2000/nt/xp/2003下运行,也能够在Dos/Windows98下运行,哪位高手讲一下这种程序是怎样编译出来的?
[ Last edited by 19951001 on 2008-10-19 at 07:32 ] |
|
| 第2楼 19951001 | 发表于 2006-10-18 01:21 |
| 高级用户 发帖 272 积分 570 来自 北京 | |
|
bootpart见附件
附件 bootpart.rar (20.07 KiB) |
|
| 第3楼 electronixtar | 发表于 2006-10-18 04:33 |
| 铂金会员 发帖 2,672 积分 7,493 | |
|
C++里有个 stub ,就是那个东西。
一般来说这种程序有标准的Win32PE结构 记得Vista里有个BT的命令在 cmd 里居然提示: This program cannot run in Win32 mode. |
|
| 第4楼 19951001 | 发表于 2006-10-19 01:23 |
| 高级用户 发帖 272 积分 570 来自 北京 | |
Originally posted by electronixtar at 2006-10-18 04:33: 我想搞清楚这种两栖程序是怎样编译出来的,比如使用的是那种编程工具,编译时有何特殊设置等. |
|
| 第5楼 netwinxp | 发表于 2007-07-25 19:33 |
| 高级用户 发帖 366 积分 741 | |
|
刚从无忧过来,注册一下以表支持,请多多关照^_^ 其实每个PE格式的程序本身就是一个MZ格式的程序(OS2和早期的windows也用过其他格式,由于通用性较差这里不做探讨)。
它由一个MS-DOS头部开始,接着是一个是DOS模式的程序残余及一个PE文件标志,这之后紧接着PE文件头和可选头部。这些之后是所有的段头部,段头部之后跟随着所有的段实体和一些ICON资源等。 PE文件结构(简化): ------------------ │1,DOS MZ header│ ------------------ │2,DOS stub │ ------------------ │3,PE header │ ------------------ │4,Section table│ ------------------ │5,Section 1 │ ------------------ │6,Section 2 │ ------------------ │ Section ... │ ------------------ │n,Section n │ ------------------ 其中第二部分DOS模式的程序残余就是连接程序连接默认的WINSTUB.EXE(也就是输出“This program cannot be run in DOS mode.”),你可以用一个基于MS-DOS的有效程序取代WINSTUB,并且用 STUB 模块定义语句指示链接器,这样就能够取代链接器的默认行为,酱紫就可以实现在DOS也可以运行了。 简单地说可以在VC++里的编译参数加上/stub:exefile.exe(其中exefile.exe是16位程序)从而实现如LZ举例的两栖程序。 附:连接的程序别太大,防止无法载入。 |
|
| 第6楼 sunx | 发表于 2007-07-26 11:24 |
| 初级用户 发帖 17 积分 38 | |
|
最简化的方法是, 分别写完, 然后去掉 pe文件的dos头, 换上dos程序,
调整pe位置指针 |
|
| 第7楼 netwinxp | 发表于 2007-07-26 11:41 |
| 高级用户 发帖 366 积分 741 | |
Originally posted by sunx at 2007-7-26 11:24: 如果后面的PE 程序需要重定位咋办? ![]() |
|
| 第8楼 sunx | 发表于 2007-07-26 13:20 |
| 初级用户 发帖 17 积分 38 | |
|
的确是哦, 这样反而搞复杂了, 我大意了
还是用link吧 Originally posted by netwinxp at 2007-7-26 11:41: |
|
| 第9楼 cnch | 发表于 2008-07-04 13:09 |
| 中级用户 发帖 70 积分 326 | |
|
既然向别人请教,还要收费,真是不可思议!!!
给你简单的看了一下,该程序是Winimage软件的一个工具,是由Microsoft C编译器编译而成.而且版本不会很高.在程序里有" MS Run-Time Library - Copyright (c) 1992, Microsoft Corp"字样,假如是Borland C编译的应该是Borland ....等字样. 主要用来修改Windows NT多重开机选单的软件。 [ Last edited by cnch on 2008-7-4 at 01:42 PM ] |
|
| 第10楼 netwinxp | 发表于 2008-07-04 17:22 |
| 高级用户 发帖 366 积分 741 | |
|
MASM32在LINK OBJ文件的时候,加上/STUB:DOS文件名 就可以了,其中要求“DOS文件”需要是个MZ格式的EXE文件,在DOS下运行的话就会运行这个DOS文件。其实所有的PE格式的EXE文件都可以在DOS下运行,只不过一般链接的时候默认了一个只会显示This program must be run under win32 .的内置模块。
C++据说只要在stub里面指定DOS文件就可以了,由于我不会C++所以具体情况就不太清楚了。 [ Last edited by netwinxp on 2008-7-4 at 05:31 PM ] |
|
| 第11楼 19951001 | 发表于 2008-09-29 12:39 |
| 高级用户 发帖 272 积分 570 来自 北京 | |
|
两栖程序终于制作成功,感谢各位网友的帮助。这是 diskrw 的两栖版本程序。
http://upload.cn-dos.net/img/801.rar |
|
| 第12楼 netwinxp | 发表于 2008-09-29 14:11 |
| 高级用户 发帖 366 积分 741 | |
|
建议你顺便更新一下“2007.8.15 Dos版本 Dspt 更新”,酱紫方便他人查询。
|
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |