Vagadziri veLLVM vanokurudzira kubata kwakachengeteka buffer muC ++

Nhoroondo ye LLVM

LLVM igadziriro yekugadzira ma compilers pamwe nekubatsira kuvaka mitauro mitsva yekuronga uye kugadzirisa mitauro iripo.

ari vagadziri vechirongwa cheLLVM vakakurudzira shanduko dzinoverengeka dzine chinangwa chekusimbisa kuchengetedzwa yeproyects C ++ mission yakakosha uye inopa nzira yekubvisa zvikanganiso zvinokonzerwa nebuffer overruns.

Saka nekudaro, chikumbiro chavakaburitsa chakanangana nebasa munzvimbo mbiri kunyanya: kupa modhi yekusimudzira inobvumira kushanda zvakachengeteka nemabuffers uye kushanda kusimbisa kuchengetedzeka kwe libc ++ standard function library.

Zvinonzi iyo yakatsanangurwa yakachengeteka programming modhi yeC ++ «ndeye kushandisa makirasi akapihwa neyakajairwa raibhurari paunenge uchishanda nemabuffers pachinzvimbo chekushandisa mapoinzi akaomeswa ». Semuyenzaniso, zvinokurudzirwa kushandisa std::array, std::vector, uye std::span makirasi, ayo anozowedzerwa neruntime cheki yekunze-kwe-mabhondi akagoverwa memory.

Chinangwa chedu ndechekuvandudza kuchengetedzwa kweC ++ kodhi mabhesi. Nokuda kweizvi tinoronga kushanda pamazano maviri.

Yakaomeswa C++ Standard Library
C++ Safe Buffer Programming Model uye Adoption Tools
Yakaomeswa libc ++ inoitirwa kuita kuti C++ yakajairwa raibhurari inopindirana yakachengeteka zvakanyanya.

C++'s safe buffer programming model pamwe neakaomeswa libc++ inopa runtime kudzikiswa kwekunze-kwe-yekumisikidzwa memory yekuwana. Maturusi ekugamuchira achaita otomatiki kutama kwekodhi kune iyi nyowani programming modhi.

Pamusoro peizvi, inotaurawo kuti kurwisa "ngozi" maitiro ekuronga mu clang, kana inopa yambiro yekuburitsa yambiro ye compiler kune ese pointer arithmetic mashandiro, zvakafanana neclang-tidy linter yambiro paunenge uchishandisa "cppcoreguidelines-pro-bounds-pointer-arithmetic" mureza, tsigiro iyo ichaonekwa muLLVM 16. Kuti igone kunyevera kwakadaro, mureza wakaparadzana uchawedzerwa ku clang, usingashande nekukasira. .

Yakarongwa kuita sarudzo yekudzivirira modhi mu libc ++, iyo, kana yagoneswa, inozoona mamwe mamiriro anotungamira kune isina kutsanangurwa maitiro panguva yekumhanya. Somuenzaniso, mumakirasi std::span uye std::vector, kunze-kwe-miganhu yekuwana ichaongororwa, iyo iyo iyo purogiramu ichakundikana.

Aya ekuwedzera ekumhanyisa cheki achaiswa mumapoka akati wandei anogona kudzorwa zvakasiyana. Chinangwa ndechekuti mutengesi wekutumira libc ++ papuratifomu yavo anogona kusarudza kuti ndeapi macheki ekugonesa muraibhurari yekutumira (kana iripo), zvichienderana nehuwandu hwekuchengetedza hunodiwa.

Vagadziri vanotenda kuti kuwedzera shanduko dzakadaro kuchaita kuti libc ++ ienderane neC ++ zviyero, sezvo sarudzo yemabatiro ehunhu husina kutsanangurwa iri kune vanogadzira raibhurari, avo vanogona, pakati pezvimwe zvinhu, kubata maitiro asina kutsanangurwa sekiyi inoda kuti chirongwa kubuda.

ari Runtime cheki mu libc ++ zvakarongwa kuti zvigovane muzvikamu iyo inogona kuverengerwa yega. Mamwe echeki akakurudzirwa asingakonzere mamwe mabasa akaomarara kana shanduko yeABI yatoitwa mune libc++'s safe mode (yakachengeteka mode).

Kudzokorora, chinangwa chekupedzisira ndechekuti raibhurari inotumirwa igonese aya macheki mukugadzirwa; iyi haisi "debug chete" ficha, kunyangwe ichizopedzisira yatsiva iyo yakareba yakaputsika "debug mode".

Uyewo, inorongwa kugadzirira seti yekodhi yekururamisa maturusi izvo zvinozotendera kuti zvigadziriso zvitsiviwa nemapoinzi akaomeswa mumidziyo uye kushandisa mamwe mabatiro mumamiriro ezvinhu apo mudziyo haugone kutsiva zvakananga pointer (semuenzaniso, iyo "kana(array_pointer)" kuvaka inogona kushandurwa kuita "if(span.data ( )»).Maseting anogona kushandiswa kwete chete kune zvinoshanduka zvemunharaunda, asiwo kutaipa parameters ine anonongedzera.

Zvinotaurwawo izvozvo vari kufunga nezve "clang static analyzer cheki" nzira inonzwisisika inonyevera kana std::nguva inovakwa kubva mumudziyo mudiki pane saizi inotsanangurwa mugadziri wespan. Iyo yakataurwa cheki inozvimiririra uye inobatsira yega, kana zvese zvikafamba zvakanaka inogoneswa nekusarudzika kune vese vashandisi.

Finalmente kana iwe uchifarira kuziva zvakawanda nezvazvo, unogona kutarisa ruzivo mu inotevera chinongedzo.


Siya yako yekutaura

Your kero e havazobvumirwi ichibudiswa. Raida minda anozivikanwa ne *

*

*

  1. Inotarisira data: AB Internet Networks 2008 SL
  2. Chinangwa cheiyo data: Kudzora SPAM, manejimendi manejimendi.
  3. Legitimation: Kubvuma kwako
  4. Kutaurirana kwedata
  5. Dhata yekuchengetedza: Dhatabhesi inobatwa neOccentus Networks (EU)
  6. Kodzero: Panguva ipi neipi iwe unogona kudzora, kupora uye kudzima ruzivo rwako