Thema: Delphi Offset bei AllocMem?

Einzelnen Beitrag anzeigen

Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#12

AW: Offset bei AllocMem?

  Alt 24. Sep 2013, 21:28
Hallo Plastewolf,

Ich will dir nicht zu Nah treten aber du wirst hier bei der Sache nicht weit kommen weil du scheinbar keinen Schimmer von ASM hast und was viel schlimmer ist keine Vorstellung vom Arbeitsspeicher hast und wie dort Werte oder auch Code gespeichert ist.

Code:
Code := StrToHex('MOV EDX,OFFSET '+NewOffset);

VirtualProtect('$42053B', 4, PAGE_EXECUTE_READWRITE, OldProtect);
PByte($0042053B)^ := Code;
Auch wenn du müde warst: Die Zeilen zeigen das ganz eindeutig. ASM sind keine Texte die im Arbeitsspeicher irgendwo stehen und dann ausgeführt werden. Du hast da eine vollkommen falsche oder gar keine Vorstellung von.
Such dir vllt. mal ein paar Tutorials zu dem Thema (hab grad mal kurz geguckt ob ich dir was raussuchen kann, hab aber auf die schnelle nichts gefunden).
Und dann schau dir vllt. mal eine .exe in einem Hex-Editor an. Du wirst du nicht viel erkennen/verstehen (können) außer vllt die Tatsache dass dort in der kompletten Datei keine
"mov eax, edx"-Strings o.ä. auftauchen.

Kurze Erklärung: Assembler Befehle sind auch nur Bytes (Zahlen) die im Speicher stehen. Wenn dort z.B. (ist nur Pseudeo-"Code" - habe jetzt nicht nachgeguckt wies wirklich wäre) folgendes steht

3E 00 0F

dann könnte das z.B. heißen

3E 00 0F
mov al, 15

wobei "3E" für den Prozessor dann z.B. bedeutet: jetzt kommt ein "mov"-Befehl. Die "00" bedeutet dann "Zielregister ist das Register mit dem Index 0 (-> AL)". und "0F" ist dann der Wert der in dieses Register geschrieben werden soll (also dezimal 15).

Generell musst du lernen/verstehen dass im Speicher überall nur Bytes stehen und der Prozessor notfalls auch deinen in er .exe gespeicherten Readme-Text als Befehle zu interpretieren versucht wenn er dort (fälschlicherweise) landen sollte. Genauso kann auch versucht werden Assembler-Code im Speicher als String interpretiert zu werden. Dabei kommt dann meistens im besten Fall irgendein Kauderwelsch raus.

Du kannst dir ggf. ja auch mal das Programm "OllyDbg" anschauen. Du wirst zwar überwältigt sein aber da siehst du dann auch beim genaueren hinschauen was ich mit dem oben geschriebenen gemeint habe.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat