Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Assembler -> HexCode (https://www.delphipraxis.net/45705-assembler-hexcode.html)

Muetze1 17. Mai 2005 09:22

Re: Assembler -> HexCode
 
Moin!

Wenn, dann schaut euch doch einfach die Befehlssatztabellen an die es bei den Herstellern gibt. Dort ist ganz genau beschrieben, wie welche Bits sich zusammensetzen und vor allem auch wie ihr diese Sprungoffsets berechnen müsst und einkodieren müsst. Da braucht ihr denn hier nicht lange zu rätseln.

Ansonsten ist in der Interrupt List von Ralf Brown eine opcodes.lst wodrin der grundlegende x86 Befehlssatz genauso enthalten ist samt Kodierungsregeln...

MfG
Muetze1

Phoenix 17. Mai 2005 10:46

Re: Assembler -> HexCode
 
Zitat:

Zitat von Boombuler
In welcher form hab ich die anzugeben 4 byte Integer oder wie? und wie war das noch mal erstes Bit ist Vorzeichen oder?

Nein. Die negativen Zahlen werden im Prozessor im sogenannten 2er Komplement dargestellt. Guckst Du hier.

brechi 17. Mai 2005 10:54

Re: Assembler -> HexCode
 
um einen ganz leichten API hook zu erstellen (ohne das man die vorherige funtkion wieder callen kann):

Delphi-Quellcode:
function myfunc(a,b,c,d: pchar); stdcall;
begin
  //...
end;

var p: pointer;
    old: cardinal;
begin
  p := GetProcAddress(GetModuleHandle('user32.dll'),'MessageBoxA'); //dynamische adresse holen
  if VirtualProtect(p,5,PAGE_EXECUTE_READWRITE,old) then           //schreibzugrif holen
  begin
    pbyte(integer(p)+0)^ := $E9;                                   //$E9 opcode für jump, gewohnheit, pbyte(p)^ := $E9 geht auch
    pinteger(integer(p)+1) ^ := integer(@myfunc)-integer(p)-5;     //distanz berechnen
  end;
end;

will man von adresse 4200 zu 4300 springen so wird gerechnet:
4300 -4200-5 = 95

wenn man das als integer macht wie im obigen beispiel bruach man sich um negative distanzen nicht mehr kümmern,
das funktioniert wegen dem überlauf schon so (bzw integer kann auch negative zahlen darstellen)

Boombuler 17. Mai 2005 11:54

Re: Assembler -> HexCode
 
Wollt nur noch mal klar stellen im Prinzip geht es mir darum einen mini-Assembler Parser zu basteln...


Greetz
Boombuler...

brechi 17. Mai 2005 12:05

Re: Assembler -> HexCode
 
na dann viel spass, ich habs mal versucht

http://www.delphipraxis.net/internal...ct.php?t=53957

1/3 aller befehle hab ich ca.

Boombuler 17. Mai 2005 12:59

Re: Assembler -> HexCode
 
Kurze frage noch hat jemand n plan wo ich die Befehlssätze herbekomme??

Thx

Greetz
Boombuler

DGL-luke 17. Mai 2005 13:15

Re: Assembler -> HexCode
 
Von deinem Freund:

http://www.cs.uu.nl/wais/html/na-dir...ral/part1.html

punkt fünf, liste der opcodes.

bzw. direkt:

http://developer.intel.com/design/pe...als/243191.htm

Boombuler 17. Mai 2005 13:32

Re: Assembler -> HexCode
 
Thx mein freund scheint google nich gewesen zu sein oder ich war mal wieder zu blöd zum googlen...

Dann werd ich mich da mal ransetzten... Vielleicht gibbet ja mal ne Unit die ich hier poste wenn ich "fertig" bin!

Greetz
Boombuler

PS: Alle 25 Jmp befehle kann ich schon mal übersetzten :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:20 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz