我在这里测试一个守护进程的小问题(用 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 函数的参数
请您帮我了解一下可能的解决方案
最佳答案
要检查 C/C++ 代码的内存分配/访问错误,请使用 Valgrind .服务器端无法(据我所知)确定传递的参数是否有效。这就是 C/C++ 的信条:知道你在做什么,否则你就死了。没有安全网。
关于c - 在攻击场景中传递无效输入时处理 memcpy 段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11078371/