0

我在这里用一个守护进程测试一个小问题(用linux编写)。我想知道所做的是否正确。

守护程序使用 dlopen 调用加载共享对象文件 (.so)。共享对象通过网络从客户端接收一些缓冲区。它使用以下调用来读取缓冲区:

read_buffer(something, length of buffer read, buffer contents);

read_buffer 函数使用 memcpy 将第二个参数中指定长度的缓冲区复制到另一个位置

在客户端,执行以下操作:

write_buffer(something, length of buffer, buffer contents);

问题是,如果我们发送一个无效的长度参数(与第三个参数中复制的实际长度不匹配),从客户端,在 memcpy 位置的服务器端存在段错误

我不确定如何输入验证传递给 memcpy 函数的参数

请您帮助我了解可能的解决方案

4

2 回答 2

2

要检查 C/C++ 代码是否存在内存分配/访问错误,请使用Valgrind。服务器端无法(据我所知)确定传递的参数是否有效。这就是 C/C++ 的信条:知道你在做什么,否则你就会死。没有安全网。

于 2012-06-18T07:34:38.067 回答
1

您可以在缓冲区的开头附加缓冲区的长度。
-------------------------------------------------- ------------
| 缓冲区的固定长度 - n 字节 | 缓冲区
-------------------------------------------------- ------------

现在每次在服务器端读取它时,首先读取包含长度的“n”个字节(保留用于存储长度)。当数据到达时,您可以进行比较length of bufferfirst n bytes验证。希望这可以帮助。

于 2012-06-18T08:19:02.650 回答