Ana Analyzer هو أداة تحليل يمكن استخدامها لتحليل تسرب ذاكرة CPP (أو أكثر؟). ويتحقق من المجموعات. بما في ذلك عدد قليل من مكتبات المفاهيم التي استخدمت C ++ 20. الآن يعتمد على محلل Clang Static ، أريد أن أجعله محللًا ثابتًا يمكن استخدامه لتحليل اللغات التي ولدت رموزها إلى LLVM IR. وسأقوم بتنفيذ بعض الميزات التي يمكن استخدامها لتحليل اللغة. (جميع الخوارزميات في تحليل ثابت أو تحليل للبرنامج)

لفترة طويلة ، كانت كيفية العثور بسرعة على الثغرات والعثور على الأخطاء المحتملة المختلفة في البرامج قدر الإمكان قضية مهمة في مجتمع علوم الكمبيوتر. وقد تم تقدير هذه المشكلة أيضًا بشكل كبير من قبل شركات البرمجيات الدولية الكبيرة. في الصناعة ، غالبًا ما يستخدم الأشخاص طرق اكتشاف مختلفة للعثور على الأخطاء في البرامج وتحسين جودة البرامج. مختلف عن طريقة الاختبار الديناميكي ، يمكننا أيضًا تحليل رمز البرنامج مباشرة دون تشغيل البرنامج والعثور على بعض الأخطاء. هذا النوع من الطريقة يسمى التحليل الثابت. إنه اتجاه بحث مهم في مجال لغة البرمجة والتجميع وهندسة البرمجيات. أداة التحليل الثابت المعروفة نسبيًا التي تم تطويرها في وقت مبكر هي LINT ، والتي تتحقق بشكل أساسي من مشكلات الأمان بلغة C. في السنوات الأخيرة ، جذبت تقنية التحليل الثابت انتباه العلماء في مجالات أنظمة التشغيل وأمن المعلومات. يمكن لبعض الدلالات الأساسية التي اقترحتها لغة الصدأ أيضًا إشارة إلى لغات أخرى. تركز هذه الورقة على تحسين الأمان لـ C ++ وتستخدم تقنية التحليل الثابت لتحليل مشاكل ذاكرة C ++. الضرر الناجم عن الضعف ، وما إلى ذلك ، بالنسبة للمؤشرات والمشاكل الأخرى ، يتم تقديم الحلول المقابلة ، ويتم توفير مكتبة فحص الاقتراض مماثلة للمطورين. يتم تنفيذ العديد من الشيكات بناءً على محلل Clang Static ، الذي له مزايا على أدوات التحليل الثابت الحالي.
قم بتنزيل الإصدار الخاص بي ولكن تذكر استخدام LLVM@15 أو أعلى. وتشغيل الأمر.
/path/to/install/clang++ -cc1 -load ANA.dylib
-analyze -analyzer-checker=ANA
foobar.cppيمكنك أن تصنع اعتمادك الخاصة
استخدم Conan أو VCPKG Install {FMT} و Google ، أو استخدم الجهاز الفرعي GIT
تثبيت llvm@15 أو أعلى
أولاً ، تحتاج إلى تثبيت جميع التبعيات. وبعد ذلك ، يمكنك البناء.
mkdir build
cd build
cmake .. -G Ninja # optional obviously
ninjaنحصل على الأهداف التالية.
ClangPlugins
├── assign-or-float-compIn-branch-cond-checker
├── CMakeLists.txt
├── function-printer
├── sample-checker
└── simple-allocation-operators-checker
بناء المحلل. اتريد.
فقط بسيط انظر المثال في دليل الاختبار. ./runalltest.sh
تثبيت التبعيات التالية. FD - يجب عليك تثبيت FD (https://github.com/sharkdp/fd) أولاً
وتشغيل المعيار في utils.