Forum: Mikrocontroller und Digitale Elektronik Disassemble .hex to .asm (PIC18F2550)


von Luki (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Leute!

Habe mich bereits im Internet schlau gemacht, jedoch ohne Erfolg...

Würde gerne die angehängte hex-Datei in eine asm-Datei disassemblen, 
hatte jedoch mit MPLAB und picdis18 keinen Erfolg.

Weiß jemand woran das liegt?

Bin totaler Programmieranfänger und hatte bislang nur mit einfachen 
Programmen (C und C++) zu tun.
Nun würde ich gerne Kleinigkeiten an dem Programm ändern und 
anschließend wieder
in hex kompilieren.
Muss ich beim Kompilieren mit MPLAB etwas spezielles beachten?

Danke im Voraus.

Luki

: Verschoben durch User
von Sven P. (Gast)


Lesenswert?

Luki schrieb:
> Muss ich beim Kompilieren mit MPLAB etwas spezielles beachten?
Es werden höchstwahrscheinlich sämtliche absoluten Sprungadressen nicht 
mehr stimmen. Nach dem Disassemblieren stehen die ja nicht mehr 
symbolisch, sondern als berechnete Konstanten im Text. Wenn du dann 
irgendwo ein paar Programmworte einfügst, verschiebt sich ja alles.

von Luki (Gast)


Lesenswert?

Danke Sven P.!
Ich nehme an, dass sämtliche Kommentare beim Assemblieren verloren 
gehen, und so auch nach dem Disassemblieren nicht mehr vorhanden sind. 
Ist das Richtig?

Hat vielleicht noch jemand eine Idee weshalb sich die Datei nicht 
Disassemblieren lässt?

von Sven P. (Gast)


Lesenswert?

Luki schrieb:
> Danke Sven P.!
> Ich nehme an, dass sämtliche Kommentare beim Assemblieren verloren
> gehen, und so auch nach dem Disassemblieren nicht mehr vorhanden sind.
> Ist das Richtig?
Das ist richtig. Ferner gehen sämtliche Bezeichner verloren 
(Sprungmarken, Registerbezeichnungen, Makros usw.) und du kannst 
möglicherweise Programmcode nicht mehr von Daten im Programmspeicher 
(z.B. Tabellen) unterscheiden.

von ohne ahnung (Gast)


Lesenswert?

ich sehe in dem vorhaben kein problem, weder im hinzufügen von code noch 
vom ändern des program-ablaufes.

jedoch sind die gegebenen vorraussetzungen nicht gerade günstig.

du brauchst nen guten disassembler (ida pro) n datenblatt vom pic und 
dann geht das los. vllt willst du noch nach dem einen oder anderen 
"tutorial" zum thema "reverse engineering" und vllt "pic" suchen.

entweder binary patching (würde ich zuerst versuchen - je nach vorhaben) 
oder die entsprechenden gewünschten funktionen komplett klauen und ins 
eigene projekt reinwurschteln.

viel spass und erfolg :)

von Luki (Gast)


Lesenswert?

Danke schonmal!
Aber wenn ich das richtig verstanden haben würde das Programm nicht mehr 
laufen wenn ich es nur Disassemblieren und anschließend(ohne Änderungen) 
wieder Assemblieren würde.
Stimmt das?

von Hänschen Klein (Gast)


Lesenswert?

Luki schrieb:
> Aber wenn ich das richtig verstanden haben würde das Programm nicht mehr
> laufen wenn ich es nur Disassemblieren und anschließend(ohne Änderungen)
> wieder Assemblieren würde.
> Stimmt das?

Nein. Das Programm würde laufen.

von Luki (Gast)


Lesenswert?

Habe jetzt versucht es mit IDA Pro zu Disassemblieren, jedoch ohne 
Erfolg...
Wenn es jemand Disassembliert uploaden könnte wäre mein Tag gerettet.

Danke an alle die sich die Zeit nehmen um mir zu helfen, bin wie gesagt 
Anfänger!

von ohne ahnung (Gast)


Lesenswert?

da du offensichtlich nicht der urheber dieses binaries bist und auch 
sonst nichts bekannt ist (lizenzierung usw) würdest du im 
schlimmstenfalle gerade jemanden zu einer straftat anstiften was 
rechtlich so viel ich weiss, sehr problematisch sein könnte.

meine meinung: du willst dinge tun die du nicht solltest, also mach 
deine hausaufgaben und dann erledige es selbst.

vorteil: du lernst was. nachteil: keine.

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Ich habe es mal mit gpdasm und Piklab unter Linux versucht, aber das 
meldet nur einen Fehler in Zeile 21 des Hexfiles und macht dann nicht 
weiter. Anscheinend hat das File nicht das richtige 
Microchip-Hex-Format.


http://ww1.microchip.com/downloads/en/AppNotes/91025a.pdf

"Probably the simplest format to send the data to the
microcontroller is in the standard HEX format used by
the Microchip development tools. The formats supported
are the Intel HEX Format (INHX8M), Intel Split
HEX Format (INHX8S), and the Intel HEX 32 Format
(INHX32). The most commonly used formats are the
INHX8M and INHX32 and therefore are the only formats
discussed in this document. Please refer to
Appendix A in the MPASM User's Guide (DS33014) for
more information about HEX file formats."

Wenn ich es mit dem Hexeditor HxD als Intel32 oder Intel16 "exportiere", 
disassembliert picdis18 zwar (527 kByte Text) aber dazwischen sind immer 
wieder unknown instructions. Könnte aber auch am Alter des Disassemblers 
liegen, kennt vielleicht noch keinen 18F2550.

von holger (Gast)


Lesenswert?

>Könnte aber auch am Alter des Disassemblers
>liegen, kennt vielleicht noch keinen 18F2550.

Mal abgesehen davon das ein 18F2550 nur 32kBytes Speicher
hat. Das Programm ist viel zu groß.

von Master S. (snowman)


Lesenswert?

früher als ich noch mit spruts brenner brannte und das hex-file ladete, 
gabs einen reiter, der den diassembler-code auflistete. vielleicht mal 
eines seiner programme angucken...

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Nachtrag: gpdasm / Piklab sagt auch, dass die Sprungziele im Programm ab 
4000h über den Adressbereich des 2550 hinausgehen. Also entweder ist das 
der falsche Prozessor oder das Auslesen hat nicht geklappt.

von nicht "Gast" (Gast)


Lesenswert?

es könnte sich dabei aber auch um Daten/Tabellen handeln. Oder in einem 
Programmteil der nie aufgerufen wird, hat jemand extra eine fehlerhafte 
Information plaziert. Beides möglich

von Dieter W. (dds5)


Lesenswert?

Das ist keine HEX sondern eine Binärdatei und die enthaltenen Daten 
haben mit PIC18 absolut nichts zu tun.

Beim disassemblieren kommen call und jump auf Adressen vor dem 
Programmanfang und auch eine Menge illegal opcodes zum Vorschein.

von Michael R. (mexman) Benutzerseite


Lesenswert?

> Weiß jemand woran das liegt?

Moeglicherweise daran, dass der Programmierer schlau war.

Der Programmierer verwendet moeglichst frueh schoen eigebettete 
Datenbloecke, die an einer Stelle weit hinten im Programm dekodiert 
werden, ggf. EEPROM Dateninhalt und berechnete Sorungadressen.

Laesst sich zwar alles disaseemblieren, aber eben nicht automatisch.

>
> Bin totaler Programmieranfänger und hatte bislang nur mit einfachen
> Programmen (C und C++) zu tun.

Und das nacht das Ganze zu einem No-Go fuer Dich.


Gruss

Michael

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.