Linux decompiler Debugger ?

Gast #5295416
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?
(Firma: RUB) #5295505
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. :)
Angehängte Dateien:
#5295759
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren