| 
 
19951001 
高级用户
 
     流落街头
  
  
积分 570 
发帖 272 
注册 2005-10-17 来自 北京 
状态 离线
 | 
『楼 主』:
 哪为高手知道这种程序是怎样编译出来的?(结贴)
 
使用 LLM 解释/回答一下
  
不知大家是否用过bootpart这个小工具没有,该软件既能够Windows2000/nt/xp/2003下运行,也能够在Dos/Windows98下运行,哪位高手讲一下这种程序是怎样编译出来的? 
 
 Last edited by 19951001 on 2008-10-19 at 07:32 ] 
 
    
 
  
 |   
 | 
  2006-10-18 01:20 | 
  
 | 
 | 
 
19951001 
高级用户
 
     流落街头
  
  
积分 570 
发帖 272 
注册 2005-10-17 来自 北京 
状态 离线
 | 
 | 
  2006-10-18 01:21 | 
  
 | 
 | 
 
electronixtar 
铂金会员
 
       
 
  
  
积分 7493 
发帖 2672 
注册 2005-9-2 
状态 离线
 | 
『第 3 楼』:
 
 
使用 LLM 解释/回答一下
  
C++里有个 stub ,就是那个东西。 
 
一般来说这种程序有标准的Win32PE结构 
 
记得Vista里有个BT的命令在 cmd 里居然提示: 
This program cannot run in Win32 mode. 
 
    
 
  
  |  
                  
  
                     
C:\>BLOG http://initiative.yo2.cn/ 
C:\>hh.exe ntcmds.chm::/ntcmds.htm 
C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>" |   
 | 
  2006-10-18 04:33 | 
  
 | 
 | 
 
19951001 
高级用户
 
     流落街头
  
  
积分 570 
发帖 272 
注册 2005-10-17 来自 北京 
状态 离线
 | 
『第 4 楼』:
 
 
使用 LLM 解释/回答一下
  
Originally posted by electronixtar at 2006-10-18 04:33: 
C++里有个 stub ,就是那个东西。 
 
一般来说这种程序有标准的Win32PE结构 
 
记得Vista里有个BT的命令在 cmd 里居然提示: 
This program cannot run in Win32 mode.  
我想搞清楚这种两栖程序是怎样编译出来的,比如使用的是那种编程工具,编译时有何特殊设置等.  
 
    
 
  
 |   
 | 
  2006-10-19 01:23 | 
  
 | 
 | 
 
netwinxp 
高级用户
 
    
 
  
  
积分 741 
发帖 366 
注册 2007-7-25 
状态 离线
 | 
『第 5 楼』:
 刚从无忧过来,注册一下以表支持,请多多关照^_^
 
使用 LLM 解释/回答一下
  
  其实每个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举例的两栖程序。 
附:连接的程序别太大,防止无法载入。 
 
    
 
  
 |   
 | 
  2007-7-25 19:33 | 
  
 | 
 | 
 
sunx 
初级用户
 
  
 
  
  
积分 38 
发帖 17 
注册 2006-1-16 
状态 离线
 | 
『第 6 楼』:
 
 
使用 LLM 解释/回答一下
  
最简化的方法是, 分别写完,  然后去掉 pe文件的dos头, 换上dos程序,  
调整pe位置指针 
 
    
 
  
 |   
 | 
  2007-7-26 11:24 | 
  
 | 
 | 
 
netwinxp 
高级用户
 
    
 
  
  
积分 741 
发帖 366 
注册 2007-7-25 
状态 离线
 | 
『第 7 楼』:
 
 
使用 LLM 解释/回答一下
  
Originally posted by sunx at 2007-7-26 11:24: 
最简化的方法是, 分别写完,  然后去掉 pe文件的dos头, 换上dos程序,  
调整pe位置指针  
如果后面的PE 程序需要重定位咋办?<img src="images/smilies/face-smile-big.png" align="absmiddle" border="0">  
 
    
 
  
 |   
 | 
  2007-7-26 11:41 | 
  
 | 
 | 
 
sunx 
初级用户
 
  
 
  
  
积分 38 
发帖 17 
注册 2006-1-16 
状态 离线
 | 
『第 8 楼』:
 
 
使用 LLM 解释/回答一下
  
的确是哦, 这样反而搞复杂了, 我大意了 
还是用link吧
 Originally posted by netwinxp at 2007-7-26 11:41: 
 
如果后面的PE 程序需要重定位咋办?:D   
 
    
 
  
 |   
 | 
  2007-7-26 13:20 | 
  
 | 
 | 
 
cnch 
中级用户
 
   
 
  
 
积分 326 
发帖 70 
注册 2003-1-10 
状态 离线
 | 
『第 9 楼』:
 
 
使用 LLM 解释/回答一下
  
既然向别人请教,还要收费,真是不可思议!!! 
给你简单的看了一下,该程序是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 ] 
 
    
 
  
 |   
 | 
  2008-7-4 13:09 | 
  
 | 
 | 
 
netwinxp 
高级用户
 
    
 
  
  
积分 741 
发帖 366 
注册 2007-7-25 
状态 离线
 | 
『第 10 楼』:
 
 
使用 LLM 解释/回答一下
  
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 ] 
 
    
 
  
 |   
 | 
  2008-7-4 17:22 | 
  
 | 
 | 
 
19951001 
高级用户
 
     流落街头
  
  
积分 570 
发帖 272 
注册 2005-10-17 来自 北京 
状态 离线
 | 
 | 
  2008-9-29 12:39 | 
  
 | 
 | 
 
netwinxp 
高级用户
 
    
 
  
  
积分 741 
发帖 366 
注册 2007-7-25 
状态 离线
 | 
 | 
  2008-9-29 14:11 | 
  
 |