Hallo,
ich suche ein kostenloses Disassemblerprogramm für den Renesas H8S/2350
um die Dateien im Anhang mal ansehen zu können. Leider weiß ich auch
nicht welcher Dateityp dafür nötig ist, deshalb habe ich mal alle drei
angehangen.
.Bin für Binärformat bzw. ohne Endung,
.Hex für Intelhexformat,
.GPF für Galep4format ( GALEP4 ist das Schreib/Lesegerät ).
Hi,
suche und versuche schon die ganze Zeit auf der Homepage von Renesas
HEW4 ( High-performance Embedded Workshop ) zu installieren,
jedoch gibt es da wohl nur Updates zu HEW4 zum Download.
Kennt jemand noch ein anderes Programm womit ich mein Ziel erreichen
kann.
Ratloser Suchender
Schreib dir doch einfach sowas selber. Hat auch ein paar nützliche
Seiteneffekte: Man lernt den uC viel besser kennen und man lernt
ebenfalls, wie ein Intel- oder Motorola-Hexcode aufgebaut ist und wie
man ein interaktives Programm schreibt.
W.S.
W.S. schrieb:> Schreib dir doch einfach sowas selber.>
Kann ich leider nicht.
Arbeitet denn niemand mit diesem Controller, so daß Sie/Er mir mal die
Dateien im Anhang disassemblieren kann ?
Suchender
Wenn Du allein keinen einfachen Einpass-Disassembler (stur Byte für Byte
per Tabelle ab bekannter Startadresse des Prozessors zuordnen, absolute
Programmverzweigungsbefehle erkennen und den Sprungadressen folgen,
Interruptadressen bzw. -vektoren finden und verfolgen, usw.)
hinbekommst, wirst Du mit dem disassemblierten Code auch nicht viel
anfangen können. Sorry. Hast Du die bin-Datei schon mal mit einem
Hexeditor angeschaut, um eventuelle Texte/Strings oder andere Strukturen
zu finden?
Suchender schrieb:> Leider wird hier immer nach einer LoginID und einem Password gefragt !!!
Dein LoginID nennst Du Suchender und Dein Passwort Gast. Ist doch nicht
schwer!
Suchender schrieb:> Arbeitet denn niemand mit diesem Controller, so daß Sie/Er mir mal die> Dateien im Anhang disassemblieren kann ?
Wenn man damit arbeitet hat man die Quelldateien!
Bei einem gut optimierten Code siehst Du auch mit einem Diss-Ass nicht
viel. Und umso weniger, wenn Du Dir diesen nicht selber schreiben
kannst.
Suchender schrieb:> Kann ich leider nicht.
Dann laß es ganz sein.
Wer sich nicht wirklich mit der CPU befassen will, der würde auch vom
Output eines Disassemblers nichts haben.
Merke: Die gebratenen Tauben fliegen einem hierzulande nicht von
selbst in den Mund.
W.S.
>Wer sich nicht wirklich mit der CPU befassen will, der würde auch vom>Output eines Disassemblers nichts haben.
Wie hier mal ein schlauer Mensch sagte:
Aus einem Hamburger kann man kein Rind mehr machen.
Die vier Bytes am Ende der BIN Datei sehen doch stark
nach einer 32 Bit Checksumme aus. Wenn man ein Byte ändert
stimmt sie nicht mehr. Vermutlich läuft dann das Programm
auch nicht mehr. Änderungen am Programm erfordern dann wohl
auch eine Änderung der Checksumme. Oder man findet die Stelle
wo die Checksumme verglichen wird. In einem Disassembling von
knapp 256kB Code (der Rest ist 0) kann man da eine sehr lange Zeit
nach suchen. Ein Anfänger wird das nie finden.
holger schrieb:>> Die vier Bytes am Ende der BIN Datei sehen doch stark> nach einer 32 Bit Checksumme aus. Wenn man ein Byte ändert> stimmt sie nicht mehr. Vermutlich läuft dann das Programm> auch nicht mehr. Änderungen am Programm erfordern dann wohl> auch eine Änderung der Checksumme. Oder man findet die Stelle> wo die Checksumme verglichen wird. In einem Disassembling von> knapp 256kB Code (der Rest ist 0) kann man da eine sehr lange Zeit> nach suchen. Ein Anfänger wird das nie finden.>
Danke für den Hinweis.
Habe evtl. die Möglichkeit, dann einen Profi zu rate zu ziehen.
Der ist wahrscheinlich nicht auf Renesas spezialisiert, aber
verschiendene Controller hat er schon in Assembler programmiert.
Nur muß ich da schon ein wenig Vorarbeit leisten und mein kleiner
Beitrag wäre zu Anfang halt den dissamblierten Code zur Verfügung zu
haben.
Habe gehofft hier einen anzutreffen, der in der Lage ist diesen Code zu
Disamblieren, da die Renesas Controller doch eher ein Nischen dasein
fristen bei den Amateuren bis vielleicht auf den R8C oder so ähnlich.
Ist denn wirklich niemand hier, der in der Lage ist und sich auch noch
die Mühe macht den Code zu Disamblieren ?
Suchender
Suchender schrieb:> Ist denn wirklich niemand hier, der in der Lage ist und sich auch noch> die Mühe macht den Code zu Disamblieren ?
Die, die es können, werden den Sinn darin nicht sehen.
Was willst Du erreichen?
Suchender schrieb:> Dachte eher hier auf Experten in Sachen> Mikrocontroller zu treffen.
Hehehe! Das klingt mir aber ein bissel zu beleidigt in den Ohren.
Also, du bist hier schon richtig, nämlich unter den Experten in Sachen
Mikrocontroller. Aber du solltest dich nach den anfangs gegebenen
dezenten Hinweisen auf deinen Allerwertesten setzen und selber was
leisten. Im Grunde ist das ja auch kein großer Hit, ne Menge Leute hier
(mich eingeschlossen) haben sich für ihre Belange schon mal nen
Disassembler geschrieben.
Genau duch eigenes Bemühen (studere = sich bemühen, sich bilden) wird
man nämlich klüger respektive sachkundiger. Durch bloßes Suchen nach
einem Neger, der einem die Arbeit macht, lernt man allenfalls das
effektivere Schmarotzen, was allerdings nur selten gern gesehen wird.
Also setz dich mal hin und entwirf dir einen einfachen Disassembler in
der Programmiersprache deiner Wahl.
W.S.
>Es geht konkret darum, zu sehen worin sich die Flashs der beiden RMR>RL500 und RL800 unterscheiden.
Musst du halt die HEX Dateien vergleichen.
>Dachte eher hier auf Experten in Sachen>Mikrocontroller zu treffen.
Da bist du hier richtig.
>Habe evtl. die Möglichkeit, dann einen Profi zu rate zu ziehen.>Der ist wahrscheinlich nicht auf Renesas spezialisiert, aber>verschiendene Controller hat er schon in Assembler programmiert.
Und weil er den Renesas nicht kennt kennt er auch dessen
Assembler Mnemonics nicht. Da könntest du auch deine Mammi fragen.
>Nur muß ich da schon ein wenig Vorarbeit leisten und mein kleiner>Beitrag wäre zu Anfang halt den dissamblierten Code zur Verfügung zu>haben.
Der zu nichts taugt. Selbst wenn du einen findest der jahrelange
Erfahrung mit Assembler auf Renesas hat, der fragt dich nur ob du
noch alle Tassen im Schrank hast.
holger schrieb:>>>Nur muß ich da schon ein wenig Vorarbeit leisten und mein kleiner>>Beitrag wäre zu Anfang halt den dissamblierten Code zur Verfügung zu>>haben.>> Der zu nichts taugt...>
Das kann man doch wohl erst sagen, wenn man den Assemblercode versucht
zu entschlüsseln oder hast Du es schon versucht ?
Naja, einen Überblick hast Du dir ja schon verschafft, ich denke beim
Betrachten der reinen Bindatei.
Es hört sich auch so an als ob Du ahnung von der Materie hast. Aber
warum tut mir hier eigentlich keiner den Gefallen und dissambliert den
Code einmal. Dann wüsste ich auch ob sich weiters studere überhaupt
lohnt, denn hier zu schreiben und im www zu stöbern ist auch bemühen.
Wie ihr seht haben Anfänger mit den für euch leichten Dingen ganz schöne
Mühen, die ihr nicht mehr versteht, weil für euch mittlererweile solche
banalen Sachen so einfach sind.
Suchender
Suchender schrieb:> dissambliert
dieses Wort gibt es nicht.
Der Vorgang heißt "assemblieren" (von "to assemble" = zusammensetzen)
oder dis-assemblieren {natürlich ohne Bindestrich}.
Die entsprechenden sonstigen Worte heißen demzufolge
Disassembler
disassemblieren
Disassemler-Listing
Disassemblat (das Wort gibt aber Einblutungen in die Augäpfel)
etc.
hast du denn schon mal die Evaluierungs-Version des Disassemblers runter
geladen und versucht ans Laufen zu bekommen?
Der Vorgang des disassemblierens ist weitaus "umständlicher" als du dir
das vermutlich laienhaft vorstellst.
Die vom Compiler vorgenommenen Optimierungen, hinzugebundene
Codebibliotheken, Prüfsummenroutinen zur Absicherung des Binär-Abbildes
und weitere Schweinereien "kennt" und berücksichtigt ein normaler
Disassembler nicht, selbst wenn er aus dem selben Hause wie die
"Toolchain" zur Code-Erzeugung (also Compiler etc) stammt.
Da ist viel Fachwissen angesagt, wie der zugehörige Compiler arbeitet,
wie der zu analysierende Prozessor aufgebaut ist
(Interupt-Vektor-Sprungtabellen etc) und weiteres.
Und selbst elementare algorithmische Operationen wie Schleifen etc. sind
schwer genug zu deuten. Von disassemblierten algorithmischen Dingen wie
folgendes fiktives im fiktiven Pseudocode ganz zu schweigen:
define Scheibendurchmesser 43
# 43 mm ist die Ritzelscheibe im Durchmesser
define Zaehhlimpuls = Taktrate / Scheibendurchmesser
int Sicherheitsabstand = 92
# 92 Zaehlimpulse ergeben einen Abstand von 8 cm,
# das entspricht einem geeigneten Abstand bei maximaler
Fahrgeschwindigkeit, um akzeptabel abzubremsen
Was glaubst du, was du von diesen "Fachwissen" in deinem
Disassembler-Listinng noch wiederfindest? Reineweg garnix, weil
irgendwelche Register scheinbar willkürlich mit irgendwelchen Werten 43
und 92 geladen und verglichen werden, und du kommst im Leben nicht
drauf, woher diese Werte kommen ...
Fazit: Wenn du dich gut mit dem Assembler des jeweiligen Prozessors
auskennst, dann kannst du mit einigem Fleiß auch ein
Disassembler-Listing einigermaßen interpretieren.
Ansonsten kommst du (selbst als Assembler-kundiger eines anderen
Prozessortyps) über mehr als die Auflistung und Betrachtung von
ASCII-Strings in deinem Binärfile kaum hinaus. Dazu reicht aber dann ein
einfacher Hex-Editor.
Zur Übung würde ich dir folgende Vorgehensweise empfehlen (dies sind
übrigens die selben Schritte, welche du von den Forums-Teilnehmern als
kostenlose Leistung anforderst, du siehst vermutlich selbst ein daß das
nicht in einer viertel Stunde erledigt ist)
Schreib dir selber ein einfaches "hello world" Programm und übersetzte
es mit dem mit dem zugehörigen Compiler. Nimm dann einerseits das
Assembler-Listing des Programms, das dir ja durch den Compile-Vorgang
zur Verfügung steht, und andererseits disassemblierst du das fertige
Programmm. Vergleiche nun das Disassembler-Listuing mit dem
Assembler-Listing und versuche dir einen Reim zu machen, was der
Disassembler anders gemacht hat, da das Assembler-Listing so ganz anders
ausssieht wie das Disassembler-Listing.
Dann nimm das ursprüngliche Assembler-Listing, und versuche dort das
"hello World" Programm wieder zu finden. Varieiere dei Programm ein
wenig baue z.B. eine kleine Scheife ein (lass dir z.B. "hello world" 10
mal eingeben, lese eine Variable ein etc)
Lese das Assembler-Listing und versuche dei Änderungen nachzuempfinden.
Wenn du dann entwas Vertrauen in deine Fähigkeiten der
Assemler-Listing-Deutung gewonnen hast, kannst du dich ja dann in das
disassemblieren deines oben genannten binaries machen. Du wirst dann dei
wesentlichen Funktionsblöcke (Programminitialisierung,
Bibliotheksroutinen-Position etc) ja schon kennen und beim
Disassembler-Listiung geeignet berürcksichtigen können.
Wegstaben Verbuchsler schrieb:>> Der Vorgang des disassemblierens ist weitaus "umständlicher" als du dir> das vermutlich laienhaft vorstellst.>
Anworte jetzt erstmal auf diese kleine Passage. Der Rest kommt
irgendwann später.
Habe noch ganz ganz schwach Gespeichert, das es so etwas zu MC68HC11
zeiten in der Entwicklungsumgebung IDE11 gab. Deshalb wundere ich mich,
das dies heut zu tage umständlicher ist. Aber ich denke Du wirst wohl
damit recht haben.
Suchender
Suchender schrieb:> Deshalb wundere ich mich,> das dies heut zu tage umständlicher ist.
es ist heutzutage nicht umständlicher als damals, sondern genau so
umständlich. Es ist halt generell sehr schwierig bis nicht möglich, aus
der Frikadelle wieder ein fertiges Schwein zu rekonstruieren.
sobald / sofern das nur mit einem einfachen one-pass Disassembler etwas
versuchst, wird das nur zu merkwürdigen Ergebnissen führen. Wie gesagt,
probiere es mal selber aus, übersetze ein einfaches "hello world"
Programm und disassembliere es anscheinend.
#include <stdio.h>
int main(void)
{
printf("hello world\n");
return 99;
}
Ohne Vergleichsmöglichkeiten (d.h. also ohne Kenntniss des vorliegenden
C-Programms) wirst du vermutlich außer dem Textstring nicht viel
wiederfinden in deinem Disassembler Listing, da dir der generelle
Laufzeit-Ablauf deines Programms unbekannt ist. Vermutlich wird aber
auch der Textstring zu irgendwelchen Assembler-Befehlen zermust werden.
MIT einem Beispielprogramm (z.B. dem hello_world) und MIT der scharfen
Analyse, wie das hello_world Programm in Assembler dargestellt wird, und
MIT viel Intuition wirst du dann mit viel Glück in der Lage sein, ein
dir unbekanntes Programm soweit zu sezieren im Disassembler-Listuing,
daß du wesentliche algorithmische Stukturen herleiten kannst.
Viuelleicht hast du mit einem leistungsfähigeren Werkzeug wie IDA (-->
http://de.wikipedia.org/wiki/The_Interactive_Disassembler) mehr Erfolg,
allerdings muß du dich da erst mal auf die Suche nach passenden
Configdateien für den von dir benannten Prozessor finden oder selbst
erstellen
> Habe noch ganz ganz schwach Gespeichert, das es so etwas zu MC68HC11> zeiten in der Entwicklungsumgebung IDE11 gab.
Na das klingt ja als ob du dich selbst mit dem Thema ein wenig
auskennst. Daher müßte dir doch das zuvorgesagte aus deinen Urrzeiten
bekannt ist. Also ran ans Werk, fröhlich übersetzt, assembliert,
disassembliert.
Machen, staunen, analysieren, verstehen etc. werden deine
Erfolgs-Triggerpunkte sein.
Wegstaben Verbuchsler schrieb:>> Viuelleicht hast du mit einem leistungsfähigeren Werkzeug wie IDA (-->> http://de.wikipedia.org/wiki/The_Interactive_Disassembler) mehr Erfolg,> allerdings muß du dich da erst mal auf die Suche nach passenden> Configdateien für den von dir benannten Prozessor finden oder selbst> erstellen>
Danke für diesen Link.
Er war sehr vielversprechend, da es dort eine Demoversion gibt.
Allerdings trat dann das Problem auf, das sich meine Hex, Bin und GALEP4
Dateien nicht öffnen ließen, sondern das Programm PE, ELF oder Mach_O
files haben möchte. Dabzu gab es den Hinweis auf ein Decompilerprogramm,
welches jedoch nicht als Demoversion zu haben ist.
Und die Preise für diese Programme sind für mein Vorhaben
" Mal sehen was ich so entschlüsseln kann " völlig aus dem Rahmen.
http://www.hex-rays.com/products/ida/support/download_demo.shtmlhttp://www.hex-rays.com/products/decompiler/index.shtml>>> Habe noch ganz ganz schwach Gespeichert, das es so etwas zu MC68HC11>> zeiten in der Entwicklungsumgebung IDE11 gab.>> Na das klingt ja als ob du dich selbst mit dem Thema ein wenig> auskennst. Daher müßte dir doch das zuvorgesagte aus deinen Urrzeiten> bekannt ist. Also ran ans Werk, fröhlich übersetzt, assembliert,> disassembliert.> Machen, staunen, analysieren, verstehen etc. werden deine> Erfolgs-Triggerpunkte sein.>
Das war die Zeit, wo ich überhaupt das Erstemal was von Mikrocontrollern
gehört hatte. Und seinen eigenen Assemblercode zu schreiben und später
noch zu verstehen ist ja bereits eine Kunst. Und den von anderen erst
recht. Compilierten wahrscheinlich eine Kunst hoch zwei.
Da bereits die Beschaffung der Programme für diesen Renesas H8S/2350
Controller zwecks disassemblieren solche Probleme bereitet vergess ich
die ganze Sache lieber. Auch die Preise für dieses Vorhaben sind wohl
eher etwas für Profis, also die jenigen die ihr Geld damit verdienen.
Danke für Deine Bemühungen.
Aber es wird schon seinen Grund haben, warum Renesas es einem so schwer
macht. Denke die sind auf Profis aus und nicht auf Hobbyelektroniker.
Suchender
W.S. schrieb:> Suchender schrieb:>> Dachte eher hier auf Experten in Sachen>> Mikrocontroller zu treffen.>> Hehehe! Das klingt mir aber ein bissel zu beleidigt in den Ohren.>
Ok, das war ein wenig provozierend gemeint, um den Einen oder Anderen
aus der Reserve zu locken, da solch tiefgreifenden Sachen im Roboternetz
sofort zum Abwenden der dortigen Teilnehmer führt.
Ich dachte halt das es hier einen gibt, der die nötige Software hat um
die Dateien einmal zu Disamblieren oder mir wenigstens schreiben kann,
wo ich diese kostenlos bekommen kann.
Hatte mal für den MC68HC11 eine IDE (Integrated Development Environment
) Intergrierte Entwicklungsumgebung.
Dort war einfach ein Menüpunkt beim Debuggen dabei fürs Disamblieren.
Das Programm kostet heute um die 50 Euro. Dachte also Disamblieren wäre
kein großartiger Akt, wenn man die nötige Software dazu hat.
http://elmicro.com/de/ide11.html
Zum Schluß kam ja auch was Vielversprechendes dabei heraus, doch ich
denke Renesas ist halt nicht an Hobbyeletronikern interessiert.
Suchender
Suchender schrieb:> doch ich> denke Renesas ist halt nicht an Hobbyeletronikern interessiert.
Du schaffst es nicht, Dich dort unter irgendeinem Namen einzuloggen und
jammerst hier rum, dass Dir keiner hilft.
Ich drücke es einmal positiv aus: mit einem dissassemblierten .hex-File
kannst Du überhaupt nichts anfangen. Begreife es doch endlich!
Suchender schrieb:> Dort war einfach ein Menüpunkt beim Debuggen dabei fürs Disamblieren.> Das Programm kostet heute um die 50 Euro. Dachte also Disamblieren wäre> kein großartiger Akt, wenn man die nötige Software dazu hat.
Nochmal: Das debuggen und zugehörige Code-anschauen ist kein
"dis-assemblieren", sondern das "Ansehen" der Assembler-Befehle eines
vorliegenden Quellprogramms.
In diesem Falle des Disassembler-tracens ist der IDE bekannt "wo sie ist
(in welchem Quellbefehl)" und "was sie macht (Registertrace etc)".
Beim "echten" Disassemblieren von Binärobjekten liegt dir weder
Quellprogramm, noch Laufzeitinformationen (Registerbelegung,
Variableninhalte etc) vor, da du ja gar nicht "weißt, welche Register
mit welchen Werten gefüttert werden, und welche Variablen es gibt.
Daher kommt mit großer Sicherheit im ersten Anlauf bei solch einem
Disassembler-Listing nur Quark heraus.
Sowohl die eingebundenen Bibliotheksfunktionen als auch die
Programm-Laufzeitumgebung werden dir gnadenlos mit disassembliert.
Mach andersrum mal folgende Rechnung auf:
von deinen 512 Kbyte großen binary werden sicherlich ein gewichtiger
Teil Laufzeitumgebung, Bibliotheken und abgespeicherte Datenstrukturen
sein. Oben wurde ja schon erwähnt, daß nur ca. 250 KB ungleich "0" sind.
Lass es also mal netto 100 Kbyte Code sein, der "echter"
(funktionsspezifischer) Code ist, und den du disassemblieren möchtest,
und den du in deinem *.bin File genau lokalisieren könntest.
Ich kenne den Prozessor nicht, aber nimm mal pessimistischerweise an,
daß jeder Assemblerbefehl aus 4 Byte code besteht. Macht also ca. 25.000
Assembler-Befehle.
Alleine das disassembliert gibt einen Papierberg (1 Blatt mit 80 Zeilen
angenommen) von ca. 300 Seiten (25.000 / 80). Da kannst du lange drin
rumstöbern, um was sinnvolles zu entdecken ...
Nimm weiterhin an, daß dem ganzen ein C Programm zugrunde liegt, welches
jedes C-Elementarobjekt in (pessimistisch) 2-3 Assembler-Befehle
übersetzt. Damit hast du ein Programm von ca. 10.000 "C-Befehlen"
(Token), macht also locker ca. 30-50 "Seiten" reinen C-Quellcode.
für ein dokumentiertes Programm sind 2500 - 4000 "Lines of Code" (30x80
.. 50x80) sicherlich nichts erschreckendes, was man nicht warten oder
lesen könnte.
Es gibt aber durchaus auch "Programmier-Anfänger", welche es schaffen,
ein Programm von 30 Zeilen vollständig "unleserlich" und
"unverständlich" zu machen, so daß überhaupt nicht klar ist, was das
Prgramm macht.
Das "Disassemblat" liest sich ca. genau so schlecht oder noch schlechter
wie ein Programm von einem zuvor genannten Anfänger.
Und du glaubst ernsthaft, dein Kumpel könnte ein Disassembler-Listing
von ca. 300 Seiten "mal so eben" ansehen und wesentliche
Kontrollstrukturen (und Unterschiede zu einem anderen Objekt) erkennen?
Ach nein, es ist ja deutlich mehr, da ja Bibliotheken,
Laufzeitumgebungen etc. allse gnadenlos mit-disassembliert werden
sollen, der Kumpel liest da locker drüber hinweg.
Wenn dein Kumpel das kann, kann er bei freier Gehaltswahl beim
Geheimdienst oder in der Spionageabwehr etc. anfangen.
> ich denke Renesas ist halt nicht an Hobbyeletronikern interessiert.
Ich denke, kein kommerzieller Halbleiterhersteller ist an
Hobbyelektronikern interessiert. Wozu auch? Die paar hunderttausend
Hobbyelektroniker die es auf der Welt gibt mit ihrem Halbwisen sind
vollkommen uninteressant. Die paar hundert Millionen Geräte oder
Systemkomponenten, in denen deren Chips verbaut werden, sind "ein wenig"
interessanter.
Wegstaben Verbuchsler schrieb:>> Lass es also mal netto 100 Kbyte Code sein, der "echter"> (funktionsspezifischer) Code ist, und den du disassemblieren möchtest,> und den du in deinem *.bin File genau lokalisieren könntest.>> Ich kenne den Prozessor nicht, aber nimm mal pessimistischerweise an,> daß jeder Assemblerbefehl aus 4 Byte code besteht. Macht also ca. 25.000> Assembler-Befehle.>
Sehr vielen Dank.
Deine Bemühungen mir klar zu machen, das dies ein Lebenswerk werden wird
ist Dir gelungen. Mit meiner naiven Anfängermentalität habe ich auch
diesmal die Sache erheblich unterschätzt.
Ich hatte jedoch vor, wenn ich diesen Schritt des Disssemblierens
geschafft hätte, zwei Dateien miteinander zu vergleichen und " nur " die
Unterschiede näher zu Untersuchen. Mir gefallen nämlich so
Machenschafften wie diese oder ähnliche gar nicht.
http://www.youtube.com/watch?v=_hC-9qNrr0Y
Suchender