Hallo,
nachwievor bin ich noch nicht auf eine Lösung gestoßen.
Die
Exception wird an der markierten Stelle angezeigt (bei der if-Abfrage).
Hat jemand eine Idee wie es dazu kommen kann oder einen Tipp wie ich das Problem in den Griff kriegen kann?
Grüße,
der Tom
Delphi-Quellcode:
procedure GetCodeMem(var ptr: PByte; size: integer);
var
page: PCodeMemPage;
block: PCodeMemBlock;
begin
//---allocates Block from executable memory
// executable memory is requested in pages via VirtualAlloc
// handed back in blocks of requested size
// determine if there is already a page assigned and
// that it has enough space requested block
page := CodeMemPages;
->>>if (page = nil) or (Longint(CodeMemPages^.CodeBlocks) - Longint(Pointer(CodeMemPages)) <= (size + 3*sizeof(PCodeMemBlock))) then
begin
// allocate new Page
page := VirtualAlloc(nil, PageSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
page^.next := CodeMemPages;
CodeMemPages := page;
// init pointer to end of page
page^.CodeBlocks := Pointer(Longint(page) + PageSize);
end;
//---blocks are assigned starting from the end of the page
block := Pointer(Longint(page^.codeBlocks) - (size + sizeof(PCodeMemBlock)));
block^.Next := page^.CodeBlocks;
page^.CodeBlocks := block;
ptr := @(block^.Code[0]);
end;