ปฏิบัติการได้
การดำเนินการโปรแกรม |
---|
แนวคิดทั่วไป |
ประเภทของโค้ด |
กลยุทธ์การรวบรวมข้อมูล |
รันไทม์ที่น่าสังเกต |
|
คอมไพเลอร์และเครื่องมือที่มีชื่อเสียง |
|

ในวิทยาการคอมพิวเตอร์รหัสที่ปฏิบัติการได้ไฟล์ที่ปฏิบัติการได้หรือโปรแกรมที่ปฏิบัติการได้บางครั้งเรียกสั้นๆ ว่า ไฟล์ที่ปฏิบัติการได้หรือไฟล์แบบไบนารีทำให้คอมพิวเตอร์ "ดำเนินการตามงานที่ระบุตามคำสั่ง ที่เข้ารหัส " [2]ตรงข้ามกับไฟล์ข้อมูลที่ต้องตีความ ( แยกวิเคราะห์ ) โดยโปรแกรมแปลความหมายเพื่อให้ใช้งานได้[3]
การตีความที่แน่นอนขึ้นอยู่กับการใช้งาน โดยทั่วไป "คำสั่ง" จะหมายถึง คำสั่ง โค้ดเครื่องสำหรับซีพียูทาง กายภาพ [4]ในบางบริบท ไฟล์ที่มีคำสั่งสคริปต์ (เช่นไบต์โค้ด ) อาจถือได้ว่าสามารถเรียกทำงานได้
การสร้างไฟล์ปฏิบัติการ
ไฟล์ที่ปฏิบัติการได้สามารถเขียนโค้ดด้วยมือในภาษาเครื่องได้ แม้ว่าจะสะดวกกว่ามากในการพัฒนาซอฟต์แวร์เป็นโค้ดต้นฉบับในภาษาขั้นสูงที่มนุษย์สามารถเข้าใจได้ง่าย ในบางกรณี โค้ดต้นฉบับอาจระบุเป็นภาษาแอสเซมบลีแทน ซึ่งยังคงสามารถอ่านได้โดยมนุษย์ในขณะที่มีความเกี่ยวข้องอย่างใกล้ชิดกับคำสั่งโค้ดเครื่อง
ภาษาขั้นสูงจะถูกคอมไพล์เป็นไฟล์โค้ดเครื่องที่สามารถทำงานได้หรือไฟล์อ็อบเจ กต์โค้ดเครื่องที่ไม่สามารถทำงานได้ กระบวนการเทียบเท่าในโค้ดต้นฉบับของภาษาแอสเซมบลีเรียกว่าแอสเซมบลี ไฟล์อ็อบเจกต์หลายไฟล์เชื่อมโยงกันเพื่อสร้างไฟล์ที่สามารถทำงานได้ ไฟล์อ็อบเจกต์ - ไม่ว่าจะทำงานได้หรือไม่ - มักจะถูกจัดเก็บในรูปแบบคอนเทนเนอร์เช่นExecutable and Linkable Format (ELF) หรือPortable Executable (PE) ซึ่งเป็นรูปแบบเฉพาะของระบบปฏิบัติการ[5]สิ่งนี้จะให้โครงสร้างแก่โค้ดเครื่องที่สร้างขึ้น เช่น การแบ่งโค้ดออกเป็นส่วนๆ เช่น.text (โค้ดที่สามารถทำงานได้) .data (ตัวแปรโกลบอลและแบบคงที่ที่เริ่มต้นแล้ว) และ.rodata (ข้อมูลที่อ่านได้อย่างเดียว เช่น ค่าคงที่และสตริง)
ไฟล์ที่ปฏิบัติการได้โดยทั่วไปจะรวมถึงระบบรันไทม์ ด้วย ซึ่งใช้คุณลักษณะภาษารันไทม์ (เช่นการกำหนดตารางงานการจัดการข้อยกเว้น การเรียกใช้คอนสตรัคเตอร์และดีสทรัคเตอร์แบบคงที่ เป็นต้น) และการโต้ตอบกับระบบปฏิบัติการ โดยเฉพาะอย่างยิ่ง การส่งอาร์กิวเมนต์ สภาพแวดล้อม และการส่งคืนสถานะการออกร่วมกับคุณลักษณะการเริ่มต้นและการปิดระบบอื่นๆ เช่น การปล่อยทรัพยากร เช่นตัวจัดการไฟล์สำหรับ C ทำได้โดยการลิงก์ใน อ็อบเจ็กต์ crt0ซึ่งประกอบด้วยจุดเข้าจริง และตั้งค่าและปิดระบบโดยเรียกใช้ไลบรารีรันไทม์[6]
ไฟล์ที่ปฏิบัติการได้โดยปกติจะมีโค้ดเครื่องเพิ่มเติมที่สำคัญมากกว่าโค้ดที่สร้างโดยตรงจากโค้ดต้นฉบับเฉพาะ ในบางกรณี เป็นการดีที่จะละเว้นส่วนนี้ ตัวอย่างเช่น สำหรับการพัฒนาระบบฝังตัว หรือเพียงเพื่อทำความเข้าใจว่าการคอมไพล์ การเชื่อมโยง และการโหลดทำงานอย่างไร ในภาษา C สามารถทำได้โดยละเว้นรันไทม์ปกติ และระบุสคริปต์ลิงก์เกอร์อย่างชัดเจนแทน ซึ่งจะสร้างจุดเข้าและจัดการการเริ่มระบบและการปิดระบบ เช่น การเรียกmain
เพื่อเริ่มระบบและส่งกลับสถานะการออกไปยังเคอร์เนลในตอนท้าย[7]
การดำเนินการ
เพื่อให้ระบบสามารถดำเนินการได้ (เช่นระบบปฏิบัติการเฟิร์มแวร์ [ จำเป็นต้องอ้างอิง ]หรือตัวโหลดบูต ) ไฟล์ปฏิบัติการจะต้องสอดคล้องกับอินเทอร์เฟซไบนารีแอปพลิเคชัน (ABI) ของระบบ ในอินเทอร์เฟซที่เรียบง่าย ไฟล์จะถูกดำเนินการโดยโหลดลงในหน่วยความจำและข้ามไปยังจุดเริ่มต้นของพื้นที่ที่อยู่และดำเนินการจากที่นั่น[8]ในอินเทอร์เฟซที่ซับซ้อนกว่านั้น ไฟล์ปฏิบัติการจะมีข้อมูลเมตาเพิ่มเติมซึ่งระบุจุดเข้า แยกต่างหาก ตัวอย่างเช่น ใน ELF จุดเข้าจะถูกกำหนดในe_entry
ฟิลด์ของส่วนหัว ซึ่งระบุที่อยู่หน่วยความจำ (เสมือน) ที่จะเริ่มต้นการดำเนินการ[9]ในGNU Compiler Collectionฟิลด์นี้จะถูกตั้งค่าโดยตัวเชื่อมตาม_start
สัญลักษณ์[10]
ดูเพิ่มเติม
อ้างอิง
- ↑ เซโลวี, พอล (2002) ตำราอาหาร FreeBSD แบบฝังเอลส์เวียร์ . หน้า 108, 187–188. ไอเอสบีเอ็น 1-5899-5004-6. ดึงข้อมูลเมื่อ2022-03-06 .
- ^ "executable". พจนานุกรมออนไลน์ของ Merriam-Webster . Merriam-Webster . สืบค้นเมื่อ2008-07-19 .
- ^ Mueller, John Paul (2007). การบริหารระบบ Windows ที่บรรทัดคำสั่งสำหรับ Windows Vista, Windows 2003, Windows XP และ Windows 2000. John Wiley & Sons . หน้า 24. ISBN 978-0-470-04616-6. ดึงข้อมูลเมื่อ2023-03-06 .
- ^ "คำแนะนำเครื่อง" GeeksforGeeks . 2015-11-03 . สืบค้นเมื่อ2019-09-18 .
- ^ "บทที่ 4: ไฟล์อ็อบเจ็กต์". refspecs.linuxbase.org . สืบค้นเมื่อ2019-09-18 .
- ^ Fisher, Tim. "รายชื่อนามสกุลไฟล์ปฏิบัติการ". lifewire.com . สืบค้นเมื่อ2019-09-18 .
- ^ แมคเคลลาร์, เจสสิก้า (16 มีนาคม 2553). "สวัสดีจากโลกที่ปราศจาก libc! (ตอนที่ 1)"
- ^ สมิธ, เจมส์ อี. ; แนร์, ราวี (16 พ.ค. 2548). "สถาปัตยกรรมของเครื่องเสมือน" คอมพิวเตอร์ . 38 (5): 33–34. doi :10.1109/MC.2005.173
- ^ Rusling, David A. (1999). "บทที่ 4 – กระบวนการ". Linux Kernel . sec. 4.8.1 – ELF . สืบค้นเมื่อ2023-03-06 .
- ^ Page, Daniel (2009). A Practical Introduction to Computer Architecture. Springer Science+Business Mediaหน้า 415–416 ISBN 978-1-84882-255-9. ดึงข้อมูลเมื่อ2023-03-06 .
ลิงค์ภายนอก
- รูปแบบไฟล์ EXE คืออะไร