Google publikoi GWPSan, një mjet për identifikimin e gabimeve gjatë ekzekutimit të aplikacioneve

Kompania Google publikoi kodin burimor të mjetit GWPSan, i destinuar për identifikimin e gabimeve në fazën e ekzekutimit të aplikacioneve të ndërtuara për arkitekturën x86-64 dhe ARM64. GWPSan ndërtuat si një bibliotekë të ndarë, e cila lidhet gjatë fillimit të aplikacionit me anë të LD_PRELOAD dhe përdor mekanizmat e disponueshëm në bërthamën Linux për analizimin e performancës (PERF_TYPE_BREAKPOINT) dhe marrjen e mostrave të proceseve. Kodi është shkruar në gjuhën C++ dhe shpërndahet nën licencën Apache 2.0.

GWPSan është projektuar si një kuadër modular, që mbështet lidhjen e moduleve me implementimin e detektorëve të klasave të ndryshme të gabimeve. GWPSan kryen një analizë dinamike, e aktivizuar përmes menaxherëve të sinjaleve, që lejon evitimin e ndryshimit të kodit të ekzekutueshëm të aplikacionit. Për funksionimin efikas të shumicës së detektorëve kërkohet ndërtimi i aplikacionit me disa flag zgjedhjeje, që shtojnë metadatën e nevojshme. Për funksionim kërkohet të paktën Clang 18 dhe bërthama Linux 6.4.

Aktualisht janë të disponueshëm tre detektorë:

  • UAR (PĂ«rdorimi pas kthimit) — identifikon gabimet e shkaktuara nga pĂ«rdorimi i njĂ« objekti nĂ« stack pas daljes nga funksioni ku ky objekt ishte pĂ«rcaktuar. Mbrojtja organizohet pĂ«rmes kapjes sĂ« pikave tĂ« hyrjes dhe daljes pĂ«r funksionin — gjatĂ« hyrjes, stack zĂ«vendĂ«sohet me njĂ« kopje pĂ«r t'u pĂ«rdorur gjatĂ« ekzekutimit tĂ« funksionit, dhe gjatĂ« daljes kthehet nĂ« gjendjen e vjetĂ«r tĂ« stack-ut.
  • TSan (Thread Sanitizer) — pĂ«rcakton gjendjet e garĂ«s mes thread-Ă«ve (Data-race), qĂ« ndodhin kur thread-e tĂ« ndryshme qĂ« ekzekutohen njĂ«herĂ«sh mund tĂ« lexojnĂ« ose ndryshojnĂ« zona tĂ« pĂ«rbashkĂ«ta tĂ« memorie, pa pĂ«rdorur primitive pĂ«r sinkronizimin e punĂ«s. Mbrojtja ndĂ«rtohet mbi pĂ«rdorimin e pikave tĂ« ndalimit harduerike, tĂ« lidhura me zonat e pĂ«rbashkĂ«ta tĂ« memorie. NjĂ« menaxher i aktivizuar pĂ«r njĂ« periudhĂ« tĂ« vogĂ«l ndalon ekzekutimin e thread-it gjatĂ« qasjes nĂ« memorie dhe gjatĂ« kĂ«saj ndalese kontrollon nĂ«se ndonjĂ« pikĂ« ndalimi Ă«shtĂ« aktivizuar pĂ«r njĂ« thread tjetĂ«r.
  • LMSan (Lightweight Memory Sanitizer) — pĂ«rcakton pĂ«rdorimin e tĂ« dhĂ«nave tĂ« pa inicializuara nĂ« memorie. Detektori Ă«shtĂ« shĂ«nuar si eksperimental dhe nuk rekomandohet pĂ«r pĂ«rdorim.

GWPSan analizon kodin e ekzekutimit të programit, duke përdorur kuadrin DynamoRIO për të dekoduar kodin makinerik në instruksione abstrakte ISA, të cilat më pas ekzekutohen përmes emulimit. Përmes sinjaleve periodike nga timori, thirret trajtuesi unified, i cili me çdo thirrje ekzekuton një sasi të caktuar instruksionesh për rrjedhën që po analizohet. Në rast se zbulohen gjatë ekzekutimit të instruksioneve të caktuara, aktivizohet një detektor problemesh specifik për këto instruksione, për shembull, për instruksionet që i qasen memories, aktivizohet detektori i gjendjeve të garës.

Burimi: opennet.ru

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster