【Delphi】Linux版的IsBadReadPtr

linux上沒有提供用戶態的內存指針讀寫安全檢測函數,這裏使用異常包來簡單實現IsBadReadPtr:linux

{$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的安全

相關文章
相關標籤/搜索