2013-04-15 5 views
5

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

+0

können Sie es in jedem anderen Hex-Editor auch tun (aber Adressen arbeiten ein wenig anders in gdb) – Blauhirn

Antwort

2

Cannot access memory at address 0x7ffff7acb377

Sie versuchen, an eine Adresse zu schreiben, wo einige Bibliothek wohnt geteilt. Sie können herausfinden, welche Bibliothek mit info sym 0x7ffff7acb377 ist.

Zu der Zeit, wenn Sie den Patch auszuführen versuchen, war die die gemeinsam genutzte Bibliothek hat nicht noch geladen, die die Nachricht erhalten, erklärt.

Führen Sie das Programm zu main. Dann sollten Sie in der Lage sein, an die Adresse zu schreiben. Sie müssen jedoch eine Schreibberechtigung für die Bibliothek haben, damit Ihr Schreibvorgang "kleben" bleibt.

+0

Danke, das hat mein Problem gelöst. Ich musste schließlich an eine andere Adresse schreiben, die nicht Teil einer gemeinsamen Bibliothek war, aber das führte mich dazu, herauszufinden, wo/wie ich Dinge ändern musste. Vielen Dank! –

Verwandte Themen