※ 引述《FreeF1y.bbs@ptt.cc (ㄝ夫嗄一一ㄝ夫歪)》之銘言:
> ※ 引述《bert.bbs@bbs.csie.ncu.edu.tw (哇哩咧...)》之銘言:
> : TSR 不結束程式的話怎麼能叫做 TSR?
> 可能我不太了解DOS的運作方式吧!?
> 我知道TSR的運作原理是把原本的Interrupt Vector Table取代掉
> 然後再把自己留在記憶體中
> 關於留在記憶體的方法,我查到的資料是說
> DOS裡面有一個指標,負責標示出可用的記憶體的開頭
> 然後每次程式Load進來就從那個位置開始存
> 而TSR常駐記憶體的方法就是把標示可用記憶體的指標往後移
> 使得程式的前半段留在記憶體中
> 這是原始網頁
> http://0rz.net/1c1pJ
> 而我的問題是
> 這樣的機制,為什麼一定要程式結束才能完成?
> 只是移動一個指標而已,應該不用一定要結束程式吧
> 所以我的問題應該是說
> 「有什麼方法可以把程式常駐在記憶體之後不結束的呢?」
> 所以請不要再跟我說因為它叫TSR所以一定要結束..
> 以上
> 如果我的觀念有任何錯誤,還煩請指正
> 這部分我只是個初學者,不好意思
TSR 的東西從 Windows 崛起以後就已經忘的差不多了... 我試著回答看看
TSR 不一定把原本的中斷服務常式 (ISR) 替換掉, 大多是用串接方式以維持
原來的 ISR 可以正常動作, 除了以 AH = 31h, int 21h 結束之外, 還可用
int 20h 結束, 但 int 27h 僅適用於 .com 格式, 而原 po 可能誤以為 AH=31h
int 21h 結束就結束了整個程式了 (是這樣的嗎)
TSR 是讓某些可用的程式留在記憶體中而可隨時 (依需求) 叫用執行, 而在 DOS
的規範下只能允許單工作業, 要如何在一個程式執行下還能呼叫其他程式的功能,
就是 TSR 的作用了, DOS 不比 Windows, 對於多工只能用 TSR 方式模擬出來 (
這樣說也許有些怪怪的), 另外在 DOS 下僅能有小小的 640KB 的主記憶體, 記憶
體的使用可是點點位元都是金啊... 不必要的程式碼用玩了就好收起來了, 不需
佔著記憶體的空間, 所以那些初始化的東西也沒必要在 TSR 活著的時候留下來的
不論是 int 27h 或者 AH=31h, int 21h 都是把要留在記憶體裡有用的程式碼留
下來, 其他的就還給系統吧...
TSR 的那個 T 就是代表著 "終結" (Terminate) 啊, 不結束要作啥? 別把 AH=4Ch,
int 21h 跟 AH=31h, int 21h 搞混了...
有關 TSR 的東西可看看以前的旗標的 TSR 程式設計專題研究/施威銘研究室.徐英傑著
以及 386/486 時代所出的一些軟體保護、破解的書, 或者當時旗標出的病毒徹底研究
的那一本, 應該可以給原 po 解很多疑惑的
以上所述, 僅是憑著印象, 觀念或敘述有錯的話請各位指教
--
◤◥ Origin: 幽谷˙反地球聯邦組織 aeug.twbbs.org
◣◢ Author: hdk 從 202-178-130-150.cm.dynamic.apol.com.tw 發表