Linux กำหนดสิ่งอำนวยความสะดวกในการใช้งานเพื่อเรียกใช้ไบนารี (ที่ไม่ใช่ข้อความ) ได้อย่างไร


23

ฉันเข้าใจว่า Linux ใช้บรรทัด shebang เพื่อพิจารณาว่าล่ามอะไรที่จะใช้สำหรับภาษาสคริปต์ แต่มันทำงานกับไบนารีได้อย่างไร

ฉันหมายถึงฉันสามารถเรียกใช้ไบนารีลินุกซ์และมีการติดตั้งทั้งไวน์และขาวดำ , Windows พื้นเมืองและ. NET ไบนารี และสำหรับพวกเขาทั้งหมดมันเป็นเพียงแค่./binary-name(ถ้าไม่ได้อยู่ใน PATH) เพื่อเรียกใช้

Linux ตรวจสอบได้อย่างไรว่าไบนารีที่กำหนดต้องทำงานเป็นไบนารีเนทิฟ Linux, เป็นไบนารีเนทีฟ Windows (โดยใช้เครื่องอำนวยความสะดวกด้านไวน์ ) หรือเป็นไบนารี Windows .NET (โดยใช้เครื่องอำนวยความสะดวกแบบโมโน )

คำตอบ:


29

ในคำ: binfmt_misc มันเป็นอุปกรณ์อำนวยความสะดวกสำหรับใช้งานกับ Linux โดยเฉพาะ

มีสองรูปแบบที่เคอร์เนลรู้จักพร้อมตรรกะในตัว คือรูปแบบของเอลฟ์ (สำหรับไบนารีปกติ) และแบบแผน shebang (สำหรับสคริปต์) (ขอบคุณzwolสำหรับส่วนต่อไปของคำตอบ) นอกจากนี้ Linux รู้จักสองรูปแบบลึกลับหรือล้าสมัยหรือเข้ากันได้ในรูปแบบ คุณอาจจะไม่เจอพวกเขา พวกเขาคือa.out"em86", "flat" และ "elf_fdpic"

ทุกอย่างอื่นจะต้องลงทะเบียนผ่านระบบ binfmt_misc ระบบนี้ช่วยให้คุณสามารถลงทะเบียนกับเคอร์เนลตรวจสอบรูปแบบง่าย ๆ ตามหมายเลขเวทย์มนตร์และล่ามที่เกี่ยวข้อง


6
ถึงแม้ว่า OP จะขอลีนุกซ์อย่างชัดเจน แต่มันก็คุ้มค่าที่จะสังเกตว่าไม่เหมือนกับโซลูชั่นอื่น ๆ ที่ทำงานได้ทั้งบน Linux และระบบ Unix ที่คล้ายกัน แต่อันนี้เฉพาะ Linux ทั้งหมด
cubuspl42

6
มันอาจจะไม่ได้รับการคอมไพล์ แต่ทรีของซอร์ส Linux ยังคงมีการรองรับภายในa.out, "em86", "flat" และ "elf_fdpic" รูปแบบรวมถึง ELF ปกติ ทั้งหมดเหล่านั้นยกเว้น em86 ดูเหมือนจะเป็นรูปแบบไบนารีปฏิบัติการดั้งเดิม มีข้อมูลไม่เพียงพอที่ฉันจะคิดออกเมื่อใครจะใช้ "แบน" หรือ "elf_fdpic" em86 นั้นดูเหมือนจะเป็นกลไก pre-binfmt_misc สำหรับการทำงานกับตัวจำลอง x86 โดยเฉพาะมันอาจจะยังคงอยู่เพียงรอบ ๆ สำหรับความเข้ากันได้แบบย้อนหลัง
zwol

2
ใน Debian Linux (ผมไม่ได้ตรวจสอบ RedHat และอื่น ๆ ) คำสั่งเพื่อแสดงรายการ binfmt ทั้งหมดในปัจจุบันคือupdate-binfmts --display
จุดหมาย
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.