❶ 請教linux C代碼規范性檢測工具有哪些
由Stanford大學的Dawson Engler副教授等研究開發,該靜態分析工具允許用戶使用一種稱作metal的狀態機語言編寫自定義的時序規則,從而實現了靜態分析工具的可擴展性。MC的實際效果非常優秀,號稱在Linux內核中找出來數百個安全漏洞。MC目前已經商業化,屬於Coverity Inc.2014年被Synopsys收購。目前學術領域比較認可的靜態分析工具,其技術處於領先地位。
❷ 小弟問一下各位前輩,做linux下面的C開發一般用什麼IDE和調試工具
Linux系統C語言開發一般不用IDE,因為Linux系統C或者C++語言IDE並不能帶來方便,相反還有點繁瑣,主要是不夠靈活。Linux C編程一般都是在文本編輯器中寫代碼(具體用哪個文本編輯器完全是個人喜好,專業的文本編輯器往往要比IDE的代碼編輯功能要更好更強大),然後在命令行下編譯(編譯可以用gcc命令、g++命令,也可以編寫一個makefile然後用make命令。如果你學會了makefile的編寫,比IDE要方便多了,只輸入一句make然後按下回車不就和點擊編譯按鈕一樣么),調試是用gdb。為什麼說IDE不夠靈活呢,舉個例子,你編寫了一個程序需要調用一個共享庫,但是你不知道怎麼編譯(就是不知道該加什麼編譯參數),你網路一下後,就知道編譯的命令了,但是你不知道怎麼控制IDE的行為,它能正常編譯還好,如果不能正常編譯,你就會各種折騰,效率肯定不高。
如果你實在偏愛IDE,Linux上的IDE也不少(這里只列舉C/C++的IDE),有codeblocks、eclipse-cdt、codelites。調試工具也有圖形界面的,比較好用的有KDbg、Affinic Debugger GUI。
❸ linux c 檢查進程是否存在
1、ps 是一個shell裡面的命令,用來輸出當前進程狀態的。想知道詳細用法可以在linux命令行中輸入: man ps
2、"ABNORMAL",注意這是一個字元串常量,因為在C語言中使用雙引號可以定義一個字元串常量。這個字元串可以是程序員自己隨便寫的,就像"hello word" 一樣。"ABNORMAL"表示不正常的意思。
3、ERROR、CONFLICT、NOERROR三個常量,可以使用#define語句進行定義。至於是在哪個頭文件中定義很難說。我建議你可以在當前的.c文件開始的地方自己定義一下,例如:
#include <stdio.h>
... /*其他的頭文件等等*/
#define ERROR -1
#define CONFLICT 1
#define NOERROR 0
... /*其他的函數*/
int detect_process(char * process_name)
{
FILE *ptr;
char buff[512];
char ps[128];
sprintf(ps,"ps -e | grep -c ' %s</p>",process_name);
strcpy(buff,"ABNORMAL");
if((ptr=popen(ps, "r")) != NULL)
{
while (fgets(buff, 512, ptr) != NULL)
{
if(atoi(buff)>=2)
{
pclose(ptr);
return CONFLICT;
}
}
}
if(strcmp(buff,"ABNORMAL")==0) /*ps command error*/
return ERROR;
pclose(ptr);
return NOERROR;
}
請注意:裡面有個popen() pclose()函數,是通過管道創建一個進程,這兩個函數必須要有<stdio.h>文件。具體的參數可以參看網路:http://ke..com/view/2445803.htm?fr=aladdin。
atoi()函數能將字元串轉換成整型數。參考網路:http://ke..com/view/653935.htm。
4、整個程序的意思是:
(1)使用"ps"命令,將結果保存到ps變數中,注意sprintf的第一個參數是一個char數組。
(2)將"ABNORMAL"字元串保存到buff變數中,buff也是一個char數組。
(3)使用popen()函數創建一個進程,並將這個進程定向到標准輸出(也就是顯示器上)。
(4)將進程的輸入出存到buff變數中,然後將其轉化為數字
(5)如果這個數字>=2說明發生了沖突,返回CONFLICT
(6)在循環之後,比較一下,如果buff一直是"ABNORMAL",說明ps 命令出錯,返回ERROR
(7)否則返回NOERROR
綜上:ERROR、CONFLICT、NOERROR幾個變數只是作為函數返回值,告訴函數調用者這次調用的結果而已,所以完全可以自己定義。除非你們公司已經規定了ERROR必須是某個值,不然你是可以自己定義的,只是在以後調用detect_process()函數的時候記得什麼返回值對應什麼結果就行了。
自己定義就是在.c文件開頭使用#define 好了。
❹ 在Linux中運行的C程序出現內存泄漏現象,怎麼解決
內存泄漏指由於疏忽或錯誤造成程序未能釋放已經不再使用的內存的情況。內存泄漏並非指內存在物理上的消失,而是應用程序分配某段內存後,由於設計錯誤,失去了對該段內存的控制,因而造成了內存的浪費。
可以使用相應的軟體測試工具對軟體進行檢測。
1. ccmalloc-Linux和Solaris下對C和C++程序的簡單的使用內存泄漏和malloc調試庫。
2. Dmalloc-Debug Malloc Library.
3. Electric
Fence-Linux分發版中由Bruce Perens編寫的malloc()調試庫。
4. Leaky-Linux下檢測內存泄漏的程序。
5. LeakTracer-Linux、Solaris和HP-UX下跟蹤和分析C++程序中的內存泄漏。
6. MEMWATCH-由Johan
Lindh編寫,是一個開放源代碼C語言內存錯誤檢測工具,主要是通過gcc的precessor來進行。
7. Valgrind-Debugging and profiling Linux programs, aiming at
programs written in C and C++.
8. KCachegrind-A visualization tool for the profiling data
generated by Cachegrind and Calltree.
9. Leak
Monitor-一個Firefox擴展,能找出跟Firefox相關的泄漏類型。
10. IE Leak Detector
(Drip/IE Sieve)-Drip和IE Sieve leak
detectors幫助網頁開發員提升動態網頁性能通過報告可避免的因為IE局限的內存泄漏。
11. Windows Leaks
Detector-探測任何Win32應用程序中的任何資源泄漏(內存,句柄等),基於Win API調用鉤子。
12. SAP Memory
Analyzer-是一款開源的JAVA內存分析軟體,可用於輔助查找JAVA程序的內存泄漏,能容易找到大塊內存並驗證誰在一直佔用它,它是基於Eclipse
RCP(Rich Client Platform),可以下載RCP的獨立版本或者Eclipse的插件。
13. DTrace-即動態跟蹤Dynamic
Tracing,是一款開源軟體,能在Unix類似平台運行,用戶能夠動態檢測操作系統內核和用戶進程,以更精確地掌握系統的資源使用狀況,提高系統性能,減少支持成本,並進行有效的調節。
14. IBM Rational PurifyPlus-幫助開發人員查明C/C++、託管.NET、Java和VB6代碼中的性能和可靠性錯誤。PurifyPlus
將內存錯誤和泄漏檢測、應用程序性能描述、代碼覆蓋分析等功能組合在一個單一、完整的工具包中。
15. Parasoft Insure++-針對C/C++應用的運行時錯誤自動檢測工具,它能夠自動監測C/C++程序,發現其中存在著的內存破壞、內存泄漏、指針錯誤和I/O等錯誤。並通過使用一系列獨特的技術(SCI技術和變異測試等),徹底的檢查和測試我們的代碼,精確定位錯誤的准確位置並給出詳細的診斷信息。能作為Microsoft
Visual C++的一個插件運行。
16. Compuware DevPartner for Visual C++ BoundsChecker
Suite-為C++開發者設計的運行錯誤檢測和調試工具軟體。作為Microsoft Visual Studio和C++ 6.0的一個插件運行。
17. Electric Software GlowCode-包括內存泄漏檢查,code
profiler,函數調用跟蹤等功能。給C++和.Net開發者提供完整的錯誤診斷,和運行時性能分析工具包。
18. Compuware DevPartner Java
Edition-包含Java內存檢測,代碼覆蓋率測試,代碼性能測試,線程死鎖,分布式應用等幾大功能模塊。
19. Quest JProbe-分析Java的內存泄漏。
20. ej-technologies JProfiler-一個全功能的Java剖析工具,專用於分析J2SE和J2EE應用程序。它把CPU、執行緒和內存的剖析組合在一個強大的應用中。JProfiler可提供許多IDE整合和應用伺服器整合用途。JProfiler直覺式的GUI讓你可以找到效能瓶頸、抓出內存泄漏、並解決執行緒的問題。4.3.2注冊碼:A-G666#76114F-1olm9mv1i5uuly#0126
21. BEA JRockit-用來診斷Java內存泄漏並指出根本原因,專門針對Intel平台並得到優化,能在Intel硬體上獲得最高的性能。
22. SciTech Software AB .NET Memory
Profiler-找到內存泄漏並優化內存使用針對C#,VB.Net,或其它.Net程序。
23. YourKit .NET & Java Profiler-業界領先的Java和.NET程序性能分析工具。
24. AutomatedQA AQTime-AutomatedQA的獲獎產品performance profiling和memory
debugging工具集的下一代替換產品,支持Microsoft, Borland, Intel, Compaq 和
GNU編譯器。可以為.NET和Windows程序生成全面細致的報告,從而幫助您輕松隔離並排除代碼中含有的性能問題和內存/資源泄露問題。支持.Net
1.0,1.1,2.0,3.0和Windows 32/64位應用程序。
25. JavaScript Memory Leak Detector-微軟全球產品開發歐洲團隊(Global Proct
Development- Europe team, GPDE)
發布的一款調試工具,用來探測JavaScript代碼中的內存泄漏,運行為IE系列的一個插件。
❺ linux下有方便地查看C/c++代碼的工具嗎
據我所知, linux下的工具, 無論是集成開發環境, 還是代碼閱讀工具都不如windows下的方便,強大。IDE有如下一些: eclipse, CodeLite, NetBeans, KDevelop4, CodeBlocks。閱讀工具有:source navigator NG, unstanding等。
推薦不要學習開發, 開發雖收入不錯, 但真心沒有什麼意思, 當成業余愛好還是比較有趣的。
❻ linux下後面檢測工具chkrootkit的簡單使用
Rootkit是一種具有隱蔽性的功能程序,通過Rootkit,攻擊者可以控制被入侵的電腦。利用ChkrootkitL在inux系統下的查找檢測Rootkit的工具。
Chkrootkit沒有包含在官方的CentOS或Debian源,因此需要採取手動編譯的方法來安裝。因此還需要在系統中安裝好gcc編譯包
1.linux安裝chkrootkit編譯安裝
yum -y install gcc
yum -y install gcc-c++
yum -y install make
debian系統運行下面兩個命令
apt-get -y install gcc
apt-get -y install make
安裝chkrootkit
wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz
解壓
tar zxvf chkrootkit.tar.gz
cd chkrootkit-*
make sense編譯安裝
cd ..
cp -r chkrootkit-* /usr/local/chkrootkit 一般將安裝的路徑放在/usr
rm -rf chkrootkit-*
/usr/local/chkrootkit/chkrootkit 安裝後chkrootkit 的路徑
直接執行,查看輸入結果
安裝RKHunter
wget https://sourceforge.net/projects/rkhunter/files/latest/download/rkhunter-1.46.tar.gz
tar -zxvf rkhunter-1.46.tar.gz 解壓
cd rkhunter-1.4.6
./installer.sh --layout default --install 默認安裝
/usr/local/bin/rkhunter -c 運行此工具, 需要按回車鍵繼續檢測
第一部分是進行系統命令的檢查,ok表示正常,warning 表示有異常,Not found 不用理會,
第二部分是檢測常見的rootkit程序,
第三部分是一些特殊的附加檢測
第四部分是對網路,系統埠,系統啟動文件,系統用戶,組配置,等等
第五部分是應用程序進行檢測
第六部分是對上面輸出的一個總結
❼ linux數組越界漏洞怎麼利用
Linux c/c++上常用內存泄露檢測工具有valgrind, Rational purify。Valgrind免費。Valgrind可以在 32位或64位 PowerPC/Linux內核上工作。
Valgrind工具包包含多個工具,如Memcheck,Cachegrind,Helgrind, Callgrind,Massif。下面分別介紹個工具的作用:
Memcheck 工具主要檢查下面的程序錯誤:
• 使用未初始化的內存 (Use of uninitialised memory)
• 使用已經釋放了的內存 (Reading/writing memory after it has been free』d)
• 使用超過 malloc分配的內存空間(Reading/writing off the end of malloc』d blocks)
• 對堆棧的非法訪問 (Reading/writing inappropriate areas on the stack)
• 申請的空間是否有釋放 (Memory leaks – where pointers to malloc』d blocks are lost forever)
• malloc/free/new/delete申請和釋放內存的匹配(Mismatched use of malloc/new/new [] vs free/delete/delete [])
• src和dst的重疊(Overlapping src and dst pointers in memcpy() and related functions)
Valgrind不檢查靜態分配數組的使用情況。
Valgrind佔用了更多的內存--可達兩倍於你程序的正常使用量。如果你用Valgrind來檢測使用大量內存的程序就會遇到問題,它可能會用很長的時間來運行測試
2.1. 下載安裝
http://www.valgrind.org
安裝
./configure;make;make install
2.2. 編譯程序
被檢測程序加入–g -fno-inline 編譯選項保留調試信息。
2.3. 內存泄露檢測
$ valgrind --tool=memcheck --log-file=/root/valgrind_log_all --leak-check=full --error-limit=no --show-reachable=yes --trace-children=yes /usr/local/sdata/sbin/rpcbakupsvr
其中--leak-check=full 指的是完全檢查內存泄漏,--show-reachable=yes是顯示內存泄漏的地點,--trace-children=yes是跟入子進程。當程序正常退出的時候valgrind自然會輸出內存泄漏的信息。
1.內存泄露:
#include <stdio.h>void function()
{ int *p = (int*)malloc(10*sizeof(int)); p[10] = 0;
}int main()
{ function(); return 0;
}
相關日誌:
==20220== Memcheck, a memory error detector
==20220== Copyright (C) 2002-2010, and GNU GPL'd, by Julian Seward et al.
==20220== Using Valgrind-3.6.1-Debian and LibVEX; rerun with -h for right info
==20220== Command: ./test
==20220== Parent PID: 20160
==20220==
==20220== Invalid write of size 4
==20220== at 0x80483FF: function (in /mnt/Documents/Training/valgrind/test)
==20220== by 0x8048411: main (in /mnt/Documents/Training/valgrind/test)
==20220== Address 0x41be050 is 0 bytes after a block of size 40 alloc'd
==20220== at 0x4028876: malloc (vg_replace_malloc.c:236)
==20220== by 0x80483F5: function (in /mnt/Documents/Training/valgrind/test)
==20220== by 0x8048411: main (in /mnt/Documents/Training/valgrind/test)
==20220==
==20220==
==20220== HEAP SUMMARY:
==20220== in use at exit: 40 bytes in 1 blocks
==20220== total heap usage: 1 allocs, 0 frees, 40 bytes allocated
==20220==
==20220== LEAK SUMMARY:
==20220== definitely lost: 40 bytes in 1 blocks
==20220== indirectly lost: 0 bytes in 0 blocks
==20220== possibly lost: 0 bytes in 0 blocks
==20220== still reachable: 0 bytes in 0 blocks
==20220== suppressed: 0 bytes in 0 blocks
==20220== Rerun with --leak-check=full to see details of leaked memory
==20220==
==20220== For counts of detected and suppressed errors, rerun with: -v
==20220== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 11 from 6)
2.使用未初始化的內存
#include <stdio.h>int main()
{ int a; if (a==1)
{ printf("a==%d\n",a);
} return 0;
}
日誌分析:
==20345== Memcheck, a memory error detector
==20345== Copyright (C) 2002-2010, and GNU GPL'd, by Julian Seward et al.
==20345== Using Valgrind-3.6.1-Debian and LibVEX; rerun with -h for right info
==20345== Command: ./test
==20345==
==20345== Conditional jump or move depends on uninitialised value(s)
==20345== at 0x80483F2: main (in /mnt/Documents/Training/valgrind/test)
==20345==
==20345==
==20345== HEAP SUMMARY:
==20345== in use at exit: 0 bytes in 0 blocks
==20345== total heap usage: 0 allocs, 0 frees, 0 bytes allocated
==20345==
==20345== All heap blocks were freed -- no leaks are possible
==20345==
==20345== For counts of detected and suppressed errors, rerun with: -v
==20345== Use --track-origins=yes to see where uninitialised values come from
==20345== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 11 from 6)
可以使用--track-origins=yes 得到更多的信息
3.內存讀寫越界
#include <stdio.h>int main()
{ int *a = (int*)malloc(5*sizeof(int)); a[5] = 1; return 0;
}
==20368== Memcheck, a memory error detector
==20368== Copyright (C) 2002-2010, and GNU GPL'd, by Julian Seward et al.
==20368== Using Valgrind-3.6.1-Debian and LibVEX; rerun with -h for right info
==20368== Command: ./test
==20368==
==20368== Invalid write of size 4
==20368== at 0x8048404: main (in /mnt/Documents/Training/valgrind/test)
==20368== Address 0x41be03c is 0 bytes after a block of size 20 alloc'd
==20368== at 0x4028876: malloc (vg_replace_malloc.c:236)
==20368== by 0x80483F8: main (in /mnt/Documents/Training/valgrind/test)
==20368==
==20368==
==20368== HEAP SUMMARY:
==20368== in use at exit: 20 bytes in 1 blocks
==20368== total heap usage: 1 allocs, 0 frees, 20 bytes allocated
==20368==
==20368== LEAK SUMMARY:
==20368== definitely lost: 20 bytes in 1 blocks
==20368== indirectly lost: 0 bytes in 0 blocks
==20368== possibly lost: 0 bytes in 0 blocks
==20368== still reachable: 0 bytes in 0 blocks
==20368== suppressed: 0 bytes in 0 blocks
==20368== Rerun with --leak-check=full to see details of leaked memory
==20368==
==20368== For counts of detected and suppressed errors, rerun with: -v
==20368== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 11 from 6)
4.內存申請釋放管理錯誤
#include <stdio.h>int main()
{ int *a = new int[5]; /*free(a);*/ delete a; return 0;
}
❽ windows用什麼工具查看linuxc工程代碼
熟悉命令行的話vim 是比較好的選擇
喜歡IDE的話sublimetext,atom, 都可以,微軟出的visual studio code 也是不錯的選擇