Diassemblieren

Begonnen von picass, 11.10.2021, 19:24:09 CEST

Vorheriges Thema - Nächstes Thema

picass

Bin auf der Suche nach einer Möglichkeit, aus einem Hex-File ein lesbares Diassembly-File zu erhalten. Der Anlass: in meiner über 20 Jahre alten selbsterstellten Steuerung der Rollladenmotoren ist ein Fehler aufgetaucht, welcher sich eindeutig am Prozessor, einem PIC16F84, festmachen lässt. Die Steuersignale - z.B. von den Handsteuertasten - kommen klar an, aber der PIC gibt nichts mehr aus. Angedacht ist nun, das Hex-File dieses µC's auszulesen, es zu diassemblieren und diese DiAss-File mit dem (vermuteten) orig-Assembler-File zu vergleichen.
Klar, ich könnte auch gleich einen neuen, alten PIC programmieren und ihn einsetzen und schauen. Wird auch passieren, aber vorher wäre ich doch schwer neugierig, ob sich beim Diassemblieren was Auffälliges zeigt. Zum Beispiel vermute ich, dass der PIC aufgrund des Alters an Programm-Gedächtnisschwäche leidet. Wäre dem so und das ließe sich auf diese Weise ermitteln, müsste ich mich hurtig darauf vorbereiten, dass auch andere der vielen verbauten PICs da was verlieren werden. Wäre es "nur" ein anderer, interner Defekt des PICs, könnte ich es gelassener angehen. Aus meiner Sicht wäre ein Diassemblieren, falls das File übersichtlich und lesbar ausfallen sollte, eine toll gute Sache. Und meine Neugier verlangt, das sowieso zu versuchen.
Kann mir jemand Hinweise geben, wie man zu so einem File gelangen kann - das hatte ich noch nie gemacht.
Grüße, picass

vloki

Kannst du das HexFile mit dem PICKIT auslesen?

Zuerst mit der IDE ein neues (leeres) Projekt anlegen für den entsprechenden PIC anlegen.

Dann sollte es möglich sein, den Inhalt als Disassembly anzuzeigen.
Menü:
    Window
    ->Target Memory Views
        -> Program Memory

Im aufgehenden Fenster oder der Symbolleiste der IDE die Schaltfläche "Read Device Memory"


Alternativ das alte HexFile in MPLAB IPE importieren und "Verify"
Da bekommt man dann allerdings kein Disassembly angezeigt :-(
MPLABX  XC8  KiCAD

picass

#2
Das Wichtigste zuerst: Nun rollt er wieder, der vorher defekte Rollladen im Wohnzimmer. Es war – wie schon diagnostiziert – der PIC, der hatte irgendein gestörtes Innenleben. Was genau, konnte noch nicht ermittelt werden. Um voran zu kommen, wurde Plan F genommen. Dabei wurde ein PIC aus der einzigen  Steuer-Elektronik genommen, die frei zugänglich und nicht tief und hinten in Rollladenkästen verbaut war. Der wurde mit MPLAB IPE ausgelesen und das Hex-File in einen neuen PIC transferiert. Das klappte, und nun rollt es wieder. Schwitz, das hätte auch härter werden können. Dieser Vorfall hat allerdings einen riesen Schwanz an Nachfolge-Operationen los getreten, dazu später mal, muss erst aufräumen und durch atmen.

Zum vorigen Beitrag von vloki:
Ja, für das PICKIT hatte ich einen voll tollen Adapter gebastelt. Der besteht aus zwei übereinandergestapelten üblichen IC-Fassungen, etwas Fädeldraht und etwas Heißkleber. Habe heute wieder versucht, den von dir geschilderten Weg zu gehen, klappte aber nicht. Weiß nicht, warum nicht. Das "Wieder" bezog sich darauf, dass ich gestern schon einen fast gleichen Weg gegangen war, und da hatte was geklappt, es wurde ein Diassembler-Listening angezeigt. Das geschah in einem sehr kleinen Fenster, jede Zeile eng und untereinander gelistet. Echtes Diassembling, aber hoch unübersichtlich, es waren immer nur ca. 8 Zeilen sichtbar, und fürs Ausdrucken fand ich auch keine Möglichkeit. Muss das Thema weiter verfolgen, aber weil die Haupt-Rep gerade erfolgreich abgeschlossen werden konnte, werde ich das nicht als hoch dringlich, sondern "nur" aus dem Wunsch, das zu lernen, weiter verfolgen. Das alles jetzt mal fürs Erste.
Ach ja, das wird so fix vergessen: danke für die Hilfe. Das wird schon auch noch.
Grüße, picass

picass

So ganz sicher bin ich mir nicht, warum....... , aber fast egal, jedenfalls ist es mir gelungen, das Diassembley-Listening erneut auf den Bildschirm zu rufen, so, wie es schon vor 4 Tagen war. Man muss wohl das Hexfile im Projekt debuggen, dann klappt es mit dem Darstellen des Programm-Speichers. Heute habe ich entdeckt, dass sich nun der Debugger tatsächlich in Betrieb nehmen lässt, will sagen, das Programm lässt sich z.B. im Einzelschritt-Modus abarbeiten. Es gelangt u.a. zum Sleep-Befehl, und pennt dort so nachhaltig ein, dass es sich nur über die Stimulus-Funktion und Kenntnis des richtigen Ports dazu überreden lässt, weiter zu arbeiten. Und es führt auch Sprungbefehle aus,also alles so, wie man es vom Arbeiten mit dem .asm-File und dem Simulator gewohnt ist.
Wehrmutstropfen weiterhin: im DiAssy-Fenster sind nur 11 Zeilen sichtbar. Die lassen sich auch ausdrucken, aber eben auch nur diese elf. Bei einem umfangreichen Prog wäre das eine Schikane, den gesamten Programm-Verlauf aus zahllosen Elfer-Schnipseln zusammen setzen zu wollen.Ob da irgendwie mehr geht?
Grüße, picass

vloki

Das Fenster kannst du beliebig anordnen.
Drück einfach mit der Maus auf den "Program Memory" Tab und halte die Maus gedrückt.
Jetzt kannst du das Fenster verschieben. Ein roter Rahmen zeigt dir an, wo und wie das Fenster
liegen wird, wenn du die Maustaste loslässt. z.B. am rechten Rand...

Man kann das Disassembly auch in eine Text-Datei exportieren. Mit der rechten Maustaste in
das Fenster klicken und "Output to File ..."
MPLABX  XC8  KiCAD

picass

Hat dir schon mal jemand gesagt, dass du ein Schatz bist? Falls nicht, dann jetzt ich: du bist ein Schatz, Volker!
Die Vergrößerung des bislang winzigen Fensters bringt endlich einen Überblick, und vor allem der Export in ein Textfile und das anschließende Laden in z.B. Libre-Office mit seinen Möglichkeiten der Formatierungen bedeuten  einen enormen Gewinn. Danke!
Grüße, picass

picass

Buddel aus: Ähnliche Situation wie am Fred-Anfang: vom Hexfile über Diassemblieren zu einem neu-restaurierten Assembler-Listening.

Innerhalb weniger Wochen nun das zweite Mal, dass ich eine funktionstüchtige µC-Schaltung aus dem hinteren Regal krame, da das Prog bearbeiten  möchte/muss, aber von den vielen Mutations-Stufen der Programme auf dem PC keine eindeutig zuordnen kann. Über die MPLAB IPE lässt sich das Hexfile im PIC auslesen und abspeichern, dann kann im MPLAB X IDE ein neues Projekt angelegt werden mit der Vorgabe, dieses Hexfile zu verwenden und anschließend lässt sich das im neu angelegten Fenster ,,Memory" anzeigen. Z.B. via ,,highliten" kann dieses File exportiert werden in eine Textdatei. Das ist prima, die ist gut leserlich und enthält in 4 Spalten die Linien-Nummer, die Adresse, den Opcode und ganz rechts das gewünschte Diassembler-Listening (DiasLis). Im Letzteren sind Sprungbefehle nur mit Zahlen dargestellt, was aber noch verwendbar ist, wenn man denn ein zumindest ähnliches oder infrage kommendes Prog hat.

Aber so richtig weiter ist man bis hierhin nicht. Für ein zu überarbeitendes und ,,normales" Prog braucht man eine Datei im .asm Format. Wie nun bekommt man den benötigten Teil – also das DiasLis aus dieser Textdatei in ein MPLAB X-Projekt mit seiner .asm-Datei ? Störend sind da die ersten drei Spalten: Line,Address, Opcode. Da habe ich noch keinen Weg gefunden, außer, in JEDER Zeile diese Inhalte einzeln zu löschen. Leider läuft das komplette Listening über 27 gut gefüllte DIN-A-4-Seiten. Selbst wenn man sich die Mühe des Einzeln-Löschens s.o. machen würde: ein einziger Konzentrationsfehler macht alles zunichte.
Gibt es einen praktikablen Weg vom Hexfile zum ASM-Listening?
Grüße, picass
diass.jpg

PICkel

In diversen Editoren gibt es die Option "Blocksatz" oder "Blockauswahl".
Ich verwende dazu den Editor "Textpad".
Man markiert damit einen Rechteckigen Bereich und kann diesen dann ganz normal löschen/kopieren/usw.

Gruß
PICkel

picass

#8
War ein Schuss in den Ofen, bei mir klappt das mit dem Blocksatz nicht. Unter den üblichen Win-Systemen gibt es als Beigabe nur den Editor und das einfache Schreibprog "Wordpad". Beide weisen da gar nichts auf. Und bei meinem Libre Office gibts natürlich was mit Blocksatz, aber da geht nur rechts oder mitte oder linksbündig und nichts zum freien Auswählen. Dann gibts noch im Win-System das "Sniping-Tool". Damit kann man beliebige Teile aus allem, was der Bildschirm anzeigt, ausschneiden und in eine  externe Datei auslagern. Das wird dann aber immer ein Bild, und das lässt sich nicht in Text übersetzen.
Weiter hatte ich noch die tolle Idee, den vier-spaltigen Text des Hexfiles in ein Tabellen-Prog zu laden. Klappt prima, und dann kann man natürlich einfach etliche Spalten löschen. Prima, bleibt nur die mit den gewünschten Assembler-Befehlen übrig. Nicht prima: rein geht, aber nicht mehr raus. Lässt sich nur im speziellen Tabellen-Format auslagern, nicht mehr als Text zurück.
Ich hatte es nach vielen vergeblichen Versuchen aufgegeben und bin auf die hatte Tour gegangen: Nicht alle 27 Seiten - die meisten waren mit Tabelleninhalten gefüllt - sondern nur die ersten 7 Seiten derart bearbeitet, dass jede Zeile bis zum gewünschten Teil einzeln nacheinander gelöscht wurde. Was'ne Fingerübung, aber 4 1/2 Minuten pro Seite und dann wars fertig.
Nützte aber auch nichts, :-\  denn das über die MPLAB-IPE ausgelesene orig-Hexfile, eingelesen in ein neues Projekt in die MPLAB-X-IDE und dort im Fenster "Programm" sichtbar gemacht, anschließend exakt so in ein neues "orig"-Hexfile gespeichert, dann die mühsame Zeilenbehandlung... und dann wollte die IPE das doch nicht mehr als orig-File akzeptieren und dieses in den PIC programmierte Prog lief dann auch nicht. Vieeeeeeeeeeel Zeit vertan.

Die Lösung ist aber dennoch da. Nach vielem Wühlen auf diversen Festplatten und Sicherungsmedien fand sich gerade eben dasjenige Programm, rsp. diejenige Version des Programms in der MPLAB-X-IDE, welche so verzweifelt gesucht worden war.
Damit läuft der PIC und das ersehnte ASM-File liegt vor!!! Schwitz, was'n Aufwand! Aber mal wieder im Ziel angekommen, wenn auch reichlich lediert.
Grüße, picass

PICkel

Ja, das mit dem Blocksatz war ein Schuss in den Ofen! Tut mir leid.
Es musste nur "Blockauswahl" heißen! Hier ein Beispiel mit dem Editor "Textpad", bei dem ein Bereich mit 6 Spalten markiert ist.
Textpad kann man zum Testen kostenlos installieren.

Gruß
PICkel

picass

Zitat von: PICkel in 17.09.2024, 15:20:11 CESTEs musste nur "Blockauswahl" heißen!
Mag sein, der Schuss in den Ofen! Aber einen ins Ziel treffenden Schuss gab es auch. Mithilfe der von dir korrigierten Formulierung hatte ich mal auf Verdacht geg..... und in einigen Fundstellen fand sich ein Hinweis auf die Nutzung der ALT-Taste. Das war natürlich einen Versuch wert, ob das in dem von mir verwendeten LibreOffice auch funken würde. Und es funkte auf Anhieb.
Wenn - wie bei meiner Textvorlage mit dem Hex-File und seinen 4 Spalten - eine der Spalten isoliert werden soll, dann geht das erschütternd einfach...., wenn man es halt kann. >:D Erst ALT-Taste gedrückt halten und dann kann man mit der Maus einen beliebigen Rechteck-Rahmen aufziehen. Dessen Inhalt lässt sich dann mittels Kopier- u. Einfüge-Funktion beliebig in ein anderes oder neues Textdokument einfügen. War kinderleicht...., wenn das Kind nur im Stande des Wissens ist. Aber danke für deine Wortkorrektur, die brachte den entscheidenden Durchbruch.
Was so'n Schuss in den Ofen nicht alles bewirken kannn....?!
Grüße, picass


Schnellantwort

Name:
Tastenkürzel: Alt+S Beitrag schreiben oder Alt+P für Vorschau