看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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
kdjf: http://tinyurl.com/co86wvu 07/10 08:28
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