| willsort 元老会员
 
          Batchinger
 
 
 积分 4432
 发帖 1512
 注册 2002-10-18
 状态 离线
 | 
| 『第 6 楼』:
 
 
使用 LLM 解释/回答一下 
 
 
Re Wengier: 
      不知道你现在还对此问题有兴趣否?找到了一些资料,如下:
 
链接:http://bbs.ee.ntu.edu.tw/boards/Programming/13/12.html 
 ◇ Device driver 和 .EXE 合用法
 --------------------------------------------------------------------------------
 -------------------------------------------------------------------------
 NCTU-CIS BBS `programming' 版  精華區
 
 ■■■ Device driver 和 .EXE 合用法 ■■■
 -------------------------------------------- 整理:william@cis_nctu -----
 -------------------------------------------------------------------------
 
 發信人: elite.bbs@bbs.mgt.ncu ( ), 信區: programming
 標  題: 問: Device Driver 是否可用 .EXE ???
 發信站: 中央資管龍貓資訊天地 (Fri Jul 29 16:23:35 1994)
 轉信站: cis_nctu!news.cis.nctu!news.cc.nctu!news.csie.nctu!bbsroute!ncubbsrout
 
 不曉得各位有沒有發現,在 Config.sys 裡 load 的 EMM386.EXE 副檔名是 .EXE 的,
 而不是 .SYS,請問是如何做到的?我用一般的 .EXE 去載入會當掉。
 而且 EMM386.EXE 也可以執行。為什麼呢?
 ==============================================================================
 
 發信人: cschen@shts.seed.net.tw (Chih4-Shen1 Chen2), 信區: programming
 發信站: TSD, III (Fri Jul 29 17:05:16 1994)
 
 你所指的是所謂 installable device driver. 像這種檔案有一定的
 format (好久前寫的, 詳細忘了, 要查書. 8^P), 和什麼檔名沒有關係.
 有 .EXE 檔的檔頭, 又符合 device driver 的格式, 就兩種用法都可以了.
 =============================================================================
 
 發信人: steven@cis_nctu (*** Birdy ***), 信區: programming
 發信站: 交大資科_BBS (Jul 29 21:03:07 1994)
 
 > I don't think you can RUN a normal DOS installable device driver.
 > Another question: do DOS/V and MS-DOS use the same installable device
 > driver format?
 
 那檔案有兩個 entry point.. 就是這樣而已....
 有本 device driver 實務裡就有提到....
 =============================================================================
 
 發信人: william@cis_nctu (OO/Win/Asm Master), 信區: programming
 發信站: 交大資科_BBS (Jul 29 22:45:46 1994)
 
 一兩年前為了替我寫的硬碟鎖加個這樣的功能, 曾用 Sourcer 反組譯 EMM386.exe
 來看 (怕一般的電腦書籍太舊, 無法提供這個技巧) , 就把這招學會了, 試用結果
 也很正常, 可放到 config.sys 中用 device= 或 DeviceHigh= 來啟動, 而想 debug
 時就由 command line 來載入, 十分方便。
 
 大致架構如下:
 
 ┌─────────────┐
 │   Device Driver header   │
 ├─────────────┤
 │   Device Driver codes    │
 ├─────────────┤
 │main:                     │
 │   EXE codes              │
 │   ...                    │
 │   ...                    │
 │   END main               │
 └─────────────┘
 
 這樣一來, 用 device= 來載入就會看到前兩個區塊而處理之, 而在 command line 中
 載入則會以 main: 後面這一段為進入點。
 ==============================================================================
 
 發信人: PowerCC.bbs@bbs.ntu (咆蛙俊), 信區: programming
 發信站: 台大電算中心 BBS (Mon Aug  1 16:39:18 1994)
 
 Yeah, it sounds good, but, but... I remember that *.SYS files must define its
 header relative to an ABSOLUTE offset. Doesn't the *.EXE segments and headers
 (PSPs) mess up the offsets required by Microsoft?
 
 I'll go try it, anyway. Sounds interesting.
 ==============================================================================
 
 發信人: elite.bbs@bbs.mgt.ncu ( ), 信區: programming
 發信站: 中央資管龍貓資訊天地 (Mon Aug  1 20:27:35 1994)
 
 ==> 發信人: kuli.bbs@csie.nctu (ku li), 信區: Program
 > exe 載入是從 seg:0 放起, psp 是 exec 才會造出來, 用 device 掛好像不會,
 > 而 exe head 並不會載入記憶體
 
 exe 載入不一定由 seg:0 開始,IP 可在任意位置。
 有一個問題再問:不會載入 Header,那可用 call far 或 jmp far 嗎?
 ==============================================================================
 
 發信人: william@cis_nctu (OO/Win/Asm Master), 信區: programming
 發信站: 交大資科_BBS (Aug  1 22:52:29 1994)
 
 > Yeah, it sounds good, but, but... I remember that *.SYS files must define
 > its header relative to an ABSOLUTE offset. Doesn't the *.EXE segments and
 > headers (PSPs) mess up the offsets required by Microsoft?
 
 .EXE 的檔案有個檔頭, 但是若是用 device= 載入時, DOS 會自動先跳過那一段
 EXE header, 而直接處理 SYS header 的部份。看樣子 DOS會先檢查副檔名, 若
 是 SYS就直接處理, 若是 EXE 就先跳過 EXE 檔頭...
 
 我本來也沒想到這一招, 是反組譯 EMM386.exe 後才推測出來的, 不知何時 M$
 搞出這一個手法的 (誰有興趣考古的? 或是哪本書上有提? ) 。
 
 至於用 device= 載入的程式, 用 debug 觀察的結果, 在記憶體中沒有 PSP,
 而且只有一份 MCB 而已, 該 MCB 是以 `D' 開頭。這些都是和 EXE 型式不同
 之處。
 
 
 
 
 
 
 |  
                  |  ※ Batchinger 致 Bat Fans:请访问 批处理编程的异类 ,欢迎交流与共享批处理编程心得!
 |  |