LLVM ಯೋಜನೆಯು C++ ನಲ್ಲಿ ಬಫರ್ ಸುರಕ್ಷಿತ ನಿರ್ವಹಣೆಯನ್ನು ಅಭಿವೃದ್ಧಿಪಡಿಸುತ್ತದೆ

LLVM ಪ್ರಾಜೆಕ್ಟ್‌ನ ಡೆವಲಪರ್‌ಗಳು ಮಿಷನ್-ಕ್ರಿಟಿಕಲ್ C++ ಯೋಜನೆಗಳ ಭದ್ರತೆಯನ್ನು ಬಲಪಡಿಸುವ ಗುರಿಯನ್ನು ಹೊಂದಿರುವ ಹಲವಾರು ಬದಲಾವಣೆಗಳನ್ನು ಪ್ರಸ್ತಾಪಿಸಿದ್ದಾರೆ ಮತ್ತು ಬಫರ್ ಅತಿಕ್ರಮಣದಿಂದ ಉಂಟಾದ ದೋಷಗಳನ್ನು ತೊಡೆದುಹಾಕಲು ಒಂದು ಮಾರ್ಗವನ್ನು ಒದಗಿಸುತ್ತಾರೆ. ಕೆಲಸವು ಎರಡು ಕ್ಷೇತ್ರಗಳ ಮೇಲೆ ಕೇಂದ್ರೀಕೃತವಾಗಿದೆ: ಬಫರ್‌ಗಳೊಂದಿಗೆ ಸುರಕ್ಷಿತವಾಗಿ ಕೆಲಸ ಮಾಡಲು ನಿಮಗೆ ಅನುಮತಿಸುವ ಅಭಿವೃದ್ಧಿ ಮಾದರಿಯನ್ನು ಒದಗಿಸುವುದು ಮತ್ತು ಕಾರ್ಯಗಳ libc++ ಪ್ರಮಾಣಿತ ಲೈಬ್ರರಿಯ ಸುರಕ್ಷತೆಯನ್ನು ಗಟ್ಟಿಗೊಳಿಸುವುದು.

C++ ಗಾಗಿ ಪ್ರಸ್ತಾಪಿಸಲಾದ ಸುರಕ್ಷಿತ ಪ್ರೋಗ್ರಾಮಿಂಗ್ ಮಾದರಿಯು ಬಫರ್‌ಗಳೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುವಾಗ ಬೇರ್ ಪಾಯಿಂಟರ್‌ಗಳನ್ನು ಕುಶಲತೆಯಿಂದ ನಿರ್ವಹಿಸುವ ಬದಲು ಪ್ರಮಾಣಿತ ಗ್ರಂಥಾಲಯದಿಂದ ಒದಗಿಸಲಾದ ತರಗತಿಗಳನ್ನು ಬಳಸುವುದು. ಉದಾಹರಣೆಗೆ, std::array, std::vector ಮತ್ತು std::span ತರಗತಿಗಳನ್ನು ಬಳಸಲು ಪ್ರಸ್ತಾಪಿಸಲಾಗಿದೆ, ಇದು ಮಿತಿ ಮೀರಿದ ಮೆಮೊರಿಗೆ ರನ್-ಟೈಮ್ ಚೆಕ್‌ನೊಂದಿಗೆ ಸೇರಿಸಲಾಗುತ್ತದೆ.

ಕ್ಲಾಂಗ್‌ನಲ್ಲಿ ಅಪಾಯಕಾರಿ ಪ್ರೋಗ್ರಾಮಿಂಗ್ ಅಭ್ಯಾಸಗಳನ್ನು ಎದುರಿಸಲು, ಎಲ್ಲಾ ಪಾಯಿಂಟರ್ ಅಂಕಗಣಿತದ ಕಾರ್ಯಾಚರಣೆಗಳಿಗೆ ಕಂಪೈಲರ್ ಎಚ್ಚರಿಕೆಗಳನ್ನು ನೀಡಲು ಪ್ರಸ್ತಾಪಿಸಲಾಗಿದೆ, "cppcoreguidelines-pro-bounds-pointer-Arithmetic" ಫ್ಲ್ಯಾಗ್ ಅನ್ನು ಬಳಸುವಾಗ ಕ್ಲಾಂಗ್-ಟೈಡಿಯ ಲಿಂಟರ್ ಎಚ್ಚರಿಕೆಗಳಂತೆಯೇ, ಬೆಂಬಲವು ಕಾಣಿಸಿಕೊಳ್ಳುತ್ತದೆ ಬಿಡುಗಡೆ LLVM 16. ಅಂತಹ ಎಚ್ಚರಿಕೆಗಳನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲು, ಕ್ಲಾಂಗ್‌ಗೆ ಪ್ರತ್ಯೇಕ ಧ್ವಜವನ್ನು ಸೇರಿಸಲಾಗುತ್ತದೆ, ಅದು ಪೂರ್ವನಿಯೋಜಿತವಾಗಿ ಸಕ್ರಿಯವಾಗಿಲ್ಲ.

libc++ ನಲ್ಲಿ ಐಚ್ಛಿಕ ಗಟ್ಟಿಯಾದ ರಕ್ಷಣೆ ಮೋಡ್ ಅನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಲು ಯೋಜಿಸಲಾಗಿದೆ, ಇದು ಸಕ್ರಿಯಗೊಳಿಸಿದಾಗ, ರನ್‌ಟೈಮ್‌ನಲ್ಲಿ ವಿವರಿಸಲಾಗದ ನಡವಳಿಕೆಗೆ ಕಾರಣವಾಗುವ ಕೆಲವು ಸಂದರ್ಭಗಳನ್ನು ಹಿಡಿಯುತ್ತದೆ. ಉದಾಹರಣೆಗೆ, std::span ಮತ್ತು std::vector ತರಗತಿಗಳಲ್ಲಿ, ಮಿತಿಯ ಹೊರಗಿನ ಪ್ರವೇಶವನ್ನು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಲಾಗುತ್ತದೆ, ಈ ಸಂದರ್ಭದಲ್ಲಿ ಪ್ರೋಗ್ರಾಂ ಕ್ರ್ಯಾಶ್ ಆಗುತ್ತದೆ. ಡೆವಲಪರ್‌ಗಳು ಅಂತಹ ಬದಲಾವಣೆಗಳನ್ನು ಸೇರಿಸುವುದರಿಂದ C++ ಮಾನದಂಡಗಳಿಗೆ ಅನುಗುಣವಾಗಿ libc++ ಅನ್ನು ಇರಿಸುತ್ತದೆ ಎಂದು ನಂಬುತ್ತಾರೆ, ಏಕೆಂದರೆ ವ್ಯಾಖ್ಯಾನಿಸದ ನಡವಳಿಕೆಯ ಪ್ರಕರಣಗಳನ್ನು ಹೇಗೆ ನಿರ್ವಹಿಸುವುದು ಎಂಬುದರ ಆಯ್ಕೆಯು ಗ್ರಂಥಾಲಯದ ಡೆವಲಪರ್‌ಗಳ ಮೇಲಿರುತ್ತದೆ, ಇದು ಇತರ ವಿಷಯಗಳ ಜೊತೆಗೆ, ವ್ಯಾಖ್ಯಾನಿಸದ ನಡವಳಿಕೆಯನ್ನು ಕ್ರ್ಯಾಶ್ ಎಂದು ವ್ಯಾಖ್ಯಾನಿಸಬಹುದು. ನಿರ್ಗಮಿಸಲು ಪ್ರೋಗ್ರಾಂ.

libc++ ನಲ್ಲಿ ರನ್‌ಟೈಮ್ ಪರಿಶೀಲನೆಗಳನ್ನು ಪ್ರತ್ಯೇಕವಾಗಿ ಸೇರಿಸಬಹುದಾದ ವರ್ಗಗಳಾಗಿ ವಿಂಗಡಿಸಲು ಯೋಜಿಸಲಾಗಿದೆ. ಹೆಚ್ಚು ಸಂಕೀರ್ಣ ಕಾರ್ಯಾಚರಣೆಗಳು ಅಥವಾ ABI ಬದಲಾವಣೆಗಳಿಗೆ ಕಾರಣವಾಗದ ಕೆಲವು ಸೂಚಿಸಲಾದ ಚೆಕ್‌ಗಳನ್ನು ಈಗಾಗಲೇ libc++ ನ ಸುರಕ್ಷಿತ ಮೋಡ್‌ನಲ್ಲಿ ಅಳವಡಿಸಲಾಗಿದೆ.

ಹೆಚ್ಚುವರಿಯಾಗಿ, ಕೋಡ್ ಅನ್ನು ಸರಿಪಡಿಸಲು ಟೂಲ್‌ಕಿಟ್ ಅನ್ನು ಸಿದ್ಧಪಡಿಸಲು ಯೋಜಿಸಲಾಗಿದೆ, ಕಂಟೇನರ್‌ಗಳ ಮೇಲೆ ಬೇರ್ ಪಾಯಿಂಟರ್‌ಗಳೊಂದಿಗೆ ವೇರಿಯೇಬಲ್‌ಗಳನ್ನು ಬದಲಾಯಿಸಲು ಮತ್ತು ಕಂಟೇನರ್ ನೇರವಾಗಿ ಪಾಯಿಂಟರ್ ಅನ್ನು ಬದಲಾಯಿಸಲು ಸಾಧ್ಯವಾಗದ ಸಂದರ್ಭಗಳಲ್ಲಿ ಪರ್ಯಾಯ ಹ್ಯಾಂಡ್ಲರ್‌ಗಳನ್ನು ಅನ್ವಯಿಸಲು ನಿಮಗೆ ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ (ಉದಾಹರಣೆಗೆ, "if (array_pointer)" ರಚನೆಯನ್ನು "if (span.data ()") ಗೆ ಪರಿವರ್ತಿಸಬಹುದು. ಹೊಂದಾಣಿಕೆಗಳನ್ನು ಸ್ಥಳೀಯ ವೇರಿಯೇಬಲ್‌ಗಳಿಗೆ ಮಾತ್ರವಲ್ಲದೆ ಪಾಯಿಂಟರ್‌ಗಳೊಂದಿಗೆ ಪ್ಯಾರಾಮೀಟರ್‌ಗಳನ್ನು ಟೈಪ್ ಮಾಡಲು ಅನ್ವಯಿಸಬಹುದು.

ಮೂಲ: opennet.ru

ಕಾಮೆಂಟ್ ಅನ್ನು ಸೇರಿಸಿ