Tá an tionscadal LLVM ag forbairt uirlisí chun oibriú go sábháilte le maoláin in C++

Tá roinnt athruithe molta ag forbróirí an tionscadail LLVM dírithe ar shlándáil na dtionscadal C++ atá ríthábhachtach don mhisean a neartú agus bealach a sholáthar chun deireadh a chur le hearráidí de bharr róchaiteachas maoláin. Tá an obair dírithe ar dhá réimse: samhail forbartha a sholáthar a cheadaíonn obair shábháilte le maoláin, agus oibriú chun slándáil leabharlann caighdeánach feidhmeanna libc++ a neartú.

Is éard atá i gceist leis an tsamhail ríomhchláraithe sábháilte atá beartaithe do C++ ná ranganna a sholáthraíonn an leabharlann chaighdeánach a úsáid agus iad ag obair le maoláin in ionad leideanna lom a ionramháil. Mar shampla, tá sé beartaithe na ranganna std::array, std::veicteoir agus std::span a úsáid, a chuirfidh seiceáil ama rite le haghaidh cuimhne ró-leithdháilte.

Chun dul i ngleic le cleachtais chontúirteacha clársceidealaithe sa bhrionglóid, tá sé beartaithe rabhaidh tiomsaitheora a thaispeáint do gach oibríocht uimhríochtúil pointeora, cosúil leis an aschur rabhaidh lintéir chlang-slachtmhara agus an bhratach “cppcoreguidelines-pro-bounds-pointer-uimhríochtúil” in úsáid, a dtabharfar tacaíocht dó. le feiceáil sa scaoileadh LLVM 16. Chun rabhaidh den sórt sin a chumasú, cuirfear bratach ar leith le clang, nach bhfuil gníomhach de réir réamhshocraithe.

Tá sé beartaithe modh cosanta feabhsaithe roghnach a chur i bhfeidhm i libc++, a ghabhfaidh, nuair a bheidh sé cumasaithe, ar roinnt cásanna ag am rite as a dtagann iompar neamhshainithe. Mar shampla, sna haicmí std::span agus std::veicteora, déanfar monatóireacht ar rochtain chuimhne as teorainneacha, agus má aimsítear é, tiocfaidh an clár chun cinn. Creideann na forbróirí go gcoimeádfaidh cur leis na hathruithe sin libc++ de réir na gcaighdeán C++, ós rud é gurb iad na forbróirí leabharlainne a roghnaíonn conas déileáil le cásanna iompair neamhshainithe, a fhéadfaidh, i measc rudaí eile, iompar neamhshainithe a chóireáil mar theip, a éilíonn an clár chun deireadh a chur leis.

Tá sé beartaithe seiceálacha ama rite i libc++ a roinnt i gcatagóirí ar féidir iad a chumasú ina n-aonar. Tá cuid de na seiceálacha atá beartaithe, nach n-eascraíonn castacht oibríochtaí nó athruithe ar an ABI mar thoradh orthu, curtha i bhfeidhm cheana féin laistigh den mhodh sábháilte libc++.

Ina theannta sin, tá sé beartaithe uirlisí a ullmhú chun an cód a choigeartú, a cheadóidh duit athróga a chur in ionad leideanna lom le coimeádáin agus láimhseálaithe malartacha a úsáid i gcásanna nach féidir leis an gcoimeádán an pointeoir a athsholáthar go díreach (mar shampla, is féidir leis an tógáil "if(array_pointer)" a thiontú go “if(span.data) ()”) Is féidir coigeartuithe a chur i bhfeidhm ní hamháin ar athróga áitiúla, ach freisin ar pharaiméadair na gcineálacha pointeoir.

Foinse: oscailtenet.ru

Add a comment