นี่เป็นคำถามที่น่าสนใจมาก มีคำแนะนำนับล้านชุด แต่มีเพียงไม่กี่คำที่ใช้กันมาก
สิ่งแรกที่ฉันจะดูคือที่มาและการใช้งานที่ตั้งใจไว้ หากคุณสงสัยว่าได้รับการออกแบบในสหรัฐอเมริกาคุณจะต้องกำหนดเป้าหมายให้กับโปรเซสเซอร์ด้วยเอกสารข้อมูลเป็นภาษาอังกฤษเป็นหลัก หากได้รับการออกแบบในเอเชียแสดงว่ามีโปรเซสเซอร์จำนวนมากที่ใช้สำหรับอุปกรณ์การผลิตจำนวนมากที่วิศวกรของสหรัฐอเมริกาไม่ค่อยเห็น แม้แต่ยุโรปก็มีโปรเซสเซอร์บางตัวที่พบได้ทั่วไปมากกว่าโปรเซสเซอร์อื่น ๆ
จากนั้นฉันจะดูขนาดรหัสและฟังก์ชั่น (สมมติว่าคุณรู้ว่าโค้ดทำหน้าที่อะไรในระดับหนึ่ง) หากเป็นโค้ดขนาดไม่กี่เมกะไบต์คุณสามารถลดราคาโปรเซสเซอร์ 8 บิตที่ฝังอยู่ส่วนใหญ่แล้วเริ่มดูอุปกรณ์ขนาดใหญ่ที่มีหน่วยความจำภายนอก ถ้าเป็นไม่กี่กิโลไบต์หรือน้อยกว่านั้นคุณควรต้องการเน้นที่อุปกรณ์ที่เล็กกว่าและราคาถูกกว่าแทน ถ้าฟังก์ชั่นนั้นง่ายมันอาจจะเป็นรหัสสำหรับโปรเซสเซอร์สี่บิต
ณ จุดนี้มันคุ้มค่าที่จะดูโครงสร้างหน่วยความจำ น่าจะเป็นส่วนโปรแกรมและส่วนข้อมูลอย่างน้อยที่สุด หากเป็นไฟล์ไบนารี่ (เทียบกับ intel hex หรือ motorola s record) คุณจะมีความเข้าใจเล็กน้อยว่าหน่วยความจำบางส่วนของข้อมูลถูกวางไว้ที่ใด ตัวแก้ไขฐานสิบหกอาจแสดงรูปแบบบางอย่าง ถ้ามันมาในรูปแบบเลขฐานสิบหกหรือ s คุณอาจมีข้อมูลเพิ่มเติมเกี่ยวกับโครงสร้างหน่วยความจำของโปรเซสเซอร์ที่มีไว้สำหรับ โปรเซสเซอร์บางตัวรีเซ็ตที่ตำแหน่งหน่วยความจำของโปรแกรม 0 ซึ่งบางตัวจะอยู่ที่ตำแหน่งหน่วยความจำสูงสุด โปรแกรมอาจรวมถึงค่าเริ่มต้น EEPROM ในตำแหน่งหน่วยความจำแยกต่างหาก ถ้ามันมีไว้สำหรับตัวประมวลผลที่ปลอดภัย (ที่ใช้ในการธนาคาร) ก็อาจมีคีย์ความปลอดภัยสำหรับตำแหน่งหน่วยความจำคี่
คุณอาจมีข้อมูลเพิ่มเติมบางอย่างทั้งนี้ขึ้นอยู่กับภาษาที่ตั้งโปรแกรมไว้ ถ้ามันถูกโปรแกรมในภาษา C หรือภาษาขั้นตอนที่คล้ายกันฟังก์ชั่นจะเริ่มต้นด้วยลำดับของคำสั่งเพื่อบันทึกการลงทะเบียนในสแต็ก (จำนวนมากจากการกด) จากนั้นก็จะถูกต้องก่อนที่จะกลับมาจำนวนมาก . หากคุณสามารถจดจำรูปแบบได้คุณจะพบลำดับเหล่านี้จำนวนมากตลอดและอาจสามารถกำหนดได้ว่าคำแนะนำแบบใดที่น่าจะเป็นคำแนะนำแบบพุช / ป๊อปผลตอบแทน ฯลฯ ซึ่งอาจทำให้ตัวเลือกของคุณแคบลง
ถ้ามันเป็นอุปกรณ์ฝังตัวที่มีการขัดจังหวะมันอาจจะมีตารางเวกเตอร์ขัดจังหวะซึ่งจะดูเหมือนกระโดดข้ามไปยังตำแหน่งหน่วยความจำที่แตกต่างกันทั้งหมดในบล็อกขนาดใหญ่อาจจะอยู่ในตำแหน่งที่สะดวก (เช่น 0x ??? 0) . ตารางกระโดดถูกใช้ในที่อื่นเพื่อทำสิ่งอื่น ๆ เช่นกัน แต่ถ้าคุณสามารถหาลำดับของคำสั่งที่มีลักษณะเหมือนกันยกเว้นที่อยู่ที่จะข้ามไปคุณอาจสามารถสรุปได้ว่าคำสั่งการกระโดดมีลักษณะอย่างไรและแคบลงอีกครั้ง ตัวเลือกของคุณลง
ณ จุดนี้ฉันจะเริ่มต้นด้วยสถาปัตยกรรมโพรเซสเซอร์ทั่วไปและดูว่ามีอะไรที่เกี่ยวข้องหรือไม่ x86, แขน, mips, 8051, avr, pic, powerpc, Z80, 68k, 6502 ฯลฯ ฯลฯ มีรายการของตัวประมวลผลทั่วไปและชุดคำสั่ง - อย่างน้อยในโลกที่พูดภาษาอังกฤษ - ที่อาจพิสูจน์ได้ว่ามีประโยชน์
ฉันไม่ได้ตระหนักถึงเครื่องมืออัตโนมัติใด ๆ ที่จะช่วยในเรื่องนี้ แต่ MAME เลียนแบบสถาปัตยกรรมโปรเซสเซอร์จำนวนมากและวิธีหนึ่งที่เป็นไปได้คือการเรียกใช้รหัสผ่านโปรเซสเซอร์จำนวนมากและดูการลงทะเบียนเพื่อดูว่ามีอะไรคลิกตามสิ่งที่ คุณรู้เกี่ยวกับการออกแบบ