Re: [問題] 請問為什麼Win和Linux執行檔不能互通?

看板C_and_CPP作者 (嘎嘎嘎嘎嘎)時間12年前 (2013/07/10 02:46), 編輯推噓5(5010)
留言15則, 6人參與, 最新討論串4/4 (看更多)
※ 引述《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

07/10 04:35, , 1F
除非 linux 跟 windows 都是 M$ 的
07/10 04:35, 1F

07/10 04:35, , 2F
讓我想到以前有種 cd player.exe 是把 dos stub 換掉..
07/10 04:35, 2F

07/10 06:01, , 3F
一定有老美想到這個問題 ( ̄ー ̄;) 來去問谷哥
07/10 06:01, 3F

07/10 06:05, , 4F
可是軟軟的東東有專利耶…這又是一個問題了
07/10 06:05, 4F

07/10 08:17, , 5F
elf loader和pe loader都看檔頭的signature, 所以無法
07/10 08:17, 5F

07/10 08:23, , 6F
讓linux看的懂PE header: wine + binfmt
07/10 08:23, 6F

07/10 08:26, , 7F
如果shell script也算是執行檔的話,真的有人把dos stub換掉的
07/10 08:26, 7F

07/10 08:28, , 8F

07/10 10:31, , 9F
執行檔裡面都cpu instruction了 用"翻譯"不太恰當
07/10 10:31, 9F

07/10 10:31, , 10F
^我是說真的拿來"執行"的部份
07/10 10:31, 10F

07/10 10:31, , 11F
segment跟relocation table那種東西其實cpu也不需要知道
07/10 10:31, 11F

07/10 10:32, , 12F
就是 現在都馬flat memory model..
07/10 10:32, 12F

07/10 10:44, , 13F
純DOS+Windows有,在PE結構動手腳,但Linux+Windows真沒
07/10 10:44, 13F

07/10 10:44, , 14F
見過
07/10 10:44, 14F

07/10 17:24, , 15F
看有沒有人要弄一個adapter.....
07/10 17:24, 15F
文章代碼(AID): #1Ht5f_jC (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1Ht5f_jC (C_and_CPP)