Advertisement
Guest User

Untitled

a guest
Dec 7th, 2013
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 1.21 KB | None | 0 0
  1. type
  2. TMem = Record
  3.  Addr : Pointer;
  4.  Size : PtrUInt;
  5. End;
  6.  
  7. var
  8.  continue : Pointer;
  9.  lastMM : TMemoryManager;
  10.  MM : TMemoryManager;
  11.  list: array of TMem;
  12.  listSize : Integer = 0;
  13.  
  14. procedure exitHandler;
  15. var
  16.  i : Integer;
  17. begin
  18.  for i:=0 to listSize-1 do
  19.  begin
  20.   lastMM.FreeMemSize(list[i].Addr, list[i].Size);
  21.  end;
  22.  
  23.  SetMemoryManager(lastMM);
  24.  SetLength(list, 0);
  25.  
  26.  asm
  27.   jmp continue
  28.  end;
  29. end;
  30.  
  31. function myGetmem(Size: PtrUInt):Pointer;
  32. begin
  33.  SetMemoryManager(lastMM);
  34.  SetLength(list, listSize+1);
  35.  SetMemoryManager(MM);
  36.  
  37.  list[listSize].Size := Size;
  38.  list[listSize].Addr := lastMM.Getmem(Size);
  39.  
  40.  myGetmem := list[listSize].Addr;
  41.  
  42.  inc(listSize);
  43. end;
  44.  
  45. procedure sethandler(sp:integer);
  46. begin
  47.  continue := Pointer(PPtrUInt(@sp)[8]);
  48.  Pointer(PPtrUInt(@sp)[8]) := @exitHandler;
  49. end;
  50.  
  51. Procedure MyProc;
  52. Var Data: PByte;
  53.     I   : uint16;
  54. Begin
  55.  sethandler(0);
  56.  GetMemoryManager(lastMM);
  57.  MM := lastMM;
  58.  MM.Getmem := @myGetmem;
  59.  SetMemoryManager(MM);
  60.  
  61.  Data := AllocMem(10);
  62.  
  63.  For I := 0 To 9 Do
  64.   Data[I] := Random(High(Byte));
  65.  
  66.  For I := 0 To 9 Do
  67.   Write(Data[I], ' ');
  68.  
  69.  Writeln;
  70. End;
  71.  
  72. Begin
  73.  MyProc;
  74.  
  75.  Writeln('-- end --');
  76.  Readln;
  77. End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement