1. 程式人生 > >【Delphi】Linux版的IsBadReadPtr

【Delphi】Linux版的IsBadReadPtr

linux上沒有提供使用者態的記憶體指標讀寫安全檢測函式,這裡使用異常包來簡單實現IsBadReadPtr:

{$IFDEF UNIX}
function IsBadReadPtr(lp: Pointer; ucb: UINT): BOOL; stdcall;
begin
  try
    while ucb>0 do
    begin
      if PChar(lp)[ucb-1] <> #0 then
        dec(ucb)
      else
        dec(ucb);
    end;
    Result := False;
  except
    Result := True;
  end;
end;
{$ENDIF}

  IsBadWritePtr就不實現了,否則若是實現不完善會損壞原來的程式碼,其實普通的堆疊都是可讀寫的,而且我們大部分時候只是為了檢測記憶體的大小是否足夠,所以IsBadReadPtr在大部分場合可以代替IsBadWritePtr的