Ich habe ein Programm, das ich mit GDB Patch muss. Das Problem ist, gibt es eine Zeile von Code, die eine" weniger als oder gleich Test "und schlägt fehl, das Programm zu verursachen mit einem Segmentierungsfehler zu enden Das Programm ist bereits kompiliert und ich habe die Quelle nicht, also kann ich den Quellcode offensichtlich nicht ändern Jedoch konnte ich mit GDB lokalisieren, wo der < = Test durchgeführt wird und dann konnte ich die Speicheradresse zu finden, das Sie unten sehen können.GDB Patching Ergebnisse "Zugriff auf Speicher bei Adresse 0x
(gdb) x/100i $pc
... removed extra lines ...
0x7ffff7acb377: jle 0x7ffff7acb3b1
....
Alles, was ich tun müssen, ist der Test ein ‚größer als oder gleich zu‘ ändern Test und dann sollte das Programm laufen gut. der Opcode für jle ist 0x7e und ich muss es zu 0x7d ändern nment gibt Anweisungen, wie dies zu tun, wie folgt:
$ gdb -write -q programtomodify
(gdb) set {unsigned char} 0x8040856f = 0x7d
(gdb) quit
Ich versuche es so und bekommen ...
$ gdb -write -q player
(gdb) set {unsigned char} 0x7ffff7acb377 = 0x7d
Cannot access memory at address 0x7ffff7acb377
ich verschiedene andere Speicheradressen und egal versucht haben, was ich versuche ich das bekommen Gleiche Antwort. Das ist mein einziges Problem, es ist mir egal, ob es die falsche Adresse oder der falsche Opcode-Befehl an diesem Punkt ist, ich möchte nur den Speicher ändern können.
I
Dank bin mit Linux Mint 14 über VMware Player
können Sie es in jedem anderen Hex-Editor auch tun (aber Adressen arbeiten ein wenig anders in gdb) – Blauhirn