Forum: PC-Programmierung Linux decompiler Debugger ?


von Samme (Gast)


Lesenswert?

Hallo
Ich hab vor vielen Jahren ein Programm in C Geschrieben und mit make 
Compiliert. Nun habe ich dieses Tool viele Jahre verwendet und in der 
Zeit den Quelltext verloren. (ich denke auf irgendeinem Backup ist er 
aber ich finde ihn nicht).
Jetzt würde ich gerne eine Zahl welche ich damals fest einprogrammiere 
verändern. Ich weiß noch die alte Zahl und ich weiß in welchem If 
Statement sie stand. Ich bin nicht der Pro Programmierer aber ich denke 
das ich die Stelle sicher auch in einem Asm code erkennen würde.
Gibt es einen decompiler in Linux (Ich habe kein Windows) welcher mir 
ermöglicht den Code minimal zu verändern und wieder abzuspeichern?

von René H. (Gast)


Lesenswert?

objdump -S --disassemble helloworld > helloworld.dump

Kann klappen, muss aber nicht.

Grüsse,
René

von Kaj G. (Firma: RUB) (bloody)


Angehängte Dateien:

Lesenswert?

Du kannst ein Tool wie z.B. Hopper oder radare2 benutzen um die Adresse 
im Binary zu finden, und dann koenntest du die entsprechende Stelle 
einfach mit einem Hexeditor bearbeiten, speichern, fertig.

Hopper (gibt auch eine Testversion):
https://www.hopperapp.com/

radare2:
https://radare.org/r/index.html

Hexeditor deiner Wahl, ich habs gerade mal mit Bless gemacht.

(schlechtes) Beispiel:
1
#include <stdio.h>
2
3
int main(void)
4
{
5
    int x = 42;
6
7
    printf("x ist %i\n", x);
8
9
    return 0;
10
}

Compiliert mit:
1
$ gcc -Wall -Wextra -O0 -o main test.c
1
$ ./main
2
x ist 42

Siehe Bilder:
Hopper aufmachen und Binary reinziehen, die entsprechende Zeile 
markieren (hopper_01.png) und dann im Menue "Window" auf Hexeditor 
umschalten. Die vorher markierte Zeile ist jetzt gestrichelt umrandet 
(hopper_02.png). Man kann die entsprechende Stelle hier bearbeiten und 
dann ueber "File -> Produce new  Executable" ein neues Binary erstellen 
lassen, welche die Aenderung enthaelt.
Ich glaube das bearbeiten und neu erstellen geht in der 
Hopper-Testversion nicht (Vollversion kostet ~100 Euro).

Aber du hast jetzt eine Bytefolge, nach der du mit einem Hexeditor 
suchen kannst. Stelle bearbeiten, speichern und fertig. :)

Die entsprechende Stelle findet man aber auch mit objdump, siehe mein 
Vorposter:
René H. schrieb:
> objdump -S --disassemble helloworld > helloworld.dump

Ab da ist das vorgehen dasselbe:
Stelle mit Hexeditor suchen, aendern, fertig. :)

: Bearbeitet durch User
von Jim M. (turboj)


Lesenswert?

Samme schrieb:
> Jetzt würde ich gerne eine Zahl welche ich damals fest einprogrammiere
> verändern.

Wenn die Zahl in irgend einer Form "Speziell" ist, muss sie im Kompilat 
nichtmal als Hexfolge auftauchen.

Außerdem könnte der Compiler durchaus auf die Idee gekommen sein, 
mehrere Kopien der Zahl im Code zu verwenden.

Man wird außer in tivialen Fällen nicht um eine Analyse des 
Dekompilierten Assemblers herum kommen.

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.