作者xxxx9659 (嘎嘎嘎嘎嘎)
看板C_and_CPP
標題Re: [問題] 請問為什麼Win和Linux執行檔不能互通?
時間Wed Jul 10 02:46:21 2013
※ 引述《pluseus (回憶真美麗)》之銘言:
: 問題(Question):
: 抱歉問一個蠢問題
: 請問為什麼在Windows OS下compile過後的執行檔(.exe)
: 拿到「同一台」機器下的Linux OS,為什麼不能執行?
: 而要在Linux下source code重新compile才能使用
: 我會有這個問題
: 是因為我的理解是,source code經過compile過後
: 就變成for某種cpu的機器碼了(例如x86機器碼)
: 而Windows OS和Linux OS,因為是同一台機器,假如也都是使用相同的x86機器碼
: 但是為什麼執行檔在不同OS不能互通呢?
: 謝謝! ^^
執行檔 <---> OS <---> CPU
OS 只是個中間人 把執行檔的內容翻譯給 CPU 去跑
如果執行檔寫沒針對當下 OS 去寫,OS 看不懂,不能執行
如果執行檔不是針對當下機器去寫,OS看懂但 CPU 看不懂,也是不能執行
我的理解是這樣,有錯還請指正
借這個討論串問一下
既然同一份執行檔,不能在相異 OS 下跑 那可不可以把兩份執行檔合併一個檔案?
大家有看過一個檔案 又是壓縮檔又是圖片?
因為壓縮檔是從檔案後面開始解讀,圖片是從檔案前面開始讀取
所以我可以 copy /b 圖片.jpg + 壓縮檔.zip 複合物.jpg
用這個概念設計一個 copy /b win.exe + a.out 複合物.exe
因為 Windows 比較難搞所以 win.exe 擺前面,這樣這個複合物在 Windows 應該可以跑
那有沒有什麼特殊的技巧 可以讓 Linux 也看的懂這複合物
進而達到一個執行檔可以在 Windows 又可在 Linux 下跑的目的?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.47.71.122
推 Slither:除非 linux 跟 windows 都是 M$ 的 07/10 04:35
→ Slither:讓我想到以前有種 cd player.exe 是把 dos stub 換掉.. 07/10 04:35
推 johnhmj:一定有老美想到這個問題 ( ̄ー ̄;) 來去問谷哥 07/10 06:01
→ johnhmj:可是軟軟的東東有專利耶…這又是一個問題了 07/10 06:05
→ kdjf:elf loader和pe loader都看檔頭的signature, 所以無法 07/10 08:17
→ kdjf:讓linux看的懂PE header: wine + binfmt 07/10 08:23
推 kdjf:如果shell script也算是執行檔的話,真的有人把dos stub換掉的 07/10 08:26
→ purincess:執行檔裡面都cpu instruction了 用"翻譯"不太恰當 07/10 10:31
→ purincess:^我是說真的拿來"執行"的部份 07/10 10:31
→ purincess:segment跟relocation table那種東西其實cpu也不需要知道 07/10 10:31
→ purincess:就是 現在都馬flat memory model.. 07/10 10:32
推 kikiqqp:純DOS+Windows有,在PE結構動手腳,但Linux+Windows真沒 07/10 10:44
→ kikiqqp:見過 07/10 10:44
推 lairrol:看有沒有人要弄一個adapter..... 07/10 17:24