willsort
元老会员
Batchinger
积分 4432
发帖 1512
注册 2002-10-18
状态 离线
|
『第
6 楼』:
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:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得! |
|