我正在编写一个覆盖一些系统调用的共享库。其中包括read(int fd, void *buf, size_t count)
系统调用。这个库当然是在用户空间中。
所以,在我的库中,我正在捕捉read()
来自应用程序的调用(用于LD_PRELOAD
预加载我的库),做很多事情,并在某些时候将数据写入应用程序缓冲区(void *buf
)。
有没有办法让我检查整个应用程序缓冲区是否可写?
大多数时候这不是问题,但我遇到过编写得很糟糕的应用程序,以至于他们会在调用中发布只读缓冲区,当我使用他们的缓冲区read()
执行 a 时,导致我的代码出现段错误memcpy()
目的地,这是有道理的,当然。
注意 1:我目前正在查看内核在实际sys_read()
中是如何处理这种情况的,fs/read_write.c
但这并不是那么容易理解。
注意 2:该解决方案应尽可能少地增加开销。