Tidak benar-benar terkait dengan chip, tetapi mudah-mudahan saya akan mendapatkan beberapa petunjuk untuk mengikuti dari sini.
Saya mendapat sepotong kode, tetapi saya tidak tahu untuk apa prosesor itu dimaksudkan. Apakah ada alat yang tersedia yang dapat membantu saya mengidentifikasi jenis kode? Metode statistik yang dapat membantu? distribusi byte? distribusi pasangan, dll? Markov rantai mungkin?
assembly
processor
architecture
pesulap
sumber
sumber
Jawaban:
Coba jalankan melalui file GNU. Jika ada header standar, itu akan mengambilnya.
Misalnya.
sumber
Ini adalah pertanyaan yang sangat menarik. Ada jutaan set instruksi di luar sana, tapi hanya segelintir yang sangat umum digunakan.
Hal pertama yang saya lihat adalah asal dan tujuan penggunaan. Jika Anda menduga itu dirancang di Amerika Serikat, Anda akan terutama akan menargetkan prosesor dengan lembar data tersedia dalam bahasa Inggris, misalnya. Jika itu dirancang di Asia, maka ada sejumlah prosesor yang mereka gunakan untuk massa diproduksi perangkat yang insinyur AS jarang melihat. Bahkan Eropa memiliki beberapa prosesor yang lebih umum daripada yang lain.
Saya kemudian akan melihat ukuran dan fungsionalitas kode (dengan asumsi Anda tahu apa yang dilakukan kode ini sampai taraf tertentu). Jika itu beberapa megabyte kode, Anda bisa cukup diskon prosesor 8 bit yang paling tertanam dan mulai melihat perangkat yang lebih besar dengan memori eksternal. Jika beberapa kilobyte atau kurang, maka Anda ingin fokus pada perangkat yang lebih kecil dan lebih murah. Jika fungsionalitasnya sederhana, mungkin itu adalah kode untuk prosesor empat bit.
Pada titik ini, ada baiknya melihat struktur memori. Mungkin ada bagian program dan bagian data minimal. Jika ini adalah file biner (dibandingkan dengan intel hex atau catatan motorola) maka Anda hanya memiliki sedikit wawasan tentang di mana dalam memori, sejumlah data ditempatkan. Editor hex mungkin menunjukkan beberapa pola. Jika itu datang dalam format rekaman hex atau s, Anda mungkin memiliki informasi lebih lanjut tentang struktur memori prosesor yang dimaksudkan. Beberapa prosesor mengatur ulang di lokasi memori program 0, beberapa di lokasi memori tertinggi. Program mungkin menyertakan nilai awal EEPROM di lokasi memori yang terpisah. Jika ini dimaksudkan untuk prosesor yang aman (seperti yang digunakan dalam perbankan) bahkan mungkin memiliki kunci keamanan untuk lokasi memori yang aneh.
Bergantung pada bahasa yang diprogramkan, Anda mungkin memiliki beberapa petunjuk tambahan. Jika diprogram dalam C atau bahasa prosedural yang serupa, maka fungsi akan hampir selalu dimulai dengan urutan instruksi untuk menyimpan register tertentu ke stack (banyak dorongan) kemudian tepat sebelum mengembalikan banyak muncul untuk mengembalikan nilai asli dari stack . Jika Anda dapat melakukan pengenalan pola, Anda akan menemukan banyak dari rangkaian ini di seluruh, dan mungkin dapat menentukan instruksi mana yang paling mungkin instruksi push / pop, kembali, dll, yang dapat mempersempit pilihan Anda sedikit.
Jika itu adalah perangkat yang tertanam dengan interupsi, itu mungkin memiliki tabel vektor interupsi, yang akan terlihat seperti sekelompok lompatan ke lokasi memori yang berbeda semua dalam satu blok besar, mungkin di lokasi yang nyaman (alamat 0x ??? 0 misalnya) . Tabel lompat digunakan di tempat lain untuk hal-hal lain juga, tetapi jika Anda dapat menemukan urutan instruksi yang terlihat sama kecuali untuk apa alamat untuk melompat, Anda mungkin dapat menyimpulkan seperti apa instruksi lompatan itu, dan lagi-lagi mempersempit pilihan Anda ke bawah.
Pada titik itu, saya akan mulai dengan arsitektur prosesor yang paling umum dan melihat apakah ada yang berkorelasi. x86, arm, mips, 8051, avr, pic, powerpc, Z80, 68k, 6502, dll, dll, dll. Ada daftar prosesor dan set instruksi umum - setidaknya di dunia berbahasa Inggris - yang mungkin terbukti membantu.
Saya tidak mengetahui adanya alat otomatis yang akan membantu dengan ini, tapi MAME mengemulasi besar banyak arsitektur prosesor, dan salah satu metode yang mungkin adalah dengan menjalankan kode melalui sejumlah prosesor dan menonton register untuk melihat apakah klik sesuatu sesuai dengan apa yang Anda tahu tentang desain.
sumber
Ide: apakah Anda tahu usia kode sumber, yaitu, sekitar jam berapa / tahun itu dibuat?
Jika sudah cukup umur, itu mungkin memberi Anda petunjuk untuk prosesor mana itu ditulis. Anda bisa mengambil usia / tahun itu ditulis dan menentukan apa prosesor (s) adalah sekitar populer periode waktu itu, dan mencoba pemuatan / mengeksekusi file hex pada mereka.
Dipikir-pikir, mengingat perkembangan massa prosesor hanya dalam 20 tahun terakhir, mungkin ini teknik jarum-in-a-tumpukan jerami dan tidak sangat bermanfaat.
sumber
Beberapa bulan yang lalu, ketika tidak ada banyak inti prosesor yang berbeda di sekitar, saya mengidentifikasi kode Z80 beberapa kali melalui analisis frekuensi . Untuk Z80
CD
adalah kode mesin untukcall subroutine
danC9
adalahreturn from subroutine
(saya tidak akan pernah lupa), dan ini sering paling kode terjadi. Ini mengharuskan Anda berkenalan dengan instruksi yang ditetapkan pada level kode mesin. Memiliki pengalaman dalam perakitan dengan tangan membantu (melakukan itu banyak, dan saya masih dapat menghitung mundur dalam hex untuk menghitung offset).sumber
Jika file adalah untuk 12-bit atau 14-bit PIC, setiap pasangan byte akan menjadi kata 12- atau 14-bit, biasanya disimpan LSB pertama, dengan dua atau empat yang paling bit signifikan yang jelas.
sumber
Jika disusun dari bahasa seperti C atau Pascal, akan ada urutan standar tertentu dari biner Anda bisa mencari. Dengan C misalnya, hampir semua fungsi mulai dengan sesuatu yang menyimpan stack pointer ke "frame" atau "link" pointer. Untuk prosesor apa pun, biasanya hanya ada beberapa cara untuk melakukan ini. Jadi Anda bisa menjawab "apakah ini kode untuk prosesor X" dengan mencari biner X untuk urutan ini.
Yang mengatakan, saya memiliki beberapa keberuntungan membedakan antara 8088, 6502 dan 68000 biner hanya menggunakan histogram. Setiap prosesor yang diberikan memiliki opcode instruksi hukum tertentu, dan ini cenderung digunakan sedikit lebih sering daripada rata-rata. Dengan sepotong biner yang cukup besar, Anda dapat mulai melihat tren tertentu. Ini menjadi sulit, bagaimanapun, oleh fakta bahwa semua operan dalam sepotong biner yang diberikan cenderung tidak berkorelasi dengan tipe prosesor yang diberikan, dan ini pada dasarnya hanya membuat suara dalam data histogram Anda. Juga, bahkan dua program berbeda untuk prosesor yang sama mungkin memiliki histogram yang sangat berbeda. Namun, ini dapat memberi Anda tempat untuk memulai.
sumber