sudofeed

dev · · 08:05 · 2 min de citit

Inginerie Inversă a Arhitecturilor Nedocumentate: Extragerea Tabelelor de Opcode prin LLM vs. Constrângerile Instrumentelor Legacy

Acest articol prezintă o metodă nouă pentru reconstruirea tabelelor de căutare a opcode-urilor pentru dezansamblatoare, ocolind limitările instrumentelor tradiționale precum Ghidra și dezansamblatoarele CLI cu cod hardcodat. Metoda utilizează un Model Lingvistic Mare (Gemini) pentru a extrage, normaliza și structura eficient aceste date critice din specificații brute.

Construirea unui dezansamblator personalizat pentru arhitecturi CPU obscure sau legacy întâmpină de obicei o provocare semnificativă: achiziționarea unei mapări structurate, lizibile de mașină, de la opcode-uri la instrucțiuni. Cadrurile existente de inginerie inversă, precum Ghidra, încorporează aceste definiții profund în motoarele lor interne (SLAgh) și nu sunt proiectate pentru export ușor de date. Similar, dezansamblatoarele tradiționale de linie de comandă au mapările lor de opcode codificate direct în logica lor de execuție compilată, făcându-le inaccesibile pentru utilizare externă. Acest articol introduce o abordare alternativă care utilizează un Model Lingvistic Mare, în special Gemini, pentru a reconstrui, normaliza și exporta o tabelă completă de căutare a opcode-urilor într-o structură Python curată în câteva minute.

Problema centrală constă în dificultatea extragerii informațiilor structurate despre opcode din instrumentele actuale. Datele arhitecturale ale Ghidra sunt stocate în fișiere SLAgh complexe, lipsind utilități directe de export pentru tabele plate de opcode. Dezansamblatoarele independente precum dis51 au aceste informații codificate, iar fișele tehnice ale producătorilor sunt adesea PDF-uri fragmentate care necesită introducere manuală extensivă de date. Soluția propusă mută rolul LLM-ului de la dezansamblarea directă a codului la extragerea și structurarea eficientă a tabelei de opcode în sine. Această abordare decuplată permite crearea unui dezansamblator ușor de tip "linear sweep" alimentat de tabela generată de LLM.

Protocolul experimental a implicat compilarea unui program de test într-o imagine ROM și tratarea acesteia ca un binar necunoscut. Abordarea bazată pe LLM a atins o acoperire de dezansamblare de 100% utilizând un "linear sweep", contrastând cu limitările instrumentelor precum dis51, care se opresc la instrucțiuni de retur sau blocuri de date. Pipeline-ul implică alimentarea specificațiilor brute sau a prompturilor către Gemini pentru a genera o tabelă de instrucțiuni Python, care apoi alimentează un motor de "linear sweep" pentru a produce ieșire în limbaj de asamblare, depășind eficient constrângerile instrumentelor legacy.

$ sursa --originală

dev.to

Rezumat realizat de Sudofeed pe baza articolului original. Drepturile asupra conținutului aparțin sursei originale.

citește originalul ↗