精華區beta CSSE 關於我們 聯絡資訊
※ 引述《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: [email protected] 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
haryewkun:推。 04/09 05:02
ykjiang:推 04/09 06:29
wlsabcd:好文,能否借轉 04/09 13:04
dsewnr:推 04/10 08:43
joshux:推 04/10 18:23
antoniee:好強... 05/11 16:59