Kompania Google publikoi tekstet e burimit të GWPSan, një mjet që synon të identifikojë gabimet gjatë ekzekutimit të aplikacioneve të ndërtuara për arkitekturën x86-64 dhe ARM64. GWPSan ndërtohet si një bibliotekë e ndarë, e cila lidhet gjatë ekzekutimit të aplikacionit përmes LD_PRELOAD dhe përdor mekanizmat e ndalimit (PERF_TYPE_BREAKPOINT) dhe sample-imit të proceseve të disponueshëm në bërthamën Linux për të analizuar punën e programit. Kodi është shkruar në gjuhën C++ dhe shpërndahet nën licencën Apache 2.0.
GWPSan është ndërtuar si një framework modular që mbështet lidhjen e moduleve me implementimin e detektorëve të klasave të ndryshme të gabimeve. GWPSan kryen analizë dinamike, e aktivizuar përmes trajtuesve të sinjalëve, duke lejuar kështu që aplikacioni të mos ndryshohet. Për të funksionuar siç duhet, shumica e detektorëve kërkojnë që aplikacioni të mbledhë me disa flamuj kompilatorësh që shtojnë metadatat e nevojshme. Nevojitet të paktën Clang 18 dhe bërthama Linux 6.4.
Aktualisht janë të disponueshëm tre detektorë:
- UAR (PĂ«rdorim-pas-kthimi) â identifikon gabimet e shkaktuara nga pĂ«rdorimi i njĂ« objekti nĂ« grumbull pas daljes nga funksioni nĂ« tĂ« cilin Ă«shtĂ« pĂ«rcaktuar ky objekt. Mbrojtja organizohet pĂ«rmes kapjes sĂ« pikave tĂ« hyrjes dhe daljes pĂ«r funksionin â gjatĂ« hyrjes, bĂ«het njĂ« zĂ«vendĂ«sim i grumbullit me njĂ« kopje pĂ«r t'u pĂ«rdorur gjatĂ« ekzekutimit tĂ« funksionit, dhe gjatĂ« daljes kthehet nĂ« gjendjen e mĂ«parshme tĂ« grumbullit.
- TSan (Thread Sanitizer) â identifikon gjendjet e garĂ«s midis boshllĂ«qeve (Data-race), qĂ« ndodhin kur tuba tĂ« ndryshme qĂ« ekzekutohen nĂ« mĂ«nyrĂ« simultane mund tĂ« lexojnĂ« ose ndryshojnĂ« zona tĂ« pĂ«rbashkĂ«ta tĂ« memories, pa pĂ«rdorur primitivĂ« pĂ«r sinkronizimin e operacioneve. Mbrojtja Ă«shtĂ« ndĂ«rtuar mbi pĂ«rdorimin e pikave tĂ« ndalimit harduerike, tĂ« lidhura me zonat e pĂ«rbashkĂ«ta tĂ« memories. NjĂ« trajtues i aktivizuar pĂ«r njĂ« periudhĂ« tĂ« shkurtĂ«r ndalon ekzekutimin e tubĂ«s gjatĂ« qasjes nĂ« memorie dhe gjatĂ« kĂ«saj ndalese kontrollon nĂ«se ishte aktivizuar ndalja pĂ«r njĂ« tubĂ« tjetĂ«r.
- LMSan (Lightweight Memory Sanitizer) â identifikon pĂ«rdorimin e tĂ« dhĂ«nave tĂ« pa inicuara nĂ« memorie. PikĂ«vĂ«shtruesi Ă«shtĂ« shĂ«nuar si eksperimental dhe nuk rekomandohet pĂ«r pĂ«rdorim.
GWPSan analizon kodin e ekzekutueshëm të programit, duke përdorur framework-un DynamoRIO për të dekoduar kodin maqinar në instruksione abstrakte ISA, të cilat më pas ekzekutohen duke përdorur emulimin. Përmes sinjaleve periodike nga një timer, thirret një trajtues i unifikuar, i cili gjatë çdo thirrjeje ekzekuton një sasi të caktuar instrukcionesh për rrjedhën e analizuar. Në rast se gjatë ekzekutimit të disa instrukcionesh të caktuara identifikohen, aktivizohet një detektor specifik për këto instruksione, për shembull, për instrukcionesh që lidhen me memorien, aktivizohet detektori i gjendjeve të garës.
Burimi: opennet.ru
