Google avaldas GWPSan tööriista allikakoode, mis on mĂ”eldud vigade avastamiseks rakenduste kĂ€itamise etapis, mis on loodud x86-64 ja ARM64 arhitektuuride jaoks. GWPSan on koostatud jagatud raamatukoguna, mis sidus kĂ€itamise ajal LD_PRELOAD abil ja kasutab programmi töö analĂŒĂŒsimiseks Linuxi tuumas saadaolevaid peatumismehhanisme (PERF_TYPE_BREAKPOINT) ja protsesside proovivĂ”tmist. Kood on kirjutatud C++ keeles ja levitatakse Apache 2.0 litsentsi alusel.
GWPSan on korraldatud modulaarsena raamistikuna, mis toetab moodulite lisamist erinevate veaklasside detektorite elluviimiseks. GWPSan viib lĂ€bi dĂŒnaamilise analĂŒĂŒsi, mis aktiveeritakse signaalide töötlejate kaudu, mis vĂ”imaldab ilma rakenduskoodi muutmiseta hakkama saada. Enamikule detektoritest on vajalik rakenduse kogumine teatud kompileerimislippudega, mis lisavad vajalikud metaandmed. NĂ”utav on vĂ€hemalt Clang 18 ja Linuxi tuum 6.4.
Praegu on saadaval kolm detektorit:
- UAR (Use-after-return) â tuvastab vead, mis on pĂ”hjustatud objekti kasutamisest virnas pĂ€rast funktsioonist vĂ€ljumist, mille jooksul see objekt defineeriti. Kaitse on organiseeritud funktsiooni sisenemise ja vĂ€ljumise punktide vahelesegamise kaudu â sisenemise korral asendatakse virn koopiaga, mida kasutatakse funktsiooni kĂ€itamise ajal, ja vĂ€ljumisel taastatakse vana virna olek.
- TSan (Thread Sanitizer) â tuvastab juurdepÀÀsuvĂ”istlusi (Data-race) erinevate samal ajal kĂ€ivitatud lĂ”imede vahel, mis tekivad, kui erinevad lĂ”imed saavad lugeda vĂ”i muuta ĂŒhiseid mĂ€luala, kasutamata samal ajal sĂŒnkroonimise primitiive. Kaitse pĂ”hineb riistvaraliste peatumispunktide kasutamisel, mis on seotud jagatud mĂ€lualadega. Aktiveeritud töödeldaja peatab lĂŒhikeseks ajaks lĂ”ime tĂ€itmise mĂ€lu juurde pÀÀsemisel ja selle peatamise ajal kontrollib, kas teise lĂ”ime jaoks on toimunud peatumispunkti aktiveerumine.
- LMSan (Lightweight Memory Sanitizer) â tuvastab mittealgatatud andmete kasutamise mĂ€lus. Detektsioon on mĂ€rgitud kui eksperimentaalne ja seda ei soovitata kasutada.
GWPSan analĂŒĂŒsib programmi kĂ€ivitatavat koodi, kasutades DynamoRIO raamistikku masinkoodi dekodeerimiseks abstraktseteks ISA kĂ€skudeks, mida seejĂ€rel tĂ€idetakse emuleerimise abil. Perioodiliste signaalide kaudu taimerist kutsutakse vĂ€lja ĂŒhtne töötleja, mis iga kord, kui see kĂ€ivitatakse, tĂ€idab kindla osa kĂ€ske analĂŒĂŒsitavas voos. Kui teatud kĂ€su tĂ€itmise kĂ€igus tuvastatakse probleem, kĂ€ivitatakse konkreetne probleemide tuvastaja, nĂ€iteks mĂ€lu juurde pÀÀsevate kĂ€skude puhul kĂ€ivitatakse vĂ”istluse seisundite tuvastaja.
Allikas: opennet.ru
