Speicheradressenumrechnung zu Hexadressen ?

Hallo zusammen!

Ich haber folgendes Problem:

Unter Linux habe Ich ein Programm disassembliert (mit dasm),um dort was nachzuschauen, jedoch werden hier Speicheradressen(-stellen) wie z.B. 08160000 angegeben, wenn ich aber diese ändern möchte (Einträge wie z.B. jne in je (Sprungbefehle)abändern), so möchte Ich dies mit einem Hexeditor machen, der jedoch eine völlig andere Numerierung (Speichersadresse?) hat (das ist wohl der sogenannte „Offsetwert“, der Adresse den man hier braucht, jedoch weiß ich nicht, wie ich zu diesem komme (vom Assemblerlisting) wie berechnet man einen solchen Offsetwert? oder gibt es dafür etwa tools unter linux? welche werte sind ausschlaggebend? (Ich habe lediglich im listing gesehen, daß die Startadresse 0804c280 sein soll (dies ist aber doch nicht die Adresse vom Programmanfang?) ist dieser wert trotzdem irgendwie interesant?

Bitte helft mir!

Danke schon mal im vorraus

Na da will wohl einer Programme aendern ?
Hab ich zwar unter Unix noch nicht gemacht, aber ich denke, dass das genau wie unter Win geht.
Im Assembler bekommst Du den Speicheroffset der Befehle im RAM angezeigt. Im Hexeditor zeigt man Dir die Nummer des entsprechenden Bytes vom Dateianfang. Worauf ich nun eigentlich hinaus will -> der Offset in der Datei hat nichts mit der spaeteren Position im RAM zu tuen. Bei Win - Exen ist am Anfang noch 'ne Menge Header, wo drin steht, was wohin in den RAM geladen werden soll usw.
Kurze Rede langer Unsinn-> Offset im RAM nuetzt Dir nichts.
Ich habs immer so gemacht:

  • dissamssembliert und Code im Assembler geaendert (geht hier nur im RAM - nicht in Datei)
  • im Assembler die Aenderung getestet
  • Wenns funktioniert hat, habe ich mir die OP- Codes des alten Befehls und einer Reihe von umliegenden Befehlen (Bytefolge) notiert.
  • OP-Code fuer Ersatzbefehl notieren
  • diese OP-Codes des alten Befehls und der umliegenden Befehle habe ich im Hex-Editor suchen lassen (je mehr umliegende Befehle, desto besser)
  • „Den“ Befehl andern (zB. jz->jnz)
    speichern und fertig.

Achtung !!!

Die OP-Codes der Befehle haben unterschiedliche Laengen, deshalb kannst Du nur einen Befehl mit einem gleich langen oder kuerzeren Befehl ersetzen. Wenn Du einen kuerzeren Befehl verwendest, musst Du mit NOP auffuellen.

Viel Spass !

Andreas