Uninitialized Variables
Taarifa Msingi
Wazo kuu hapa ni kuelewa kinachotokea na variables zisizojulikana kwani zitakuwa na thamani iliyokuwepo tayari kwenye kumbukumbu iliyowekwa kwao. Mfano:
Fungtion 1:
initializeVariable
: Tunatangaza variablex
na kumpa thamani, sema0x1234
. Hatua hii inafanana na kuhifadhi nafasi kwenye kumbukumbu na kuweka thamani maalum ndani yake.Fungtion 2:
useUninitializedVariable
: Hapa, tunatangaza variable nyinginey
lakini hatumpi thamani yoyote. Katika C, variables zisizojulikana hazipati moja kwa moja thamani ya sifuri. Badala yake, zinabaki na thamani yoyote iliyokuwa imesalia kwenye eneo la kumbukumbu.
Tunapotekeleza hizi fungtions kwa mpangilio:
Katika
initializeVariable
,x
anapewa thamani (0x1234
), ambayo inachukua anwani maalum ya kumbukumbu.Katika
useUninitializedVariable
,y
inatangazwa lakini haipewi thamani, hivyo inachukua nafasi ya kumbukumbu mara baada yax
. Kutokana na kutokuiwekay
, inamalizia "kurithi" thamani kutoka kwenye eneo la kumbukumbu linalotumiwa nax
, kwa sababu hiyo ndiyo thamani ya mwisho iliyokuwepo hapo.
Tabia hii inaonyesha dhana muhimu katika programu za kiwango cha chini: Usimamizi wa kumbukumbu ni muhimu, na variables zisizojulikana zinaweza kusababisha tabia isiyoaminika au mapungufu ya usalama, kwani wanaweza kushikilia data nyeti isiyokusudiwa iliyobaki kwenye kumbukumbu.
Variables zisizojulikana kwenye steki zinaweza kuleta hatari kadhaa za usalama kama:
Kuvuja kwa Data: Taarifa nyeti kama nywila, funguo za kuchakata, au maelezo ya kibinafsi yanaweza kufichuliwa ikiwa yamehifadhiwa kwenye variables zisizojulikana, kuruhusu wadukuzi kusoma data hii.
Kufichua Taarifa: Yaliyomo ya variables zisizojulikana yanaweza kufunua maelezo kuhusu muundo wa kumbukumbu ya programu au shughuli za ndani, kusaidia wadukuzi katika kuendeleza mashambulizi yaliyolengwa.
Kuanguka na Kutokuwa na Utulivu: Operesheni zinazohusisha variables zisizojulikana zinaweza kusababisha tabia isiyoeleweka, ikisababisha programu kuanguka au matokeo yasiyotabirika.
Utekelezaji wa Kanuni za Kiholela: Katika hali fulani, wadukuzi wanaweza kutumia mapungufu haya kubadilisha mtiririko wa utekelezaji wa programu, kuwaruhusu kutekeleza kanuni za kiholela, ambazo zinaweza kujumuisha vitisho vya utekelezaji wa kanuni za mbali.
Mfano
Jinsi Hii Inavyofanya Kazi:
Fungua
initializeAndPrint
: Hii fungsi inatangaza kipengele cha nambariinitializedVar
, inampa thamani100
, na kisha inachapisha anwani ya kumbukumbu na thamani ya kipengele. Hatua hii ni wazi na inaonyesha jinsi kipengele kilichoinuliwa kinavyotenda.Fungua
demonstrateUninitializedVar
: Katika fungsi hii, tunatangaza kipengele cha nambariuninitializedVar
bila kuipatia thamani. Tunapojaribu kuchapisha thamani yake, matokeo yanaweza kuonyesha nambari ya nasibu. Nambari hii inawakilisha data yoyote iliyokuwepo hapo awali katika eneo hilo la kumbukumbu. Kulingana na mazingira na mtoaji wa programu, matokeo halisi yanaweza kutofautiana, na mara nyingine, kwa usalama, baadhi ya watoaji wa programu wanaweza kiotomatiki kuinua vipengele kuwa sifuri, ingawa hii haipaswi kutegemewa.Fungua
kuu
: Fungsi yakuanza
inaita fungsi zote mbili hapo juu kwa mfululizo, ikionyesha tofauti kati ya kipengele kilichoinuliwa na kile ambacho hakijainuliwa.
Mfano wa ARM64
Hii haibadiliki kabisa katika ARM64 kwani vipengele vya ndani pia vinasimamiwa kwenye stakishi, unaweza kuchunguza mfano huu ambapo hili linaonyeshwa.
Last updated