我正在测试一个守护进程的小问题(用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函数的参数
请您帮助我了解可能的解决方案
答案 0 :(得分:2)
要检查C / C ++代码是否存在内存分配/访问错误,请使用Valgrind。服务器端无法(我知道)确定传递的parmateres是否有效。这就是C / C ++的信条:知道你在做什么,或者你死了。没有安全网。
答案 1 :(得分:1)
您可以在缓冲区的开头附加缓冲区的长度
-------------------------------------------------- -----------
|缓冲区的固定长度 - n个字节| BUFFER
-------------------------------------------------- -----------
现在每次在服务器端读取它时,首先读取包含长度的“n”字节(保留用于存储长度)。数据到达后,您可以将length of buffer
和first n bytes
进行比较以进行验证。
希望这会有所帮助。