AizsardzÄ«bas ļauj veidot jebkuras aprÄÄ·inÄmas funkcijas, izmantojot konstrukcijas konfigurÄcijas failos ar Curl utilÄ«tu. Å Ä« Ä«paŔība izpaužas tikai Curl versijÄs no 8.12 lÄ«dz 8.16, un tÄ ir nenojauÅ”inÄta TjÅ«ringa pilnÄ«bas realizÄcija, kas ļauj izveidot TjÅ«ringa maŔīnas, izmantojot iespÄju izvilkt byte diapazonus no mainÄ«go vÄrtÄ«bÄm un neierobežotu ielÄdes dziļumu, izmantojot ÄrÄjos konfigurÄcijas failus.
KÄ piemÄru ar Curl ir organizÄta divskaitlÄ«ga reÄ£istru maŔīnas (Minska maŔīnas) simulÄcija skaitļu saskaitīŔanai un programmas "99 pudeles alus" Ä«stenoÅ”anai, ko izmanto apmÄcÄ«bÄ darbÄ ar cikliem. Lai palaistu programmu, kas ir ieprogrammÄta, izmantojot curl konfigurÄcijas failus, pietiek izsist arhÄ«vu un izpildÄ«t komandu "curl -q -s -K 99_bottles/main.conf".
ReÄ£istru maŔīna tiek simulÄta, izmantojot skaitÄ«tÄja vÄrtÄ«bas attÄloÅ”anu kÄ virkni no "n" simboliem "x". InkrementÄcijas un dekrementÄcijas operÄcijas ir realizÄtas caur virkÅu concatenÄciju un apgrieÅ”anu (sintakse "[0-0]" pirmajam byte saglabÄÅ”anai un "[1-]" visa satura saglabÄÅ”anai, izÅemot pirmo byte), un pÄrejas starp stÄvokļiem tiek kontrolÄtas ar direktÄ«vu "expand-config", kas dinamiski ielÄdÄ nÄkamo konfigurÄcijas failu, izmantojot tÄ nosaukumu kÄ pÄrejas etiÄ·eti. OperÄcija INC(R) reÄ£istru maŔīnÄ tiek realizÄta kÄ 'expand-variable = "r={{r}}x"' konfigurÄcijas failÄ Curl, DEC(R) ā kÄ 'expand-variable = "r[1-]={{r}}"', un JMP(S) ā kÄ 'expand-config = "S.conf"'. PiemÄram, kods skaitīŔanai 2 + 3:

PraksÄ, realizÄtÄs caur konfigurÄcijas failiem aprÄÄ·inÄÅ”anas iespÄjas ir ierobežotas ar steka lielumu, jo katrs programmas izpildes solis prasa jaunÄ iekļautÄ konfigurÄcijas faila iekrauÅ”anu. Ar 8 MB staku pÄrplÅ«de notiek aptuveni pÄc 922 soļiem. Uz iespÄjÄm ietekmÄ arÄ« ierobežojums uz atklÄto mainÄ«go lielumu (parametrs MAX_EXPAND_CONTENT ir iestatÄ«ts uz 10 MB) un liels atmiÅas patÄriÅÅ”, jo tiek saglabÄtas visas vecÄs mainÄ«go versijas.
Lai gan atklÄtÄ iespÄja nav ievainojamÄ«ba versijÄs no curl 8.17, apskatÄ«tais triks vairs nedarbosies, jo konfigurÄcijas failu ielÄdes dziļuma ierobežojums ir 5 lÄ«meÅi, lai pasargÄtu no bezgalÄ«gas rekursijas.
Avots: opennet.lv
