Re: [問題] linux正常情況為何不能執行exe檔

看板CSSE (電腦科學及軟體工程)作者 ( )時間17年前 (2007/04/09 04:00), 編輯推噓6(600)
留言6則, 6人參與, 最新討論串5/5 (看更多)
※ 引述《final01 (牛頓運動定律)》之銘言: : 是compiler.libc.linker-editor .program loader : 哪一個階段使他不能執行呢? : 應該是LINKER就會有差別了吧? : WINDOWS的Libc應該跟LINUX一樣吧?或是有些許差別? : 這裡的LIBC應該就是GLIBC吧? : 這問題想很久了~謝謝指教 binary 跟 executable file 的差別就是在於, executable file 是 binary 外面包覆了一些 header 之類的東西, 這種東西通常是給 loader 看的, 而這種東西一般是由 assembler 和 linker 來包上去, 不能互相執行的一大原因就是這個。 至於 C library 的後端都會接到 system call 去, system call 後端又會接到 software interrupt 上, 而每家 OS 都可以依自己高興來處理各種不同的 software interrupt, 像是某某編號的 software interrupt 發生時, 某某 register 裡面的值是多少時要幹嘛幹嘛, 這些都看 OS 設計者高興, 所以就算你把 executable file 裡的 binary 抽出來, 包成其它 OS 支援的 executable file, 你還是不見得可以 run, 更何況各家 OS 的 system call 連名字本身就不太一樣了, 有的 OS 提供一卡車的 system call (或再在上面包一層 API), 有的 OS 提供了數量相對稀少的 system call, 而一般這些 system call 還是實作在 C library 裡面, 像是 open()、close() 等等, 在這裡面發出 software interrupt 之前的準備動作, 也會因 OS 不同而相異 (一般都由 asm 或 inline asm 撰寫), 這也是一個很大的原因。 -- Name: Tseng, Ling-hua E-mail Address: uranus@it.muds.net School: National Tsing Hua University Department: Computer Science Interesting: C++, Compiler, PL/PD, OS, VM, Large-scale software design Researching: Software pipelining for VLIW architectures Homepage: https://it.muds.net/~uranus -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.230.216.206

04/09 05:02, , 1F
推。
04/09 05:02, 1F

04/09 06:29, , 2F
04/09 06:29, 2F

04/09 13:04, , 3F
好文,能否借轉
04/09 13:04, 3F

04/10 08:43, , 4F
04/10 08:43, 4F

04/10 18:23, , 5F
04/10 18:23, 5F

05/11 16:59, , 6F
好強...
05/11 16:59, 6F
文章代碼(AID): #166KdfdP (CSSE)
文章代碼(AID): #166KdfdP (CSSE)