Forum: Mikrocontroller und Digitale Elektronik Hex Datei entschlüsseln


von Alexander M. (alexcsi)



Lesenswert?

Hallo,
Habe mir vor ca.6 Jahren eine LCD Anzeige mit Ladedruck, Öldruck, 
Öltemperatur, Ansaugluft usw. gebaut, nun habe ich die LCD Anzeige von 
2x16 auf eine 4x20 umgebaut, jetzt Funktionieren nur die oberen zwei 
Zeilen, jetzt habe ich den PIC16F877A ausgelesen und kann leider die Hex 
Datei nicht Decodieren, habe jetzt die Person angeschrieben wo das 
Programm geschrieben hat, bei ihm ist leider vor 2 Jahren die Festplatte 
kaputtgegangen und damit auch der Originalquellcode.
Habe schon viele Stunden Gegoogelt aber nichts gefunden.
Wie kann ich noch die Hex Datei decodieren?

von MaWin (Gast)


Lesenswert?

Alexander M. schrieb:
> habe jetzt die Person angeschrieben wo das Programm geschrieben hat, bei
> ihm ist leider vor 2 Jahren die Festplatte kaputtgegangen und damit auch
> der Originalquellcode.

Komisch das dies immer nur dann passiert wenn man selbst nicht der 
Urheber ist

von Thomas Z. (usbman)


Lesenswert?

Niemand jpg kann man nicht entschlüsseln. Warum baust du nicht einfach 
wieder ein 2x16 Display ein?
Thomas

von holger (Gast)


Lesenswert?

>Wie kann ich noch die Hex Datei decodieren?

Das ist so als würde man versuchen aus einem Hamburger wieder ein Rind
zu machen. Mit ein bißchen kneten geht das wohl, sieht aber nicht
wie das Original aus;)

von Alexander M. (alexcsi)


Lesenswert?

MaWin schrieb:
> Alexander M. schrieb:
>> habe jetzt die Person angeschrieben wo das Programm geschrieben hat, bei
>> ihm ist leider vor 2 Jahren die Festplatte kaputtgegangen und damit auch
>> der Originalquellcode.
>
> Komisch das dies immer nur dann passiert wenn man selbst nicht der
> Urheber ist

Das Liegt daran das man nicht Programmieren kann.
Ich möchte das alle 4 Werte angezeigt werden ohne dass man einen Taster 
betätigen muss damit die anderen werte angezeigt werden.

von Joe F. (easylife)


Lesenswert?

Du möchtest also auch die Programmfunktion grundlegend ändern.
Wenn der Originalquellcode nicht mehr da ist, hilft wohl nur noch das 
Programm komplett neu zu schreiben.
Mit der .hex Datei ist da nicht viel anzufangen.

von Stefan F. (Gast)


Lesenswert?

Ohne Quelltext kann niemand das Programm ändern. Das Programm muss man 
wohl komplett neu entwickeln.

Beitrag #5974608 wurde von einem Moderator gelöscht.
Beitrag #5974611 wurde von einem Moderator gelöscht.
Beitrag #5974615 wurde von einem Moderator gelöscht.
von Rainer V. (a_zip)


Lesenswert?

Alexander M. schrieb:
> und kann leider die Hex
> Datei nicht Decodieren, habe jetzt die Person angeschrieben wo das
> Programm geschrieben hat, bei ihm ist leider vor 2 Jahren die Festplatte
> kaputtgegangen und damit auch der Originalquellcode.
> Habe schon viele Stunden Gegoogelt aber nichts gefunden.

Ja, schade...dumm gelaufen! Wenn du selbst keinen Schimmer vom 
Programmieren hast, dann bau' die Anzeige einfach zurück und bleibe 
glücklich.
Gruß Rainer

von Michael (Gast)


Lesenswert?

Er soll Fotos vom Aufbau und Schaltplan posten

von holger (Gast)


Lesenswert?

>Als es mir gestern schon mehrfach auffiel

Nur gestern? Das macht der seit Jahren schon so;)

von Ben (Gast)


Lesenswert?

Alexander M. schrieb:
> Ich möchte das alle 4 Werte angezeigt werden ohne dass man einen Taster
> betätigen muss damit die anderen werte angezeigt werden.

Baue die Zweiteilen Anzg. wieder ein und statt Taster, einen Timer der 
im bestimmten Intervall die Werte umschaltet. Oder mache mit einen 
zusätzlichen Microk. einen Zeilensprung auf deiner 4Zeilen Anzeige...

Beitrag #5974721 wurde von einem Moderator gelöscht.
Beitrag #5974760 wurde von einem Moderator gelöscht.
Beitrag #5974762 wurde von einem Moderator gelöscht.
Beitrag #5974766 wurde von einem Moderator gelöscht.
Beitrag #5974769 wurde von einem Moderator gelöscht.
von Sebastian S. (amateur)


Lesenswert?

Vergiss es!

Es ist nicht damit getan, eine 2 in eine 4 zu verändern.

Das ist Unabhängig davon ob Du in der Lage bist die Stelle zu finden, an 
der Du kitzeln musst.

Einzige Ausnahme: Du bist ein direkter Nachfahre des Korinthers 
Sisyphos. Für den währe das der richtige Job.

Übrigens: Mit den richtigen Tools ist es gar nicht mal so schwer, den 
Inhalt eines Hex-Files zu disassemblieren.
Ob Du aber damit etwas anfangen kannst steht auf einem anderen Blatt.

Beitrag #5974782 wurde von einem Moderator gelöscht.
von Thomas Z. (usbman)


Lesenswert?

Sebastian S. schrieb:
> Übrigens: Mit den richtigen Tools ist es gar nicht mal so schwer, den
> Inhalt eines Hex-Files zu disassemblieren.

hat er mit dem IDA doch. Allerdings muss man damit auch umgehen können. 
So als Hinweis: die Tasten <a> <p> <d> <u>
und immer schön sichern es gibt kein undo in IDA

Thomas

von Sebastian S. (amateur)


Lesenswert?

>hat er mit dem IDA doch. Allerdings muss man damit auch umgehen können.
Eigentlich wollte ich auf etwas anderes hinaus.

Das Beste, das Du bekommen kannst ist eine schier endlose Kette von 
Assemblerbefehlen, bei denen Du noch die Unterscheidung treffen musst, 
was ist jetzt wirklich Befehl und was sind Daten. Die ursprüngliche 
Struktur, egal ob aus Assembler oder C-Code existiert ja nicht mehr.
Erst wenn Du das auseinander klamüsert hast, kannst Du Dich daran machen 
die Stelle zu finden, wo es juckt.

Also ohne einiges an Übung: Ein Job für den guten alten Sisyphos.

Beitrag #5974824 wurde von einem Moderator gelöscht.
von Stefan F. (Gast)


Lesenswert?

Es fängt schon damit an, dass du einige zig Kilobytes an Daten hast, 
ohne dass deren Bedeutung und Struktur irgendwo erklärt wäre.

Du siehst am Code, dass er z.B. zwei Bytes von Position 32452135412 und 
124123 addiert und das Ergebnis nach 215153523 schreibt.

Was sagt einem das? Nichts. Und so wird das durch den ganzen Code gehen. 
Mit zig tausenden von Anweisungen.

Wenn man wenigstens die Namen der Variablen und Sprungmarken (bzw. 
Funktionen) hätte. Aber so ein Maschinencode gibt das nicht her.

von Bernd K. (prof7bit)


Lesenswert?

Alexander M. schrieb:
> habe jetzt die Person angeschrieben wo das
> Programm geschrieben hat, bei ihm ist leider vor 2 Jahren die Festplatte
> kaputtgegangen und damit auch der Originalquellcode.

Wenn man sowas in Auftrag gibt vereinbart man vorher(!) immer auch die 
Übergabe aller notwendigen Quelldateien und bei der Übergabe überzeugt 
man sich davon daß es auch kompiliert und keine einzige Datei fehlt. Nur 
so als Tipp für die Zukunft.

: Bearbeitet durch User
von Karl B. (gustav)


Angehängte Dateien:

Lesenswert?

Sebastian S. schrieb:
> Übrigens: Mit den richtigen Tools ist es gar nicht mal so schwer, den
> Inhalt eines Hex-Files zu disassemblieren.
> Ob Du aber damit etwas anfangen kannst steht auf einem anderen Blatt.

Hi,
die strukturierenden Kommentare fehlen dann. Bin immer noch dabei,
den 2500 Zeilen-Uhren-Hex vom disassemblierten File zu einem lesbaren
ASM-File umzuwandeln. Die Registernamen erscheinen nicht, wie man es 
gewohnt ist, mit Funktionsbeschreibung. Man muss im Dabla nachsehen, was 
der Code bedeutet. Und was noch viel teuflischer ist, die Sprünge werden 
nicht als Labels ausgeführt. Die Sprungweite in hexadezimal angegeben 
und Einbyte-Zweibyte-Dreibyte-Befehle "springen" anders. Spätestens nach 
Label 64 gebe ich es auf.

Und dann noch Im EEPROM Sprung ins Nirgendwo mit STD Store with 
displacement.
Kannte ich bis dato überhaupt noch nicht.

ciao
gustav

: Bearbeitet durch User
von svensson (Gast)


Lesenswert?

Stefanus F. schrieb:
> Es fängt schon damit an, dass du einige zig Kilobytes an Daten hast,
> ohne dass deren Bedeutung und Struktur irgendwo erklärt wäre.

Wenn die Screenshots oben alles richtig zeigen, dann hat er 8 kB 
Programm. Das wäre aber immer noch mehr als genug.

Bernd K. schrieb:
> Wenn man sowas in Auftrag gibt

Wahrscheinlich handelt es sich um Code, der in irgendeiner Community 
publiziert wurde, damit man sich das Gerät nachbauen kann.

von Georg (Gast)


Lesenswert?

Karl B. schrieb:
> Und was noch viel teuflischer ist, die Sprünge werden
> nicht als Labels ausgeführt

Das ist allerdings schwach. Ein Disassembler könnte selbstverständlich 
Labels erzeugen, die heissen dann halt Label0001, Label0002 usw., aber 
das ist schon viel besser lesbar. Aber wenn das dein Tool nicht kann, pk 
(Pech kett).

Georg

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Ich habe mich recht lange mit dem Disassemblieren von x86-Code (Viren) 
beschäftigt. Das schwerste finde ich ist zu unterscheiden, was Daten und 
was Code ist. Das schaffen die Disassembler oft nicht zu trennen, man 
muß sich den Anfang und das Ende der Programmteile selbst raussuchen und 
entsprechend definieren. Wenn sich der Programmierer Späße gönnt wie 
etwa seinen Daten irgendwo in den Code einzustreuen und dann auch noch 
zu verschleiern (einfache Verschlüsselung reicht), wird das recht 
umfangreich.

Die Disassembler können durchaus Labels im Quellcode setzen, was fehlt 
sind sinnvolle Bezeichnungen und natürlich alle Kommentare. Funktionen 
erkennt man recht schnell (push/pop's und der Rücksprung am Ende).

Allerdings ist das was der TE hier vor hat schon eine recht große 
Änderung am Programm (anderes Display). Wenn das nicht von Anfang an ein 
Assembler-Programm war (etwa C), wird das sportlich. Das ist etwas mehr 
als z.B. einen Schutz auszuhebeln oder so, wo man im einfachsten Fall 
nur einen Sprungbefehl löschen muß.

von Jens G. (jensig)


Lesenswert?

Naja, wenn die zwei Ausgaben, die mit Taste umschaltbar sind, jeweils in 
einem Ritt rausgeschrieben werden, dann ist das ja sicherlich nur eine 
kleine Schleife, die die 32 Zeichen rausschreibt. Die kann man ja 
aufbohren auf seine 80 Zeichen, und beide Teilstrings rausschreiben 
lassen. So richtig aufwendig betrachte ich die letztendliche Lösung also 
gar nicht, aber dafür die Analyse des Codes vorher.
Wenn man's schlau anfängt, dann fängt man als erstes beim Schaltplan an, 
bzw. bei den Displayanschlüssen, um die Displayports/Pins rauszufinden. 
Dann muß man eigentlich nur die Stelle im Code suchen, wo diese Pins 
manipuliert werden. Dann hat man schonmal den Anfang für das Loshangeln.
Für die Taste dann genau so.
Natürlich bleibt das rel. großer Aufwand, aber wenn man Ahnuung vom 
genutzten LCD und µC hat, und Gedult, kann das sicherlich 
vergleichsweise schnell gehen.

von Stefan F. (Gast)


Lesenswert?

Ich finde, ihr solltet dem TO keine falschen Hoffnungen machen. Er kann 
es nie und nimmer und ihr wollte es sicher nicht für ihn machen - selbst 
wenn ihr könntet.

Also ist das Vorhaben damit gestorben.

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Das Programm neu zu schreiben geht vermutlich schneller, selbst in 
Assembler.

Was ist das eigentlich für ein neues 4x20 Display? Kommt das weiterhin 
mit einem einzigen Enable-Eingang aus oder wird da auch noch eine 
Änderung an der Hardware fällig?

Wenn es ein 4x20 mit nur einem Controller ist, könnte man zwischen den 
Zeilen auch einfach einen Haufen Leerzeichen schreiben um die nächsten 
beiden Zeilen zu erreichen. Die meisten Displays tolerieren es, wenn man 
auf diese Weise den RAM-Bereich überschreibt.

von Thomas Z. (usbman)


Lesenswert?

Ben B. schrieb:
> Das Programm neu zu schreiben geht vermutlich schneller, selbst in
> Assembler.

das sowieso. Der TO kann das aber vermutlich nicht.

4x20 haben genauso wie 40x2 Displays nur einen Enable. Zwei Enable sind 
erst bei Displays mit mehr als 80 Zeichen notwendig. Dann sind einfach 2 
Controller verbaut.

Thomas

von Alexander M. (alexcsi)


Angehängte Dateien:

Lesenswert?

Das mit dem Timer ist ein guter Tipp, mir fehlt leider die Zeit um mich 
in das Programmieren einzuarbeiten, wenn ich Täglich nur ca.1 Stunde 
Zeit habe komme ich da nicht weit, und wenn ich es schaffen würde das 
Programm zu schreiben, dann währe es noch ein aufwand alles abzustimmen 
damit die Werte ziemlich genau sind wieder.

: Bearbeitet durch User
von Thomas Z. (usbman)


Lesenswert?

Naja wenn ich mir den Schaltplan so anschaue...
Vermutlich ist der Code auch so strukturiert. Der Taster ist auch 
nirgens zu sehen, und das Hexfile immer noch nicht da.....
Was erwartest du also genau von uns?

Thomas

von Joe F. (easylife)


Lesenswert?

Alexander M. schrieb:
> nun habe ich die LCD Anzeige von
> 2x16 auf eine 4x20 umgebaut

Alexander M. schrieb:
> jetzt die Person angeschrieben wo das
> Programm geschrieben hat, bei ihm ist leider vor 2 Jahren die Festplatte
> kaputtgegangen und damit auch der Originalquellcode.

Alexander M. schrieb:
> und wenn ich es schaffen würde das
> Programm zu schreiben, dann währe es noch ein aufwand alles abzustimmen
> damit die Werte ziemlich genau sind wieder.

Angesichts obiger Gegebenheiten denke ich, das ursprüngliche 2x16 
Display wieder einzubauen und es damit dann auch gut sein zu lassen wäre 
wohl gar nicht so schlecht.

von Peter M. (r2d3)


Lesenswert?

Hallo Alexander M.!

Alexander M. schrieb:
> Das mit dem Timer ist ein guter Tipp, mir fehlt leider die Zeit um mich
> in das Programmieren einzuarbeiten, wenn ich Täglich nur ca.1 Stunde
> Zeit habe komme ich da nicht weit, und wenn ich es schaffen würde das
> Programm zu schreiben, dann währe es noch ein aufwand alles abzustimmen
> damit die Werte ziemlich genau sind wieder.

Aber die anderen haben die Zeit, die Du nicht aufbringen kannst/willst?
Vielleicht solltest Du jetzt mal sagen, was Dir diese Auftragsarbeit 
wert ist.
Des Weiteren solltest Du den Mitforisten mal die Datenblätter aller 
Sensoren verlinken.

Wenn man die Kiste nachbaut, muss man sich schon etwas einfallen lassen, 
um die korrekte Berechnung der Werte der Drucksensoren überprüfen zu 
können.

Offensichtlich hat Dein Gerät ja einen Taster zur Umschaltung der 
Bildschirmanzeige, den ich auf dem Schaltplan nicht gefunden habe.

Wer das drauf hat, findet die Abfrage des Schalters, patcht die heraus 
und kombiniert die beiden Routinen für die beiden Sensorsichten in eine 
neue, die alle vier Zeilen ausnutzt.

Irgendwie bist Du mir aber nicht ganz glaubwürdig. Einerseits behauptest 
Du, nicht programmieren zu können, andererseits veröffentlichst Du hier 
Screenshots von IDA Pro? Das passt einfach nicht zusammen.

Andererseits lieferst Du Informationen in der altbekannten 
Anfänger-Salamitaktik.

: Bearbeitet durch User
von Alexander M. (alexcsi)


Angehängte Dateien:

Lesenswert?

Sorry, habe vergessen das ich die schon rausgenommen habe, Programmieren 
kann ich ein wenig ist halt 20Jahre her, sprich verlernt da ich seit der 
Ausbildung nicht mehr was damit zu tun hatte, aus diesem Grund behaupte 
ich das ich es nicht kann.

Zum Thema Zeit, mir fehl eben die Zeit da ich alleinerziehend bin und 
nach der Arbeit ich meine Tochter von der Schule hole und es mir 
wichtiger ist für sie da zu sein, daher habe ich gehofft das man mit der 
Hex Datei noch was anfangen kann damit eben nicht so viel Zeit in 
Anspruch genommen wird.
Werde die Taster jetzt nochmal einfügen und hochladen.

von Joe F. (easylife)


Lesenswert?

Und warum nimmt man sich als so viel beschäftigter Mensch solche total 
unwichtige (und aussichtlose) Projekte vor?

: Bearbeitet durch User
von Alexander M. (alexcsi)


Angehängte Dateien:

Lesenswert?

Habe jetzt die Taster eingefügt.

von Alexander M. (alexcsi)


Lesenswert?

Um mal abzuschalten und Abends nicht als vor dem Fernseher zu hengen.

von Thomas Z. (usbman)


Lesenswert?

Alexander M. schrieb:
> Um mal abzuschalten und Abends nicht als vor dem Fernseher zu hengen.

du bist echt ein Held. Welcher Taster ist jetzt zum Umschalten das 
Displays?
Was ich dir schon sagen kann. Das Ding besteht aus 26 Unterprogrammen 
und einer großen Mainschleife. Ziemlicher Spageticode
Der Code gebt bis knapp unter 0x1000.

Woher ich das habe?
Ich hab das Ding mal 5 min in IDA angeschaut und eben nicht vor dem 
Fernseher gehengt. Wer das programmiert hat hat hat auch nicht so den 
Durchblick.

Thomas

: Bearbeitet durch User
von Bernd K. (prof7bit)


Lesenswert?

Thomas Z. schrieb:

> Ich hab das Ding mal 5 min in IDA angeschaut und eben nicht vor dem
> Fernseher gehengt. Wer das programmiert hat hat hat auch nicht so den
> Durchblick.

Du scheinst hingegen den mega Durchblick zu haben. 5 Minuten aufs 
Hexfile geschaut und schon kannst du Kaffeesatz lesen und Aussagen über 
den Programmierer orakeln. Was für ein dummes Geschwätz hier 
gelegentlich auftaucht ist schon echt bemerkenswert.

von Thomas Z. (usbman)


Lesenswert?

Bernd K. schrieb:
> 5 Minuten aufs
> Hexfile geschaut und schon kannst du Kaffeesatz...

lern lesen bevor du solchen mist schreibst...
wo steht dass ich aufs Hexfile geschaut habe? Ich habs einfach in IDA 
geladen. Wenn du nicht weist was das ist dann geh googlen.
Ich arbeite lange genug mit dem IDA um eine Aussage über die über die 
Codequalität zu machen.

Thomas

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

37kB .hex?? Sorry aber da kämpfe ich mich nicht durch. Bis ich damit 
fertig bin, habe ich das Programm ja dreimal neu geschrieben.

Die .hex für das Terminal meiner Alarmsau ist nur 8kB groß und das kann 
vermutlich mehr als diese Anzeige. Ist aber auch ein AVR und kein PIC, 
der AVR kann deutlich mehr was Assemblerbefehle angeht. War mein 
Hauptgrund zu den AVRs zu wechseln obwohl ich mit dem PIC angefangen 
habe.

von Thomas Z. (usbman)


Angehängte Dateien:

Lesenswert?

ist etwas weniger als 4k. Der Rest sind wohl Tabellen
IDA zeigt 26 kurze Unterprogramme (insgesammt 500bytes) und eine 
Mainschleife mit etwa 3.3kb  Also eher wenig Code.

Thomas

von Stephan (Gast)


Lesenswert?

Nur mal so.... wenn der Eingang für den Taster durch ein externen 0,5 
oder 1Sek Impuls  getaktet würde, dann hätte er doch was er will. Beide 
Anzeigen ohne Drücken zu müssen. Nur nicht gleichzeitig :-o

von Freizeitfrickler (Gast)


Lesenswert?

Das sieht doch schon ganz gut aus. Ich hab' früher auch ab und zu mal 
Code disassembliert, allerdings mehr 68k Plattform (Amiga).

Da konnte man am Code teilweise schon erkennen mit welchem C-Compiler er 
übersetzt war, und Compilercode ist nochmal eine andere Herausforderung 
zu verstehen.

Sofern dieses Programm hier in ASM geschrieben wurde, sollte man es doch 
relativ leicht verstehen können, Thomas hat ja schon gute Arbeit 
geleistet.

Als absoluter No-PICler bin ich aber hier definitiv raus.

von vn nn (Gast)


Lesenswert?

Thomas Z. schrieb:
> Ich arbeite lange genug mit dem IDA um eine Aussage über die über die
> Codequalität zu machen.

Ach? Na erzähl mal. Lass uns doch mal teilhaben an deinem unglaublichen 
Wissen, wie du aus Code, der von einem optimierenden Compiler erzeugt 
wurde, auf den Programmierer schließen kannst.

von Thomas Z. (usbman)


Lesenswert?

vn nn schrieb:
> Thomas Z. schrieb:
>> Ich arbeite lange genug mit dem IDA um eine Aussage über die über die
>> Codequalität zu machen.
>
> Ach? Na erzähl mal. Lass uns doch mal teilhaben an deinem unglaublichen
> Wissen, wie du aus Code, der von einem optimierenden Compiler erzeugt
> wurde, auf den Programmierer schließen kannst.

von welchem Compiler redest du genau? Das Teil wurde in Assembler 
geschrieben. Bei einem C Compiler würde man Libcode im dissam flile 
finden. Zumindest wäre startup code zu identifizieren.Der IDA kann 
solche Codeausschnitte finden und markieren. (flirt) Jede Art von 
Compiler hinterläßt immer einen Fingerabdruck im Code.

Kein C Programmierer würde alles in main packen.

@Freizeitfrickler
ich hab keine Vorarbeit reingesteckt, was ich gezeigt habe ist der 
initiale IDA Output. Die Arbeit würde von dieser Basis erst beginnen.

Thomas

von Bernd K. (prof7bit)


Lesenswert?

Thomas Z. schrieb:
> Kein C Programmierer würde alles in main packen.

Wenn er keine Interrupts benutzt ist zwangsläufig alles in main()

von c-hater (Gast)


Lesenswert?

Bernd K. schrieb:

> Wenn er keine Interrupts benutzt ist zwangsläufig alles in main()

Er meint hier nicht den Interrupt-Level, auf dem die Abarbeitung 
passiert, sondern die Struktur des Codebaums auf dem Main-Level, also 
all das, was sich nicht in ISRs abspielt.

Compiler neigen z.B. dazu, unnütze, zeitraubende Unterprogrammaufrufe zu 
realisieren. Und man kann es ihnen nur begrenzt abgewöhnen. Selbst bei 
der Optimierung auf Geschwindigkeit bleiben fast immer solche Artefakte 
über. Nur bei sehr trivialen Programmen schaffen es die besten Compiler, 
diese unnützen Redundanzen selbstständig vollständig zu eleminieren.

Dabei ist die Optimierung eines Codebaums noch ihre stärkere Seite. Das 
richtige Elend zeigt sich meist in der Optimierung des Waldes, der sich 
aus den Codebäumen von main und jeder ISR ergibt. Das ist meist richtig 
grottig, denn das können Compiler nicht selbstständig optimieren. Nur 
gute Kenner des jeweiligen Compilers können unter Verwendung (natürlich 
nichtportabler) Features des jeweiligen Compilers hier noch etwas 
retten...

Es gibt aber noch viel mehr typische Compiler-Artefakte, nicht nur 
Unterprogrammaufrufe. Ein gelernter Assemblerprogrammierer erkennt im 
Disassemblat sofort, ob der Code von einem Compiler stammt, von einem 
Assembler-Anfänger oder von einem Assembler-Profi. I.d.R. kann man sogar 
recht leicht erkennen, von welchem Compiler der Code stammt, allerdings 
natürlich nur, wenn man den typische Output des Compilers für die 
jeweilige Plattform bereits vorher kennt.

von Boris (Gast)


Lesenswert?

"Compiler neigen z.B. dazu, unnütze, zeitraubende Unterprogrammaufrufe 
zu
realisieren."

Das ist die Meinung eines armen Tropfs, der sich weder in der Informatik 
noch im Compilerbau auskennt. Also genau richtig für die Seite 
mikrocontroller.net.

von Bernd K. (prof7bit)


Lesenswert?

c-hater schrieb:
> Compiler neigen z.B. dazu, unnütze, zeitraubende Unterprogrammaufrufe zu
> realisieren. Und man kann es ihnen nur begrenzt abgewöhnen.

Also Du scheinst einen komischen Compiler zu haben, der den ich benutze 
neigt dazu alles zu inlinen was nicht bei 3 auf dem Baum ist oder 
mehrfach aufgerufen wird und selbst dann inlined er manchmal wenn die 
Funktion kurz genug ist.

Daran kann ich ihn nur mit expliziten Funktionsattributen oder anderen 
schmutzigen Tricks hindern für den seltenen Fall dass ich das wirklich 
mal verhindern will. Normalerweise find ich es aber absolut 
begrüßenswert daß er inlined was zu inlinen geht, selbst über 
Modulgrenzen hinweg und durch 3 Wrapper-Schichten hindurch.

Als ich mir mal den Spaß gemacht habe zum Zeitvertreib einen Startupcode 
in C zu schreiben hat er kurzerhand die ganze main und alles was sie 
aufrief in einem einzigen langen Schlauch direkt in den reset-Vektor 
geinlined.

In der Regel ist der Maschinencode der rauskommt wenn der Compiler und 
der Linker mit allen Optimierungen fertig sind eine vollkommen 
unleserliche strukturlose Instruktionsbuchstabensuppe bei der 
Anweisungen sich verschoben haben oder weit auseinandergezogen und mit 
anderen verflochten wurden und hat mit der Struktur des Quelltextes 
praktisch nichts mehr gemein und einzelne Anweisungen lassen sich auch 
kaum noch explizit einzelnen Quelltextzeilen zuordnen, bestenfalls noch 
ganz grob daß diese oder jene Instruktionswolke irgendwo zum Dunstkreis 
dieser 5 Codezeilen gehören muss (und auch zu jenen 2 weiter unten und 
auch zum Schleifenkopf weiter oben denn von dem steckt auch noch ein 
Fetzen irgendwo mitten drin), liebevoll interleaved und verknotet mit 3 
anderen Sachen gleichzeitig und dann wieder langgezogen daß die Knoten 
zugehen. So extrem wird der Code zerhäckselt und neu gemischt.

: Bearbeitet durch User
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.