Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#3

Re: [ASM] Speicher Reservieren

  Alt 5. Okt 2006, 19:42
Wenn du dich direkt an Windows wenden willt, dann mit diesen Funktionen:
VirtualAlloc und VirtualFree

eventuell könnte man auch Folgende verwenden:
GlobalAlloc, GlobalReAlloc und GlobalFree + GlobalLock und GlobalUnlock
oder
LocalAlloc, LocalReAlloc und LocalFree + LocalLock und LocalUnlock


Ansonsten kannst du auch die Funktionen von Delphi, also den Delphi-MemoryManager, ansprechen.
Das wären dann z.B. GetMem, ReallocMem, FreeMem, Get, Realloc, Free, SysGetMem, SysReallocMem, SysFreeMem, GetMemory, ReallocMemory, FreeMemory, New, Dispose und/oder was du sonst verwenden willst.


Also einfach die Parameter laden (per MOV, PUSH usw. - halt je nach Parameterübergabe) und dann per CALL aufrufen.

In ASM könntest du aber auch ä bissl was im Heap speichern, jedenfalls solange es nur innerhalb der Funktion/Procedur benötigt wird, oder in einer Unterfunktion/-prozedur.

Notfalls kannst es ja einfach mal in Pascal machen und dir dann den ASM-Code dazu ansehen.
Zum Letzen (Heap): einfach mal lokal Variablen in 'ner Funktion verwenden und gucken was Delphi daraus macht ^^

[add]
ähhhh ...
auslesen geht z.B. so:
Delphi-Quellcode:
mov eax, speicheraddr
mov edx, [eax+100]
oder besser/genauer gesagt
Delphi-Quellcode:
mov eax, speicheraddr
mov edx, dword ptr [eax+100]
ein einzelnes Byte natürlich
Delphi-Quellcode:
mov eax, speicheraddr
mov dl, [eax+100]
Delphi-Quellcode:
mov eax, speicheraddr
mov dl, byte ptr [eax+100]
[100] wäre ja das hundertste Byte vom gesammten virtuellen Speicherbereich ... und wenn du aufgepaßt hättest, dann wüstest du, das es dieses Byte nicht gibt (Speicherblock 0, also Byte 0 bis 65535 "existieren" nicht).
$2B or not $2B
  Mit Zitat antworten Zitat