C 需要翻译协助
我对C编程比较陌生,有人要求我检查linux实用程序是否存在缓冲区溢出,但是我对该领域的知识有限,所以如果我在这方面做得不好,请原谅。我使用Valgrind检测溢流,在其中我收到了一个明确的泄漏,因此我应用了--泄漏检查完整来确定泄漏可能来自何处,但我不确定如何继续,有人能帮我吗 我选择的实用程序是nstat。以下是我的结果:C 需要翻译协助,c,valgrind,C,Valgrind,我对C编程比较陌生,有人要求我检查linux实用程序是否存在缓冲区溢出,但是我对该领域的知识有限,所以如果我在这方面做得不好,请原谅。我使用Valgrind检测溢流,在其中我收到了一个明确的泄漏,因此我应用了--泄漏检查完整来确定泄漏可能来自何处,但我不确定如何继续,有人能帮我吗 我选择的实用程序是nstat。以下是我的结果: valgrind --leak-check=full nstat -d 1111111111
valgrind --leak-check=full nstat -d 1111111111
==3749== Memcheck, a memory error detector
==3749== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==3749== Using Valgrind-3.15.0 and LibVEX; rerun with -h for copyright info
==3749== Command: nstat -d 1111111111
==3749==
#kernel
IpInReceives 112 0.0
IpInDelivers 112 0.0
IpOutRequests 115 0.0
TcpActiveOpens 6 0.0
TcpInSegs 30 0.0
TcpOutSegs 32 0.0
TcpRetransSegs 1 0.0
UdpInDatagrams 82 0.0
UdpOutDatagrams 82 0.0
Ip6InReceives 2 0.0
Ip6InDelivers 2 0.0
Ip6OutRequests 2 0.0
Ip6OutNoRoutes 2 0.0
Ip6InMcastPkts 2 0.0
Ip6OutMcastPkts 2 0.0
Ip6InOctets 186 0.0
Ip6OutOctets 186 0.0
Ip6InMcastOctets 186 0.0
Ip6OutMcastOctets 186 0.0
Ip6InNoECTPkts 2 0.0
Udp6InDatagrams 2 0.0
Udp6OutDatagrams 2 0.0
TcpExtTW 2 0.0
TcpExtTCPHPHits 6 0.0
TcpExtTCPPureAcks 5 0.0
TcpExtTCPHPAcks 6 0.0
TcpExtTCPTimeouts 1 0.0
TcpExtTCPSynRetrans 1 0.0
TcpExtTCPOrigDataSent 12 0.0
TcpExtTCPDelivered 18 0.0
IpExtInMcastPkts 4 0.0
IpExtOutMcastPkts 4 0.0
IpExtInOctets 10138 0.0
IpExtOutOctets 9060 0.0
IpExtInMcastOctets 292 0.0
IpExtOutMcastOctets 292 0.0
IpExtInNoECTPkts 112 0.0
==3749==
==3749== HEAP SUMMARY:
==3749== in use at exit: 18,429 bytes in 725 blocks
==3749== total heap usage: 756 allocs, 31 frees, 34,350 bytes allocated
==3749==
==3749== 128 bytes in 1 blocks are definitely lost in loss record 1 of 9
==3749== at 0x483B7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==3749== by 0x10C79D: ??? (in /usr/bin/nstat)
==3749== by 0x4BE00B2: (below main) (libc-start.c:308)
==3749==
==3749== LEAK SUMMARY:
==3749== definitely lost: 128 bytes in 1 blocks
==3749== indirectly lost: 0 bytes in 0 blocks
==3749== possibly lost: 0 bytes in 0 blocks
==3749== still reachable: 18,301 bytes in 724 blocks
==3749== suppressed: 0 bytes in 0 blocks
==3749== Reachable blocks (those to which a pointer was found) are not shown.
==3749== To see them, rerun with: --leak-check=full --show-leak-kinds=all
==3749==
==3749== For lists of detected and suppressed errors, rerun with: -s
==3749== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
我在Valgrind手册上搜索了类似的输出结果,但没有找到任何结果。如果有人能告诉我可以做些什么来继续我的分析,那就太好了。如果您正在检查缓冲区溢出,那么请放心,泄漏不属于这一类。然而,你的工作还远远没有完成。有两个主要的项目需要考虑。 首先是代码覆盖率。仅仅一次测试可能远远不够。理想情况下,您应该有一个完整的测试套件,该套件还具有测试覆盖率的度量 第二个问题是,哪一个是最好的工具。Valgrind memcheck不做的事情之一是检查静态分配和全局变量的溢出。将检查动态分配的内存(使用malloc或new)
为了检查静态分配和全局变量,我建议您使用地址消毒器。但是,这将需要重建nstat,如果您正在检查缓冲区溢出,那么请放心,泄漏不属于该类别。然而,你的工作还远远没有完成。有两个主要的项目需要考虑。 首先是代码覆盖率。仅仅一次测试可能远远不够。理想情况下,您应该有一个完整的测试套件,该套件还具有测试覆盖率的度量 第二个问题是,哪一个是最好的工具。Valgrind memcheck不做的事情之一是检查静态分配和全局变量的溢出。将检查动态分配的内存(使用malloc或new)
为了检查静态分配和全局变量,我建议您使用地址消毒器。但是,这需要重建
nstat
您好,欢迎来到StackOverflow!你介意在回答中键入valgrind输出而不是链接到图像吗?另外,你只包含valgrind输出的结尾。您能显示整个输出吗?只是为了澄清一下,不要键入valgrind输出,而是复制并粘贴它。您必须编译一个版本的nstat
,其中包含调试信息,以便能够获得任何真正有用的valgrind
输出。@Shawn我不知道如何操作,你有什么办法可以给我一些指导吗?你好,欢迎来到StackOverflow!你介意在回答中键入valgrind输出而不是链接到图像吗?另外,你只包含valgrind输出的结尾。您可以显示整个输出吗?只是为了澄清一下,不要键入valgrind输出,而是复制并粘贴它。您必须编译一个版本的nstat
,其中包含调试信息,才能获得任何真正有用的valgrind
输出。@Shawn我不确定如何操作,您能给我一些指导吗?