คำถามติดแท็ก machine-code

9
ทรัพยากรในการเรียนรู้การเขียนโปรแกรมในรหัสเครื่อง? [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการถกเถียงอภิปรายโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา ฉันเป็นนักเรียนสดใหม่ในการเขียนโปรแกรมและรักมันจาก Java ไปยัง C ++ และลงไปที่ C ฉันย้ายกลับไปที่แบร์โบนและคิดว่าจะลงไปที่ Assembly ต่อไป แต่ฉันประหลาดใจที่คนจำนวนมากบอกว่ามันไม่เป็นอย่างที่ C และมีการใช้งานไม่มี พวกเขาบอกการเรียนรู้ทั้งวิธีการเขียนโปรแกรมเคอร์เนลหรือเขียนคอมไพเลอร์ C ความฝันของผมคือการเรียนรู้ในการเขียนโปรแกรมในไบนารี (รหัสเครื่อง) หรืออาจจะเขียนโปรแกรมโลหะเปลือย (โปรแกรมไมโครคอนโทรลเลอร์ร่างกาย) หรือการเขียนประวัติหรือตักบูตหรือสิ่งที่มีลักษณะที่ สิ่งที่เป็นไปได้เพียง แต่ผมได้ยินมาหลังจากการวิจัยมากเป็นที่แก้ไข hex เป็นสิ่งที่ใกล้เคียงกับภาษาเครื่องที่ฉันสามารถหาในยุคนี้และยุค มีสิ่งอื่นที่ฉันไม่รู้หรือไม่ มีแหล่งข้อมูลเพื่อเรียนรู้การเขียนโปรแกรมในรหัสเครื่องหรือไม่? โดยเฉพาะอย่างยิ่งใน 8 บิตไมโครคอนโทรลเลอร์ / ไมโครโปรเซสเซอร์ นี้คำถามคือคล้ายกับระเบิด แต่ฉันสนใจในการเรียนรู้การปฏิบัติก่อนแล้วจึงทำความเข้าใจทฤษฎี

4
เหตุใดรหัสเครื่องดั้งเดิมจึงไม่สามารถถอดรหัสได้อย่างง่ายดาย
ด้วยภาษาที่ใช้เครื่องเสมือนของ bytecode เช่น Java, VB.NET, C #, ActionScript 3.0 เป็นต้นบางครั้งคุณได้ยินเกี่ยวกับความง่ายในการดาวน์โหลดตัวแยกข้อมูลออกจากอินเทอร์เน็ตเรียกใช้ bytecode ในช่วงเวลาที่ดีและ บ่อยครั้งเกิดขึ้นกับสิ่งที่ไม่ไกลจากซอร์สโค้ดต้นฉบับในไม่กี่วินาที สมมุติว่าภาษาแบบนี้มีความเสี่ยงเป็นพิเศษ ฉันเพิ่งเริ่มสงสัยว่าทำไมคุณไม่ได้ยินเพิ่มเติมเกี่ยวกับเรื่องนี้เกี่ยวกับรหัสไบนารี่พื้นเมืองเมื่ออย่างน้อยคุณก็รู้ว่าภาษานั้นถูกเขียนเป็นภาษาดั้งเดิม (และภาษาใดที่จะพยายามถอดรหัส) เป็นเวลานานฉันคิดว่ามันเป็นเพียงเพราะภาษาเครื่องพื้นเมืองบ้าคลั่งมากและซับซ้อนกว่า bytecode ทั่วไป แต่โค้ดไบต์มีลักษณะอย่างไร ดูเหมือนว่านี้: 1000: 2A 40 F0 14 1001: 2A 50 F1 27 1002: 4F 00 F0 F1 1003: C9 00 00 F2 และรหัสเครื่องดั้งเดิมมีลักษณะอย่างไร (เป็นเลขฐานสิบหก) แน่นอนมันมีลักษณะเช่นนี้: 1000: 2A 40 F0 14 1001: …

3
ทำไมไฟล์ที่เรียกใช้งานจึงขึ้นอยู่กับระบบปฏิบัติการ แต่ไม่ได้ใช้กับซีพียู
ถ้าฉันเขียนโปรแกรม C และคอมไพล์มันลงใน.exeไฟล์ไฟล์นั้น.exeจะมีคำสั่งเครื่องดิบไปยัง CPU (ฉันคิด). ถ้าเป็นเช่นนั้นจะเป็นไปได้อย่างไรที่ฉันจะเรียกใช้ไฟล์ที่คอมไพล์ในคอมพิวเตอร์เครื่องใดก็ได้ที่ใช้ Windows รุ่นทันสมัย CPU แต่ละตระกูลมีชุดคำสั่งต่างกัน ดังนั้นคอมพิวเตอร์เครื่องใดที่ใช้ระบบปฏิบัติการที่เหมาะสมสามารถเข้าใจคำแนะนำใน.exeไฟล์ของฉันได้อย่างไรไม่ว่าจะเป็น CPU จริงหรือไม่ นอกจากนี้บ่อยครั้งในเว็บไซต์ในหน้า "ดาวน์โหลด" ของแอพพลิเคชั่นบางตัวคุณมีการดาวน์โหลดสำหรับ Windows สำหรับ Linux และสำหรับ Mac (มักดาวน์โหลดสองครั้งสำหรับแต่ละระบบปฏิบัติการสำหรับคอมพิวเตอร์ 86 และ 64 บิต) เหตุใดจึงไม่มีการดาวน์โหลดเพิ่มเติมจำนวนมากสำหรับซีพียูแต่ละตระกูล

4
ซอฟต์แวร์สำหรับเครื่องเช่น ATM หรือ TV สร้างขึ้นอย่างไร
ในฐานะโปรแกรมเมอร์มือใหม่ฉันได้ทำงานกับแอพพลิเคชั่นบนพื้นฐานการเขียนโปรแกรมคอมพิวเตอร์เท่านั้น แต่มีคำถามมาที่หัวบ่อยๆตั้งแต่ฉันเริ่มเขียนโปรแกรมและไม่สามารถตอบคำถามได้อย่างถูกต้อง เครื่องจักรไม่ทำงานด้วยตัวเองนั่นเป็นหน้าที่ของโปรแกรมเมอร์เขาบอกว่าจะทำอย่างไรและเมื่อใดที่จะทำ แต่ความอยากรู้ของฉันอยู่ใต้คอมพิวเตอร์ ฉันจะนำตัวอย่างของซอฟต์แวร์ ATM ในโพสต์นี้ แต่จำไว้ว่ามีคนอื่นอีกหลายคนเช่นจอแสดงผลเครื่องซักผ้าหรือโทรทัศน์โทรศัพท์มือถือคุณตั้งชื่อมัน ซอฟต์แวร์สำหรับเครื่องจักรประเภทนี้สร้างขึ้นมาได้อย่างไร? ฉันคิดว่ามันไม่เหมือนการเขียนโปรแกรมคอมพิวเตอร์ พวกเขาใช้ภาษาอะไรเพื่อทำให้งานดังกล่าวทำงานได้อย่างไร โปรแกรมเมอร์มีความเชี่ยวชาญในการเขียนโปรแกรมประเภทนี้หรือไม่? กระบวนการทำให้เครื่องจักรเหล่านี้มีชีวิตขึ้นมาได้อย่างไร?

6
“ เขียนแอสเซมเบลอร์เป็น C” ทำไมต้องเขียนโปรแกรมแปลรหัสเครื่องสำหรับภาษาระดับต่ำในภาษาระดับสูงกว่า
ผู้สอนคลาสไมโครโปรเซสเซอร์ของฉันให้การบ้านและบอกว่า: "เขียนแอสเซมเบลอร์เป็น C" - ศาสตราจารย์ที่รักของฉัน ดังนั้นมันดูไร้เหตุผลสำหรับฉันเล็กน้อย ถ้าฉันไม่ผิดภาษาแอสเซมบลีเป็นขั้นตอนแรกจากรหัสเครื่องไปยังการเดินทางของภาษาระดับสูงกว่า ฉันหมายถึง C เป็นภาษาระดับสูงกว่าการชุมนุม แล้วประเด็นของการเขียน Assembler ใน C คืออะไร? สิ่งที่พวกเขาทำในอดีตในขณะที่ไม่มีภาษา C? พวกเขากำลังเขียน Assembler ในรหัสเครื่องหรือไม่? ฉันไม่ควรเขียนตัวแปลรหัสเครื่องสำหรับภาษาระดับต่ำในภาษาระดับสูงกว่านี้ สมมติว่าเราได้สร้างสถาปัตยกรรมไมโครโปรเซสเซอร์ใหม่ที่ไม่มีแม้แต่คอมไพเลอร์ C สำหรับสถาปัตยกรรมนั้น ผู้ประกอบของเราที่เขียนใน C จะสามารถจำลองสถาปัตยกรรมใหม่ได้หรือไม่? ฉันหมายความว่ามันจะไร้ประโยชน์หรือไม่? ฉันรู้ได้อย่างไรว่า GNU Assembler และ Netwide Assembler เขียนด้วยภาษาซีฉันยังสงสัยว่าทำไมพวกเขาถึงเขียนเป็น C สุดท้ายนี้คือตัวอย่างซอร์สโค้ดสำหรับแอสเซมเบลอร์ที่อาจารย์ของเรามอบให้เรา: // to compile, gcc assembler.c -o assembler // No error check is provided. …


1
รหัสเครื่อง JIT และบิต Execution Disable
รหัสเครื่องที่สร้างจากรันไทม์เป็นอย่างไร (เช่นผลลัพธ์ของ JIT) ซึ่งดำเนินการโดย CPU จริง ๆ ถ้า CPU / OS มีบิต Execution Disable? เท่าที่ฉันทราบตัวประมวลผลและระบบปฏิบัติการที่ทันสมัยหลายตัวรวมถึงการสนับสนุน NX บิต (รวมถึง Intel และ ARM) ซึ่งป้องกันรหัสเครื่องที่เก็บไว้ที่อยู่อื่นนอกเหนือจากส่วนรหัสของไบนารีที่รวบรวมจากการถูกประมวลผล เห็นได้ชัดว่านี่เป็นข้อได้เปรียบด้านความปลอดภัยที่ดีเพราะมันป้องกันการโจมตีการฉีดรหัสเชลล์ แต่เครื่องยนต์ของ JIT เช่น LLVM ซึ่งสร้างรหัสเครื่องจักรแบบไดนามิกได้รับสิ่งนี้ได้อย่างไร
10 machine-code  jit  llvm 

5
นักแปลคอมไพเลอร์จำเป็นต้องเข้าใจรหัสเครื่องจริงหรือไม่? [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา อาจเป็นคำถามแปลก ๆ ผู้ชายกำลังเขียนคอมไพเลอร์ C ++ (หรือภาษาที่ไม่ใช่ VM): เขาจำเป็นต้องสามารถอ่าน / เขียนภาษาเครื่องดิบได้หรือไม่? มันทำงานอย่างไร แก้ไข: ฉันหมายถึงเฉพาะผู้แปลที่รวบรวมรหัสเครื่องไม่ใช่ภาษาการเขียนโปรแกรมอื่น
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.