• 3

最小的 執行檔 只需 1 個 Byte

不解,
為啥 最小的 執行檔 只需 1 個 Byte,
而且 能 正常執行 且 正常結束.

原來 MS 偷偷 塞了個 保險,
將 1 個 Byte 偷偷 換成 2 個 Byte,
所以 實際上 應該是,
最小的 執行檔 必須必須必須 是 2 個 Byte.

如果 把 MS 偷偷 塞的 保險 拿掉 就 掛.

PS:
這 指的是 HEX 執行檔 不是不是不是 純腳本(Script) BAT/PS/PY/.....

最小的 執行檔 只需 1 個 Byte

最小的 執行檔 只需 1 個 Byte

最小的 執行檔 只需 1 個 Byte
★★★ "我要留言" 不回, 只回 1 般回文. ★★★
2026-08-03 18:57 發佈
好難懂。你可以寫一些大家看得懂的嗎。

不然你去跟管妹說.....要開一個程式設計區。保證 冷場。

要多冷 有多冷。

阿川 都進階了。 孟川。 開 神魔體,根本就是BUG,外掛.....




賊賊賊。
選舉

他應該是個老頭吧 整個人僵固性重

2026-08-08 10:19
真不知你想表達啥?
1.com從檔案大小和載入記憶體後,的確都只是1個byte,簡單的return,啥事都不幹
什麼MS偷保險?那是com執行檔載入記憶體後的架構,IP從100h,0h的地方是DOS標準的中斷,你把架構破壞後當然回不來....
這種DOS時代的com與debug反組譯不是你這種年輕人能碰的事,別來亂了.
cruiseton

他是 LKK [笑到噴淚]

2026-08-04 8:18
grason00

現在年輕人debug組合語言都沒碰過,我年輕30歲以下同事說他們學更簡單python了,拿一些c++程式他們說不太會,不過本人當年也沒修組合語言我只學java就是了,我非讀資工,組合語言是選修

2026-08-05 6:44
Xantia_L wrote:
好難懂。你可以寫一些大家看得懂的嗎。
不然你去跟管妹說.....要開一個程式設計區。保證 冷場。
要多冷 有多冷。
阿川 都進階了。 孟川。 開 神魔體,根本就是BUG,外掛.....


看 不懂 賊正常.
★★★ "我要留言" 不回, 只回 1 般回文. ★★★
steven591120 wrote:
真不知你想表達啥?
1.com從檔案大小和載入記憶體後,的確都只是1個byte,簡單的return,啥事都不幹
什麼MS偷保險?那是com執行檔載入記憶體後的架構,IP從100h,0h的地方是DOS標準的中斷,你把架構破壞後當然回不來....
這種DOS時代的com與debug反組譯不是你這種年輕人能碰的事,別來亂了.


看來 你 不懂.
★★★ "我要留言" 不回, 只回 1 般回文. ★★★
我用c語言寫一個1+2+...+100這種程式,用最簡單的迴圈做
只有不到10行程式
經compile完後,都不只1byte

或是組合語言效率比C語言好...以前讀書時老師好像有講過
當時我沒修組合語言,只會寫C語言跟Java

IQuit wrote:
看來 你 不懂


其實老實說,我也不會組合語言,那語法代表何作用,我也不知道
我只會寫C++跟Java,因為他們兩個語法接近,我就看的懂
grason00 wrote:
我用c語言寫一個1+2+...+100這種程式,用最簡單的迴圈做
只有不到10行程式
經compile完後,都不只1byte
或是組合語言效率比C語言好...以前讀書時老師好像有講過
當時我沒修組合語言,只會寫C語言跟Java


雖然 可造 畸形 EXE 但 也不可能 是 1 Byte,
撇開 其它 不談,
EXE 最少也要 2 Byte,
我 指的 是 魔法神人 MZ.
★★★ "我要留言" 不回, 只回 1 般回文. ★★★
史上被記錄極小的電腦病毒大小約在 4位元組至35位元組之間,例如歷史上知名的 Crash Pentium Trojan 僅有 4 個位元組,而DOS時代的 Tiny 病毒則為 22 位元組
grason00

Pentium FDIV bug那個太有名了,當年Intel為了它,賠了不少錢,他神奇點是自家前代CPU或對手陣營同級CPU,都沒這個問題

2026-08-04 10:10

短暫玩過APPLE II ( MOS 6502) + ZILOG Z80 add-in card + CP/M

====

為什麼 every DOS 程序開頭都是 CD 20

在 1980 年代初期,CP/M-80 是 8 位元電腦(Intel 8080 / Zilog Z80)的霸主。微軟與西雅圖計算機產品公司(Seattle Computer Products)為了讓開發者願意把 CP/M 上的軟體轉移到 16 位元的 8086 / MS-DOS 上,推出了「自動轉譯工具」(把 8080 組合語言直接機械式轉換成 8086 組合語言)。
為了讓這些轉譯過來的舊程式不用改動核心邏輯、也不會當機,DOS 在程式記憶體的最開頭(PSP,Program Segment Prefix, 256 bytes)複製了 CP/M 的記憶體佈局:

1. 程式結束(Exit)的兼容:

  • CP/M 做法:跳轉到記憶體 0000h 位置(例如 JMP 0000hRET)。
  • DOS 的應對:在 PSP 的 Offset 0000h 放上 CD 20(即 INT 20h)。
  • 結果:轉譯後的 CP/M 程式照舊執行 JMP 0000h 時,CPU 一跳過去就會讀到 CD 20,觸發 INT 20h 中斷,安全的把控制權交還給 DOS,完全不會崩潰。

2. 系統呼叫(API Call)的兼容:

  • CP/M 做法:呼叫 0005h 位置(CALL 0005h)來執行系統功能(BDOS)。
  • DOS 的應對:在 PSP 的 Offset 0005h 放上 9A ...(遠跳轉 CALL FAR 到 DOS 的 API 入口)。
  • 結果:舊程式呼叫 CALL 0005h 時,也能順利呼叫到 DOS 的服務。

CP/M 與 DOS PSP 的記憶體對照表

<thead></thead>
PSP 偏移量 (Offset) CP/M 原始用途 DOS PSP 對應機器碼 / 內容 作用
0000h Warm Boot(重啟/退出程式) CD 20 (INT 20h) 讓舊程式跳回 0000h 時能優雅退出
0002h 記憶體上限 最高可用記憶體段位址 告知程式剩餘記憶體大小
0005h BDOS 系統呼叫入口 9A ... (CALL FAR DOS) 讓舊程式呼叫 0005h 時能執行 DOS 功

所以,每個 DOS 程式(不論是 .COM 還是 .EXE)載入時,DOS 都會在記憶體頭部 256 位元組(PSP)的第 0 個位置固定塞入 CD 20。這就是為什麼你在反組譯或用 DEBUG.EXE 觀察記憶體時,開頭永遠都會看到 CD 20 的原因!
ailaug2 wrote:
史上被記錄極小的電腦病毒大小約在 4位元組至35位元組之間,例如歷史上知名的 Crash Pentium Trojan 僅有 4 個位元組,而DOS時代的 Tiny 病毒則為 22 位元組


我 電腦 還 收藏 有 近 21,500 隻 病毒.
★★★ "我要留言" 不回, 只回 1 般回文. ★★★
  • 3
內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?