一部のシステムコールをオーバーライドする共有ライブラリを作成しています。その中にはread(int fd, void *buf, size_t count)
syscallがあります。もちろん、このライブラリはユーザー空間にあります。
そのため、私のライブラリではread()
、アプリケーションからの呼び出し (ライブラリのLD_PRELOAD
プリロードに使用) をキャッチし、さまざまなことを実行し、ある時点でアプリケーション バッファにデータを書き込みます ( void *buf
)。
アプリケーション バッファ全体が書き込み可能かどうかを確認する方法はありますか?
ほとんどの場合、それは問題ではありませんが、read()
呼び出しで読み取り専用memcpy()
バッファーを投稿するほど不十分に作成されたアプリケーションに出くわしました。もちろん、これは理にかなっています。
sys_read()
注1:現在、カーネルが実際にその状況をどのように処理しているかを調べていますが、fs/read_write.c
理解するのはそれほど簡単ではありません.
注 2: このソリューションでは、オーバーヘッドをできるだけ少なくする必要があります。