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