Diassemblieren

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

⏪ vorheriges - nächstes ⏩

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 :-(

picass

12.10.2021, 18:12:31 CEST #2 Letzte Bearbeitung: 12.10.2021, 18:14:45 CEST von picass
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 ..."

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

Schnellantwort

Name:
Verifizierung:
Bitte lassen Sie dieses Feld leer:

2 Beeren und 2 Bananen. Welche Farbe hat die Banane ?:
Tastenkürzel: Alt+S Beitrag schreiben oder Alt+P für Vorschau