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).