[Powered by Google Translate] [SEMÈN 5] [David J. Malan, Inivèsite Harvard] [Sa a se CS50.] [CS50.TV] [Madanm] Li te kouche; sou sa ki, mwen pa konnen. [Man] Se konsa, sa nou konnen? [Madanm] Sa a 9:15, Ray Santoya te nan ATM nan. [Man] Se konsa, kesyon an se, sa ki te li fè nan 9:16? [Madanm] Fiziyad mm a 9 nan yon bagay. Petèt li te wè tirè pwofesyonèl la. [Man] Oswa li te ap travay avè l '. [Madanm] Tann. Tounen yon sèl. [Man] Kisa ou wè? [♫ ♫ suspèns mizik] [Madanm] Pote figi l 'leve. Full ekran. [Man] linèt li a. >> Genyen nan yon refleksyon. [♫ ♫ suspèns mizik] [Man] Sa a ekip bezbòl Nuevita la. Sa a logo yo. [Madanm] Apre sa, li la ap pale ak moun ki va mete nan ke levit. [David Malan] Se konsa,, sa a se CS50 semèn 5, ak jodi a nou ruin yon ti jan nan televizyon ak fim pou ou. Se konsa, chak fwa w ap gade yon cho tankou sa a yon sèl isit la, ak flik yo di "Èske ou kapab netwaye ki moute?" oswa "Amelyore," pa gen okenn amelyore nan mond lan reyèl. An reyalite, ki sa ou reyèlman pran se yon ti kras yon bagay tankou sa a. Mwen te rale moute youn nan foto yo anplwaye ki nan paj la. Sa a se yon pwogram yo rele fotoschop. Sa a se 1 nan 2 Bowdens, 1 nan 3 Bowdens aktyèlman, jodi a, paske nou gen Madam Bowden isit la kòm byen, ak Rob ak Pòl. Men, isit la se Rob sou ekran an, epi si nou rale nan sou sa briye li te toujou te gen nan je l 'yo, ki sa ou wè aktyèlman se ke sa ou wè se sa ou jwenn. Sa a se "améliorée," pou "ksi" genyen li yon ti jan mal. Genyen yon clip lòt, si nou ka chwazi sou "ksi" jis yon ti jan pi long lan. Sa a se yon sèl yon fraz bèl prononcée koulye si ou vle son teknik avèk zanmi ou lè, reyèlman, w ap di absoliman anyen. [Man] Pou semèn mwen te mennen ankèt sou mètriye yo asasen conducteur ak yon pasyon Mòbid a sèten. [Madanm # 1] Sa a se nan tan reyèl. [Madanm # 2] m ap kreye yon koòdone grafik lè l sèvi avèk vizyèl Preliminè a, wè si mwen ka swiv yon adrès IP. [Malan] Se konsa, odyo soti nan senkronizasyon sou kote, sa ki kreye yon koòdone grafik lè l sèvi avèk vizyèl Debaz swiv yon adrès IP se istwa san sans konplè. Jou sa yo ou pa ta sèvi ak vizyèl Preliminè a, gen nan pa gen nesesite pou yon entèfas, ak IP adrès se te yon tèm teknikman egzat. Se konsa, kenbe yon grenn je deyò pou sa yo, li yonn nan favorites mwen: Yon sèl sa a se yon ti kras pi plis Esoteric, paske ou bezwen konnen yon lòt lang. Genyen nan yon lang yo rele Objektif-C, ki se yon suransanbl nan C. Ki vle di C li nan plis kèk karakteristik adisyonèl, nan mitan yo objè-oryante pwogramasyon. Ak sa a se lang nan ke Apple te vulgarize pou pwogram yo. Se konsa, isit la nan yon clip soti nan yon montre diferan tout ansanm, ki soti nan "Numbers," ke si ou aktyèlman gade ak anpil atansyon sou TiVo ou ak pran yon poz nan moman sa a dwat, ou ap wè ke sa yo ap chèche a se pa byen sa k ap ki dekri yo. Ak kite m 'eseye yon diferan Connector odyo isit la ak wè si nou pa kapab kenbe odyo a nan senkronizasyon tan sa a. M 'ba ou "Numbers." [Man # 1] Li se yon 32-bit adrès IPv4. [Man # 2] IP, ki nan entènèt la. >> Prive rezo-a. Li nan rezo prive Anita a. [Malan] Okay. Sa a se Objektif-C, ak li a pou pwogram koloran kèk jenn ti kabrit la, kòm ou ka petèt dégager soti nan non an nan varyab la a. Se konsa, ki, lè sa a, se te "Numbers." Se konsa, jounen jodi a ak semèn sa a nou prezante yon ti kras nan mond lan nan forensics ak kontèks la nan pwoblèm yo Se poutèt sa. Jodi a pral yon konferans abreje paske gen nan yon evènman espesyal nan isit la Apre sa, se konsa nou pral pran yon gade vit, ak toumante toude elèv yo ak paran yo sanble jodi a ak kèk nan bagay sa yo ke yo sou orizon an. Nan mitan yo, jan nan Lendi, ou pral gen yon kèk plis kamarad klas. Èdo, Inivèsite Harvard, ak MITs nouvo sou entènèt inisyativ pou louvri kou ak plis, ap lanse sou lakou lekòl la Harvard la nan Lendi. Ki vle di vini Lendi w ap gen - kòm nan dènye konte, 86.000 kamarad klas ap gen lòt swiv ansanm ak konferans CS50 nan ak seksyon ak valktroug epi li kouche pwoblèm. Ak kòm yon pati nan sa a, ou pral vin manm nan klas la inogirasyon nan CS50 e kounye a, CS50x. Kòm yon pati nan sa a, koulye a, reyalize ke pral gen kèk upsides kòm byen. Pou jwenn pare pou sa, pou yon nimewo pou la masiv nan elèv yo, sufi li vle di ke menm si nou gen 108 TFs ak sèrtifikasyon, pa byen pi bon elèv / rapò pwofesè a yon fwa nou frape 80,000 lòt elèv yo. Se konsa, nou pa ap pral korije pwoblèm pou anpil moun kouche manyèlman. Se konsa, introduced semèn sa a nan ansanm lan pwoblèm yo pral CS50 chèk, ki se ale nan yon sèvis piblik liy command nan aparèy la ki ou pral jwenn yon fwa ou mete ajou li pita sa a nan wikenn, epi ou pral kapab kouri yon lòd, tcheke 50, sou pset pwòp ou a, epi ou pral jwenn kèk fidbak kòm si pwogram ou an se kòrèk oswa enkòrèk dapre espesifikasyon konsepsyon divès kalite ke nou te bay la. Se konsa, plis sou sa ki epi spesifikasyon la ansanm ak pwoblèm kamarad klas yo CS50x yo pral sèvi ak sa a kòm byen. Se konsa, seri pwoblèm 4 se tout sou forensics. Ak sa a te moso enspire pa kèk bagay lavi reyèl, kote lè m 'te nan lekòl la gradye, mwen entèrne pou yon ti tan ak Biwo Avoka Distri Konte an Middlesex la a ap fè legal travay avèk anketè plon yo legal, e ki sa sa a elve se, mwen panse ke mwen mansyone sot pase yon semèn kèk a, se lapolis yo Eta Mass oswa lòt moun t 'vle vini nan yo, yo ta depoze bagay sa yo tankou kondui difisil ak CD ak disk flou ak renmen an, ak Lè sa a, objektif la nan biwo a forensics te rann kont si wi ou non te gen oswa pa t 'prèv ki montre kèk sòt. Sa a te Espesyal Envestigasyon Inite a, se konsa li te blan-kolye krim, li te plis boulvèsan sòt de krim, anyen ki enplike kèk kalite digital medya; sanble ke pa ke anpil moun ekri yon imèl li di: "Mwen te fè li." Se konsa, byen souvan fouy sa-forensics pa t 'vire leve tout sa ki fwi anpil, men pafwa moun ki ta ekri Imèl sa yo. Se konsa, pafwa efò yo te rekonpans. Men, yo mennen jiska sa a pset legal, nou pral entwodwi nan pset 4 yon ti jan nan grafik. Se konsa, ou pwobableman pran tout bagay sa yo pou yo akòde, JPEGs jif la, tankou jou sa yo, Men, si ou reyèlman panse sou li, yon imaj, anpil tankou figi Rob a, yo ta ka modelize kòm yon sekans pwen, oswa piksèl. Koulye a, nan ka a nan figi Rob a, gen nan tout kalite koulè, epi nou te kòmanse wè pwen yo endividyèl, otherwide li te ye tankou piksèl, yon fwa nou te kòmanse nan zoom pous Men, si nou senplifye mond lan yon ti jan, ak jis di ke sa a isit la se Rob nan, nwa ak blan byen, nwa ki reprezante ak blan nou ka jis itilize binè. Men, si nou pwal sèvi ak binè, 1 oswa 0, nou ka eksprime imaj sa a menm nan souri figi Rob a ak modèl sa a nan Bits: 11000011 reprezante blan, blan, nwa, nwa, nwa, nwa, blan blan. Se konsa, li pa yon bon gwo, lè sa a, yo kòmanse ap pale de foto kolore. Bagay sa yo ke ou ta wè sou Facebook oswa pran avèk yon kamera dijital, men, sètènman, lè li rive koulè, ou bezwen plis miyèt moso. Ak konplètman ki komen nan mond lan nan foto se sèvi ak pa 1-ti jan koulè po, tankou sa a sijere, men 24-bit koulè, kote ou aktyèlman jwenn dè milyon de koulè. Se konsa, tankou nan ka a lè nou agrandi nan sou je Rob a, sa yo ki te nenpòt ki kantite dè milyon de posiblite diferan kolore. Se konsa, nou pral prezante sa a nan seri pwoblèm 4 osi byen ke nan solisyon an, ki pral jounen jodi a nan 3:30 olye pou yo 2:30 a jan li konn ye paske nan konferans Vandredi a isit la. Men, videyo a ap sou entènèt, kòm dabitid, demen. Nou pwal tou entwodui ou nan yon lòt fòma dosye-a. Se konsa, sa a se fè espre vle di ke yo gade entimidasyon an premye, men sa a se sèlman kèk dokiman pou yon struct C. Li sanble ke Microsoft, ane de sa, te ede popilarize fòma sa a, rele fòma a dosye bitmap, BMP, e sa se te yon super-senp, kolore dosye grafik fòma ki te itilize pou kèk tan epi pafwa toujou pou pen sou Bureau. Si ou panse tounen nan Windows XP ak ti mòn yo woule ak nan syèl ble, sa yo ki te tipikman yon BMP, oswa imaj bitmap, ak bitmap ki amizan pou nou paske yo gen yon ti jan pi plis konpleksite. Li pa byen kòm senp tankou gri sa a nan nan 0 ak 1 a; olye de sa, ou gen bagay sa yo tankou yon header nan kòmansman an nan yon dosye. Se konsa, nan lòt mo, andedan yon. Dosye BMP se yon pakèt antye nan la 0 ak 1 a, , men tou genyen kèk adisyonèl 0 a ak 1 a an la. Epi li sanble ke sa nou te pwobableman pran pou yo akòde pou ane sa yo, dosye fòma tankou. oswa doktè. xls oswa. mp3 oswa mp4., kèlkeswa sa fòma yo ranpli ke ou se abitye avèk yo. Oke, ki sa li menm vle di yo dwe yon fòma dosye? Paske nan fen jounen an, tout moun sa yo dosye nou itilize gen jis 0 a ak nan 1 e petèt sa yo 0 a ak nan 1 reprezante yon, B, C, atravè ASCII oswa tankou an, men nan la fen jounen an, li nan jis nan 0 ak 1 a. Se konsa, moun detanzantan sèlman deside envante yon fòma dosye nouvo kote yo estandadize sa ki modèl nan Bits pral aktyèlman vle di. Ak nan ka sa a isit la, jan yo ki fèt fòma a dosye bitmap te di ke nan multiple la nan yon dosye bitmap trè premye, kòm deziye pa kourbur 0, la, gen nan pral fè kèk cryptically te rele varyab bfType rele, ki jis kanpe pou di ki kalite dosye bitmap; ki kalite dosye bitmap sa a se. Ou ka dégager, petèt, ki soti nan dezyèm ranje a, ki konpanse 2, nimewo multiple 2, gen yon modèl nan la 0 ak nan 1 ki reprezante ki sa? Gwosè a nan yon bagay, epi li ale sou apati de la. Se konsa, nan seri pwoblèm 4, ou pral te mache nan tout kèk nan bagay sa yo. Nou pa pral fini pran swen sou tout nan yo, men remake li kòmanse jwenn ki enteresan alantou liy oswa multiple 54, rgbtBlue, vèt ak wouj. Si ou te janm tande akwonim nan rgb, wouj vèt ble, sa a se yon referans a sa. Paske li vire soti ou ka penti tout koulè yo nan lakansyèl la va ak kèk konbinezon de wouj ak ble ak vèt. Epi, an reyalite, paran yo nan sal la ta ka sonje kèk nan projèkteur yo pi bonè. Jou sa yo, ou jis gade 1 klere limyè t'ap soti nan yon lantiy. Men, li tounen nan jou a, ou te gen lantiy la wouj, lantiy la ble, ak lantiy la vèt ak ansanm yo ki vize a ekran an epi ki te fòme yon foto kolore. Ak byen souvan lekòl presegondè ak lekòl segondè ta gen sa yo lantiy janm-konsa-yon ti kras krochi, se konsa ou te sòt de wè foto doub oswa trip, men sa ki te lide la. Ou te gen limyè wouj ak vèt ak ble pentire yon foto. Epi li se ki prensip menm yo itilize nan òdinatè. Se konsa, nan mitan defi yo, lè sa a, pou ou nan pwoblèm mete 4 pwal gen yon bagay kèk; se yon sèl aktyèlman Rdimansyone yon imaj. Pou w kapab pran nan yon seri a 0 ak 1 a, konnen ki sègman nan la 0 ak nan 1 reprezante sa ki nan yon estrikti tankou sa a, ak Lè sa a, figi l kòman répliquer piksèl yo: wouj yo, blues yo, vèt yo andedan an pou ke lè yon foto sanble tankou sa a okòmansman, ta ka gade tankou sa a olye apre sa. Pami defi yo lòt, tou, a pwal ke ou pral lage yon imaj legal nan yon dosye aktyèl soti nan yon kamera dijital yo, epi sou ki kamera, yon fwa sou yon tan, te yon pakèt antye nan foto yo. Pwoblèm nan se, nou aksidantèlman efase oswa ou te gen imaj la pèvèti yon jan kanmenm. Move bagay rive ak kamera dijital, epi pou nou byen vit kopye tout nan a 0 ak nan 1 koupe nan ki kat pou ou, sove yo tout nan 1 dosye gwo, ak Lè sa a, nou pral lage yo ba ou nan pwoblèm mete 4 pou ke ou ka ekri yon pwogram nan C ak ki refè tout moun ki JPEGs, depreferans. Epi li sanble ke JPEGs, menm si yo ap yon ti jan nan yon fòma dosye konplèks, yo ap pi plis konplèks pase sa a figi souri isit la. Li sanble ke chak JPEG kòmanse ak modèl yo menm nan nan 0 ak 1 a. Se konsa, lè l sèvi avèk yon riban pandan y ap oswa yon pou riban oswa ki similè yo, ou ka rèspèté sou tout la a 0 ak 1 a nan imaj sa a legal ak tout tan ou wè modèl la espesyal ki nan sa defini nan spesifikasyon mete nan pwoblèm nan, ou ka asime, 'Oh, isit la se, ak pwobabilite wo anpil, kòmansman yon JPEG, 'ak le pli vit ke ou jwenn menm regilarite a, kèk nimewo nan bytes oswa kilookte oswa megabit pita, ou ka asime, 'Ooh! Isit la se yon JPEG dezyèm fwa, foto a mwen te pran apre premye a. Kite m 'sispann li ki dosye premye, kòmanse ekri yon sèl sa a nouvo. Ak pwodiksyon an nan pwogram ou an pou pset 4 a pwal kòm anpil 50 JPEGs. Men, si li pa 50 JPEGs, ou gen yon ti jan nan yon riban. Si ou gen yon nonb infini nan JPEGs, ou gen yon riban enfini. Se konsa, sa, tou, yo pral byen yon ka komen. Sa a se sa ki la sou orizon an. Kwiz 0, dèyè nou. Reyalize, pou chak imel mwen an, ki toujours gen nan jan ki, yo toulède yo kè kontan, sòt de net, ak tris alantou egzamen 0 tan. Ak tanpri rive jwenn soti nan m ', TFs yo tèt, Zamyla, tf pwòp ou a oswa nan yonn nan sèrtifikasyon la ke ou konnen si ou ta renmen diskite ki jan bagay yo te ale. Se konsa, enpresyone paran yo isit la nan sal la, ki sa ki nan bibliyotèk la CS50? Bon travay. Ki sa ki nan bibliyotèk la CS50? Yeah? [Repons elèv, enkonpreansibl] >> Okay, bon. Se konsa, li yon seri prewritten nan kòd ke nou yo, anplwaye a, te ekri, nou bay nou la a, bay kèk fonksyonalite komen. Stuff renmen jwenn m 'yon fisèl; jwenn m' yon int, nan tout fonksyon yo ke yo lis isit la. Kòmanse kounye a, nou kòmanse reyèlman pran sa yo wou fòmasyon an. Se konsa, nou ap ale nan kòmanse pran yon "fisèl" nan men ou, ki, sonje, te jis yon sinonim pou sa ki reyèl ki kalite done? Char *. Se konsa, pou paran yo, sa ki te pwobableman - sa a bon, se konsa Char * nou pral kòmanse wè sou ekran an tout pi plis pase jan nou retire "fisèl" nan vokabilè nou an, nan omwen lè li rive aktyèlman ekri kòd. Menm jan tou, nou pral sispann lè l sèvi avèk kèk nan sa yo fonksyon kòm anpil, paske pwogram nou yo ale nan jwenn pi plis sofistike olye ke sèlman ekri pwogram ki chita la ansanm ak yon kliyote rapid, ap tann pou itilizatè a pou tape yon bagay pous Ou lj jwenn entrain ou soti nan yon lòt kote. Pou egzanp, ou pral jwenn yo soti nan yon seri de Bits sou kondwi a lokal difisil. Ou ap olye jwenn yo nan tan kap vini la ki sòti nan yon koneksyon rezo, gen kèk sit entènèt kèk kote. Se konsa, kite a kale tounen kouch sa a la pou premye fwa, ak rale moute aparèy la CS50 ak sa a ranpli rele CS50.h, ki ou rive ve te byen file sa enkli pou semèn. Men, kite a aktyèlman wè sa ki sa ki andedan sa a. Se konsa, tèt la nan dosye a nan twal ble se jis yon pakèt antye nan kòmantè, enfòmasyon garanti ak lisans. Sa a se sòt de yon paradigm komen nan lojisyèl, paske yon anpil nan lojisyèl jou sa yo se sa ki rele "louvri sous," ki vle di ke yon moun te ekri kòd la li fè l 'libreman disponib, pa sèlman nan kouri li sèvi ak, men aktyèlman li ak chanje ak entegre nan travay pwòp ou yo. Se konsa, se sa ki ou ve yo te lè l sèvi avèk, louvri lojisyèl sous, kwake nan yon fòm ki piti anpil. Si m 'desann sot pase kòmantè yo, menm si, nou pral kòmanse wè kèk bagay pi plis yo konnen yo. Se konsa, remake nan tèt la isit la, ki dosye a CS50.h gen ladan yon pakèt antye nan dosye header. Koulye a, pi fò nan sa yo, nou pa t 'wè anvan, men se yon sèl abitye; ki nan sa yo te wè nou, byen yon ti tan, konsa byen lwen? Yeah, bibliyotèk estanda. Stdlib.h gen malok, Se konsa yon fwa nou te kòmanse pale sou alokasyon memwa dinamik, ki nou pral tounen vin jwenn semèn pwochèn kòm byen, nou te kòmanse ki gen ladan ki dosye. Li sanble ke bouleen ak vrè ak fo pa aktyèlman egziste nan C, se pou chak, sof si ou gen ladan yo sa a ranpli isit la. Se konsa, nou fè sa, pou de semèn, te gen ladan estanda bool.h pou ke ou ka sèvi ak nosyon a nan yon. bouleen, vre oubyen fo San yo pa sa, ou ta gen yo sòt de fo li epi sèvi ak yon int ak jis abitrèman asime ke 0 se fo ak 1 a se verite. Koulye a, si nou desann pi lwen, isit la se definisyon nou an yon kòd. Li sanble soti, kòm nou te di anvan, sa ki kote sa a * se pa reyèlman gen pwoblèm. Ou ka menm gen espas tout alantou. Nou menm, sa a semès, yo te fè pwomosyon li kòm sa a fè klè ke * a gen fè ak kalite a. Men mwen reyalize, menm jan komen, si pa yon ti kras plis komen, se yo mete l 'gen men fonksyonèl li nan menm bagay la. Men koulye a,, si nou li desann pi lwen, kite a pran yon gade nan di, GetInt, paske nou te itilize ke, petèt, anvan tout bagay sa a semès la. Ak isit la se GetInt. Sa a se ki sa? Sa a se pwototip an. Se konsa, souvan, nou te mete prototip nan tèt yo nan nou an. Dosye c, men ou ka mete tou prototip nan dosye header,. h dosye, tankou sa a yon sèl isit la, se konsa ke lè ou ekri kèk fonksyon ke ou vle lòt moun pou kapab sèvi ak yo, ki se egzakteman ka a ak bibliyotèk la CS50, ou pa sèlman aplike fonksyon ou a nan yon bagay tankou CS50.c, nou menm tou nou mete prototip yo pa nan tèt la nan ke dosye, men nan tèt la nan yon dosye header, Lè sa a, ki dosye header se sa ki zanmi ak kòlèg enkli ladan yo, ak byen file mete nan règleman pwòp yo. Se konsa, tout tan tout tan sa a ou ve yo te ki gen ladan tout moun sa yo prototip efektivman nan tèt la nan dosye ou, men ou pa fason pou sa a byen file enkli mekanis ki esansyèlman kopi ak kole sa a ranpli nan pwòp ou yo. Koulye a, isit la se kèk dokiman san patipri detaye. Nou te bèl anpil pran pou yo akòde ki GetInt vin yon int, men li vire soti gen nan kèk ka kwen, dwa? E si itilizatè a kalite nan yon chif ki nan wout twò gwo? Yon quintillion, ki jis pa ka anfòm andedan nan yon int? Ki sa ki se yon konpòtman ki a prévu? Oke, depreferans, li nan previzib. Se konsa, nan ka sa a, si ou aktyèlman li enprime la amann, ou pral wè ke si liy la pa kapab li, sa a INT_MAX retounen. Nou pa janm te te pale osijè de sa a, men ki baze sou majiskil li yo, ki sa se li, pwobableman? Li se yon konstan, kidonk li a kèk konstan espesyal ke sa ka petèt te deklare nan youn nan moun ki dosye header ki nan moute pi wo nan dosye a, ak INT_MAX se pwobableman yon bagay tankou, apeprè, 2 milya dola. Lide a ke yo te sa paske nou bezwen yon jan kanmenm siyifi ke yon bagay ale mal, nou menm, se wi, gen 4 milya dola nimewo a jete nou an, negatif 2 milya dola sou jiska 2 milya dola, bay oswa pran. Oke, sa se komen nan pwogramasyon se ou vòlè jis youn nan moun ki nimewo yo. Petèt 0, petèt 2 milya dola, petèt negatif 2 milya dola. Se konsa, ou depanse youn nan valè posib ou pou sa ou kapab komèt nan mond lan ke si yon bagay ale mal, m'ap tounen sa a valè super-gwo. Men, ou pa vle itilizatè a sezisman yon bagay skre tankou "2 3, 4 ..." nan nimewo reyèlman gwo, kote ou jeneralizasyon olye kòm yon konstan. Se konsa, reyèlman, si ou te ke yo te nan dèyè sot pase semèn yo kèk, nenpòt lè ou rele GetInt, ou ta dwe yo te tcheke ki genyen yon kondisyon si. Èske kalite a itilizatè nan INT_MAX, oswa plis espesyalman, te fè GetInt INT_MAX retounen? Paske si li te fè, ki aktyèlman vle di yo pa t 'tape li; yon bagay ale mal nan ka sa a. Se konsa, sa a se sa ki jeneralman li te ye kòm yon "Sentinel" valè, ki jis vle di espesyal. Oke, kite la kounye a vire nan fè sa. Dosye yo c. Te dosye a C te egziste nan aparèy la pou kèk tan, , epi, an reyalite, aparèy la gen li prekonpile pou ou nan ki bagay nou rele "kòd objè," men li jis pa enpòtan ba ou kote li se paske sistèm nan konnen, nan ka sa a, kote li ye, se aparèy la. Men, kite a desann kounye a nan GetInt, ak wè ki jan GetInt ki te travay tout tan sa a. Se konsa, isit la nou gen kòmantè similè nan anvan. Kite m 'rale nan sou jis pòsyon nan kòd, ak sa nou genyen pou GetInt se sa ki annapre yo. Li pa pran opinyon ak li retounen yon int, pandan y ap (vrè), konsa nou gen yon ekspre riban enfini men, prezimableman, nou pral kraze soti nan sa a yon jan kanmenm, oswa retounen soti nan sa a. Se konsa, kite a wè ki jan sa a travay. Oke, nou yo sanble yo dwe lè l sèvi avèk GetString nan liy sa a premye andedan riban a, 166. Sa a se kounye a bon pratik paske anba ki sikonstans te kapab GetString retounen sa a mo kle espesyal, nil? Si gen yon bagay ale mal. Kisa ki ta kapab ale mal lè w rele yon bagay tankou GetString? Yeah? [Repons elèv, enkonpreansibl] >> Yeah. Se konsa, petèt malok echwe. Yon kote anba GetString la kapo ap rele malok, ki repati memwa, ki pèmèt magazen an òdinatè tout nan karaktè yo ki ki itilizatè a kalite nan klavye la. Ak ta kwè itilizatè a te gen yon anpil tout tan lib ak tape plis, pou egzanp, pase 2 milya dola karaktè. Plis karaktè pase òdinatè a menm gen RAM. Oke, GetString gen pou kapab siyifi ke nou la a, menm si sa a se yon Super, ka super estraòdinè kwen. Li te gen yon jan kanmenm kapab okipe sa a, epi konsa GetString, si nou tounen ladan l epi li dokiman li yo,, an reyalite, retounen nil. Koulye a, si GetString echwe ki te retounen nil, GetInt ki pral fail ki te retounen INT_MAX, jis kòm yon Sentinel. Sa yo se sèlman konvansyon imen. Sèl fason pou ou ta konnen sa a se ka a se nan li dokiman an. Se konsa, kite a desann nan kote int a se aktyèlman GotInt. Se konsa, si mwen desann yon ti jan pi lwen, nan liy 170 nou gen yon kòmantè pi wo a liy sa yo. Se konsa, nou deklare, nan 172, ki se yon n int ak yon c Char, ak Lè sa a, sa a fonksyon nouvo ki kèk nan nou te bite sou anvan, men sskanf. Sa a kanpe pou f fisèl eskanè. Nan lòt mo, ban m 'yon kòd epi mwen pral analysis li pou pyès enfòmasyon nan enterè yo. Se konsa, sa sa vle di? Oke, ann sipoze ke mwen tape nan, literalman, 1 2 3 nan klavye a, ak Lè sa a, frape antre. Ki sa ki kalite nan done nan 1 3 2 lè tounen pa GetString? Li nan evidamman yon fisèl, dwa? Mwen te resevwa yon fisèl, se konsa 1 2 3 se reyèlman "1 2 3" ak 0 a \ nan fen li. Sa se pa yon int. Sa se pa yon nimewo. Li sanble ke yon nimewo men li la pa aktyèlman. Se konsa, sa GetInt dwe fè? Li te gen analysis ki fisèl goch a dwat, 1 2 3 \ 0, epi yon jan kanmenm konvèti li nan yon nonb antye relatif vrè. Koulye a, ou ka konnen ki jan fè sa. Si ou panse tounen nan pset 2, ou prezimableman te yon ti konfòtab ak Seza tande kòz oswa vigenere konsa ou ka rèspèté sou yon fisèl, ou ka konvèti charaktèr antye ak chwazi. Sa a se yon anpil tout travay. Poukisa nou pa rele yon fonksyon tankou sskanf ki fè ke pou ou? Se konsa, sskanf espere gen yon diskisyon, nan ka sa a yo rele liy, ki se yon fisèl. Ou Lè sa a, presize, nan quotes, anpil menm jan ak printf, sa w ap atann yo wè nan sa a fil? Sa m ap di isit la se, mwen espere wè yon nonb desimal ak petèt karaktè yon. Epitou, n ap wè poukisa sa a se ka a nan jis moman yon. Li sanble ke sa a notasyon se kounye a okoumansman de bagay nou te kòmanse pale sou jis pase yon semèn de sa. Ki sa ki se & n ak & c ap fè pou nou isit la? [Repons elèv, enkonpreansibl] >> Yeah. Li nan bay m 'adrès ki nan n ak adrès c. Koulye a, poukisa se ke enpòtan? Oke, ou konnen ke ak fonksyon nan C ou ka toujou retounen yon valè oswa valè pa gen okenn nan tout. Ou ka retounen yon int, fisèl yon, flote yon, yon Char, kèlkeswa sa. Oswa ou ka retounen san valè, men ou ka sèlman retounen 1 bagay omaksimòm. Men, isit la nou vle sskanf retounen m 'petèt yon int, yon nonb desimal, epi tou li yon Char, epi mwen pral eksplike poukisa Char la nan yon moman. Se konsa, ou efektivman vle f retounen 2 bagay sa yo; sa a, se jis pa posib nan C. Se konsa, ou ka travay alantou ki pa pase nan 2 adrès, paske le pli vit ke ou lage yon fonksyon 2 adrès, sa ki kapab ki fonksyon fè avèk yo? Li ka ekri nou nan sa yo adrès. Ou kapab sèvi ak operasyon an * ak "ale la" nan chak nan sa yo adrès. Li nan sòt de sa a mekanis degize, men trè komen pou chanje valè yo nan varyab nan plis pase jis 1 kote, nan ka sa a 2. Koulye a, remake mwen tcheke pou == to1, ak Lè sa a, retounen n si sa, an reyalite, evalye vre. Se konsa, sa k ap pase sou? Oke, teknikman, tout sa nou reyèlman vle rive nan GetInt se sa a. Nou vle analizan, se konsa pale, nou vle li fisèl la "1 2 3" ak si li sanble gen yon nimewo a, sa n ap di sskanf fè se mete nimewo sa a, 1 2 3, nan sa a n varyab pou mwen. Poukisa, lè sa a, te fè mwen gen sa a kòm byen? Ki wòl la nan tou li di: sskanf, ou ta ka jwenn tou yon karaktè isit la. [Pale elèv, enkonpreansibl] >> Pa - yon pwen desimal te kapab travay. Se pou nou kenbe ki te panse pou yon moman. Ki lòt bagay? [Elèv yo, enkonpreansibl] >> Se konsa, bon te panse, li ka pèsonaj la nil. Li nan aktyèlman pa, nan ka sa a. Yeah? [Elèv yo, enkonpreansibl] >> ASCII. Oswa, kite m 'jeneralizasyon menm pi lwen. C la% gen jis pou w tcheke erè-. Nou pa vle gen yo dwe karaktè apre nimewo a, men ki sa sa a pèmèt m 'fè a se sa ki annapre yo: Li sanble ke sskanf, san konte estoke valè nan n ak c, nan egzanp sa a isit la, ki sa li tou se li retounen nimewo a nan varyab li mete valè pous Se konsa, si ou sèlman tape nan 1 2, 3, Lè sa a, sèlman d la% ki pral matche ak ak sèlman n vin estoke ki gen yon valè tankou 1 3 2 e pa gen anyen vin mete nan c; c rete yon valè fatra, se konsa pale. Fatra paske li pa janm te konn mete inisyalizèd tankou kèk valè. Se konsa, nan ka sa a, sskanf retounen 1, paske mwen peple youn nan moun ki endikasyon, nan ka sa a, gwo. Mwen gen yon int, se konsa mwen libere dwat la rive nan libere moute memwa a ki GetString aktyèlman resevwa lajan, ak Lè sa a, m'a tounen n. Lòt Bagay, si ou janm mande ki kote rekoumanse deklarasyon soti nan, soti nan dwa isit la. Si, pa kontra, mwen tape nan 1 2 3 foo, sèlman kèk sekans o aza nan tèks la, sskanf ki pral wè la a, Ooh, nimewo, Ooh, nimewo, Ooh, nimewo, Ooh - f. Epi li pral mete 1 2 3 an nan n. Li nan pral mete f a nan c, ak Lè sa a, retounen 2. Se konsa, nou gen, jis lè l sèvi avèk definisyon an debaz ki nan konpòtman skanf a, yon fason trè senp - byen, konplèks nan zye premye, men nan fen jounen an, mekanis jistis senp nan di, ki gen la yon int, e si se konsa, se ke bagay la sèlman ke mwen te jwenn? Ak espas vid ki isit la se ekspre. Si ou li dokiman an pou sskanf, li di ou ke si ou gen ladan yo yon moso nan espas blan nan kòmansman an oswa nan fen a, sskanf twò pral pèmèt itilizatè a yo, pou kèlkeswa rezon, frape bar 1 2 3, e ke yo pral lejitim. Li pa pral rele nan itilizatè a jis paske yo frape bar la nan kòmansman an oswa nan fen a, ki se jis yon ti kras plis user-zanmitay. Nenpòt kesyon, lè sa a, sou GetInts? Yeah? [Kesyon elèv, enkonpreansibl] >> Bon kesyon. E si ou jis tape nan yon Char, tankou f, frape ak antre nan san yo pa janm tape 1 2 3; ki sa ou panse konpòtman an nan liy sa a nan kòd ta Lè sa a, ta dwe ye? Se konsa, sskanf ka kouvri ki twò, paske se nan ka sa a, li pa pral ranpli n oswa c; li a pral olye retounen 0. Nan ka sa a, mwen tou pwan ki scénario, paske valè a prévu sa mwen vle se 1. Mwen sèlman vle 1, ak sèlman 1 bagay ka plen. Bon kesyon. Lòt moun? Tout dwa, kidonk kite pa nan ale nan tout nan fonksyon yo nan isit la, men se yon sèl la ki sanble ap, petèt, nan ki rete enterè se GetString paske li sanble ke GetFloat, GetInt, GetDouble, GetLongLong tout bote yon bann fonksyonalite yo nan GetString. Se konsa, kite a pran yon gade nan ki jan se li ki aplike isit la. Sa a yon sèl sanble yon konplèks ti kras, men li itilize eleman fondamantal yo menm ke nou kòmanse te kòmanse pale sou semèn dènye a. Se konsa, nan GetString, ki te pran pa gen okenn agiman tankou pou chak anile a moute isit la, ak li retounen yon kòd; konsa mwen deklare yon kòd yo rele zòn de defans. Mwen pa vrèman konnen ki sa ki nan yo pral itilize pou deja, men nou pral wè. Sanble kapasite se, pa default, 0; pa byen asire ki kote sa a se prale. Pa asire ki sa n ap pase pou l itilize pou ankò. Men koulye a, li la ap resevwa yon ti kras plis enteresan, se konsa nan liy 243, nou deklare yon c Int, sa a se sòt de yon detay estipid. Yon Char se 8 Bits, ak 8 Bits ka magazen ki jan anpil valè diferan? 256. Pwoblèm lan se, si ou vle gen 256 diferan karaktè ASCII, ki gen, si ou panse tounen, ak sa a se pa yon bagay yo memorize. Men, si ou panse tounen nan tablo gwo ASCII nou te gen semèn de sa, te gen, nan ka sa a, 128 oubyen 256 karaktè ASCII. Nou itilize tout modèl yo nan a 0 ak 1 a jiska. Sa a se yon pwoblèm si ou vle pou kapab detekte yon erè. Paske, si w ap deja lè l sèvi avèk 256 valè pou karaktè ou a, nou pa t 'reyèlman planifye alavans, paske koulye a ou pa gen okenn fason pou li di: "Sa se pa yon karaktè legi; sa a se kèk mesaj inègza." Se konsa, sa mond lan fè se yo, yo sèvi ak pwochen valè nan pi gwo, yon bagay tankou yon int pou ke ou gen yon nimewo fou nan Bits, 32 pou 4 milya dola valè sa posib, pou ke ou ka tou senpleman fini lè l sèvi avèk, esansyèlman, 257 nan yo, 1 nan ki te gen kèk sans espesyal kòm yon erè. Se konsa, kite a wè ki jan sa a travay. Nan liy 246, mwen gen sa a pandan y ap riban gwo ki ap rele fgetc; f dosye siyifikasyon, getc, ak Lè sa a, stden. Vire soti sa a se jis fason an plis egzak pou fè li di: "li enfòmasyon nan men gwoup klavye a." Klavye Creole vle di D ', randman estanda vle di ekran, ak erè estanda, ki nou pral wè nan pset 4, vle di ekran an, men yon pati espesyal nan ekran an pou ke li pa nan conflated ak aktyèl pwodiksyon ke ou gen entansyon enprime; men plis sou sa nan tan kap vini an. Se konsa, fgetc jis vle di li yon karaktè soti nan klavye a, epi estoke li ki kote? Estoke li nan c, ak Lè sa a, tcheke, se konsa mwen jis lè l sèvi avèk kèk konjonksyon Boolean isit la, tcheke sa pa egal \ n, se konsa si itilizatè a frape antre. Nou vle sispann nan pwen sa a, nan fen riban a, ak nou menm tou nou vle tcheke pou konstan nan espesyal, èof, ki si ou konnen oswa ou devine - ki sa li kanpe pou? Fen dosye-a. Se konsa, sa a se kalite idyo, paske si mwen sezisman nan klavye a, gen nan reyèlman pa gen okenn dosye ki enplike nan sa a, men sa a se jis sòt de tèm nan jenerik itilize vle di ki pa gen anyen lòt ap vini soti nan dwèt imen an. Èof. Fen dosye-a. Kòm yon sou kote, si ou te janm frape kontwòl d nan klavye ou a, pa ke ou ta gen ankò; ou te frape kontwòl c. Men, kontwòl d voye sa a espesyal èof konstan rele. Se konsa, kounye a nou jis gen kèk alokasyon memwa dinamik. Se konsa, si n + 1> kapasite, koulye a, mwen pral eksplike n. n se jis ki jan anpil bytes yo se kounye a nan zòn de defans la, fisèl la ke w ap kounye a bati moute soti nan itilizatè lan. Si ou gen plis karaktè nan zòn de defans ou a pase ou gen kapasite nan zòn de defans la, intuitivement, ki sa nou bezwen fè Lè sa a, se asiyen plis kapasite. Mwen pral koudèy sou kèk nan aritmetik a isit la epi konsantre sèlman sou sa a fonksyon isit la. Ou konnen ki sa malok se, oswa omwen jeneralman yo konnen yo. Pran yon devine kisa realloc fè. [Repons elèv, enkonpreansibl] >> Yeah. E li pa nan byen ajoute memwa; li reafèkt memwa jan sa a: Si gen nan plas toujou nan fen fisèl la ba ou plis nan ki memwa pase sa li orijinal ba ou, lè sa a ou pral jwenn ke memwa adisyonèl. Se konsa, ou ka jis mete karaktè yo strings tounen nan fè bak nan do nan do. Men, si sa a, se pa ka a, paske ou tann twò lontan ak yon bagay o aza te resevwa plopped nan memwa la, men gen nan siplemantè memwa desann isit la, ki nan oke. Realloc ki pral fè tout ekzistan la lou pou ou, deplase fisèl la ou te li nan konsa byen lwen soti isit la, mete l 'anba isit la, ak Lè sa a, ba ou kèk plis pist nan pwen sa a. Se konsa, avèk yon vag nan men l ', kite m' di ke sa GetString ap fè se li nan kòmanse avèk yon zòn de defans piti, petèt 1 sèl karaktè, epi si itilizatè a kalite nan 2 karaktè, GetString fini moute rele realloc e li di, 'Ooh, 1 karaktè pa t' ase. Ban m '2 karaktè.' Lè sa a, si w li nan lojik nan riban an, li nan pral di, 'Ooh, itilizatè a tape nan 3 karaktè. Ban m 'koulye a pa 2, men 4 karaktè, lè sa a, ban m' 8, Lè sa a, ban m '16 ak 32.' Reyalite a ke mwen double pwensip kapasite a chak fwa vle di ke zòn de defans nan a pa pral grandi tou dousman. Li nan ale nan grandi Super vit, e ki sa ta ka avantaj nan sa? Poukisa mwen double pwensip gwosè a nan zòn de defans la, menm si itilizatè a ta ka jis bezwen 1 siplemantè karaktè soti nan klavye a? [Elèv repons lan, enkonpreansibl]. >> Ki sa ki nan sa? Egzakteman. Ou pa oblije grandi li kòm souvan. Ak sa a se jis kalite yon - you're couverture parye ou isit la. Lide a ke yo te ke ou pa vle yo rele realloc yon anpil, paske li gen tandans ka ralanti. Nenpòt ki lè w mande sistèm nan fonksyone pou memwa, kòm ou pral byento wè nan yon seri pwoblèm nan lavni, li gen tandans pran kèk tan. Se konsa, minimize ki kantite lajan yo nan tan, menm si w ap gaspiye kèk espas, gen tandans ka yon bon bagay. Men, si nou li nan yon pati final la nan GetString isit la, e ankò, konprann chak sèl liy isit la se pa konsa pou sa enpòtan jodi a. Men, remake ke li evantyèlman rele malok ankò, epi li repati egzakteman jan bytes anpil jan li bezwen pou fisèl la ak Lè sa a, lanse lwen lè w rele gratis, tanpon la twò gwo, si li tout bon te resevwa double fwa twòp. Nan ti bout tan, lè sa a jan GetString ki te travay tout tan sa a. Tout sa li fè a li yon karaktè nan yon tan ankò, li ankò e ankò ak tout tan li bezwen kèk memwa adisyonèl, li mande sistèm nan fonksyone pou li lè w rele realloc. Nenpòt kesyon? Tout dwa. Yon atak. Kounye a ke nou konprann pwent, oswa omwen yo se de pli zan pli ki abitye avèk endikasyon, kite a konsidere kijan lemonn antye kòmanse tonbe plat atè si ou pa byen defann kont itilizatè konfwontasyon, moun ki ap eseye Hack nan sistèm ou an. Moun ki ap eseye vòlè lojisyèl ou pa kontourn kèk kòd enskripsyon yo ke yo ta ka otreman gen tape pous Pran yon gade nan egzanp sa a isit la, ki se jis C kòd ki gen yon fonksyon prensipal nan pati anba a, ki rele yon foo fonksyon, ak ki sa ki li pase foo? [Elèv] Yon rezònman sèl. >> Single agiman. Se konsa, argv [1], ki vle di premye mo ki itilizatè a tape nan liy lan bay lòd apre a.out oswa kèlkeswa sa ki pwogram lan te rele. Se konsa, foo, nan tèt la, li pran nan yon * Char, men * Char se jis ki sa? Fisèl. Pa gen anyen nouvo isit la, epi li se ki fisèl abitrèman yo te rele ba. Nan liy sa a isit la, Char c [12], nan sòt de semi-teknik lang angle, ki sa ki liy sa a ap fè? Etalaj la -? Karaktè. Ban m 'yon etalaj de 12 karaktè. Se konsa, nou ta ka rele sa yon zòn de defans. Li nan teknikman rele c, men yon zòn de defans nan pwogram jis vle di yon pakèt moun sou espas ke ou ka mete kèk bagay pous Lè sa a, alafen, manki, nou pa te itilize anvan. Men, ou ka pwobableman devine ki sa li fè. Li kopi memwa. Ki sa sa fè? Oke, li aparamman kopi ba, D 'li yo, nan c, men se sèlman jiska longè nan ba. Men, gen nan yon ensèk isit la. Oke, kidonk teknikman nou ta dwe reyèlman fè strlèn (bar) x sizof (Char), ki nan kòrèk. Men, nan ka ki pi mal la isit la, se pou yo asime ke that's - se konsa, oke. Lè sa a, gen nan 2 bug. Se konsa, sizof (Char), tout dwa, kite la fè sa-a yon ti kras pi laj. Se konsa, kounye a gen nan toujou yon ensèk, ki se ki sa? [Repons elèv, enkonpreansibl] >> Tcheke pou ki sa? Oke, kidonk nou ta dwe tcheke pou nil, paske move bagay rive lè konsèy ou a se nil, Paske ou ta ka fini pral gen, epi ou pa ta dwe janm pral nan nil pa dereferencing l 'ak operatè a *. Se konsa, sa a, se bon, ak ki lòt bagay n'ap fè? Lojikman a gen yon defo isit la tou. [Repons elèv, enkonpreansibl] >> Se konsa, tcheke si arg ≥ 2? Oke, kidonk gen nan 3 pinèz nan pwogram sa a isit la. Nou pa tcheke si itilizatè a aktyèlman tape nan anyen nan argv [1], bon. Se konsa, sa ki nan pinèz la twazyèm? Yeah? [Repons elèv, enkonpreansibl] >> Bon. Se konsa, nou tcheke yon sèl senaryo. Nou chal tcheke pa kopye plis memwa pase ta depase longè nan ba. Se konsa, si fisèl la itilizatè a tape nan se 10 karaktè long, sa a se li t'ap di: Se sèlman yon kopi 10 karaktè. Epi sa a, oke, men ki sa si itilizatè a tape nan yon mo nan èd memwa a tankou yon mo karaktè 20; sa a se, li di kopi 20 karaktè nan bar nan ki sa? c, ki te rekonèt kòm tanpon nou an, ki vle di ou jis te ekri done 8 lokal multiple ke ou pa fè sa pwòp, epi ou pa posede yo nan sans ke ou pa janm resevwa lajan yo. Se konsa, sa a se sa ki jeneralman li te ye tankou atak la debòde tanpon, oswa tanpon anvahi atak, ak atak li a nan sans ke si itilizatè a oswa pwogram nan ki nan rele fonksyon ou a ap travay sa a kare, sa ki aktyèlman k ap pase answit te kapab byen move. Se pou nou pran yon gade nan foto sa a isit la. Pòtre sa a reprezante chemine ou nan memwa. Ak sonje ke chak fwa ou rele yon fonksyon, ou jwenn sa a ankadreman ti kras sou chemine a ak Lè sa a, yon lòt ak Lè sa a, yon lòt ak Lè sa a, yon lòt. Ak konsa byen lwen nou te jis kalite distrè sa yo lwen kòm rektang swa gen sou tablo a oswa sou ekran an isit la. Men, si nou rale nan sou yon sèl nan tout sa yo rektang, lè w rele yon foo fonksyon, li sanble ke gen nan plis sou chemine a andedan nan ki ankadreman ak rektang ki pase jis x ak y ak a ak b, tankou nou t 'ap pale de swap. Li sanble ke gen kèk detay ki pi ba-nivo, nan mitan yo retounen adrès. Se konsa, li vire soti lè prensipal rele foo, prensipal la gen enfòme foo sa ki adrès prensipal la se nan memwa òdinatè a. Paske otreman, le pli vit ke foo se fè pwomenad, tankou nan ka sa a isit la, yon fwa ou rive nan sa a fèmen atèl Curly nan fen foo, ki jan èk an foo konnen ki kote kontwòl yo nan pwogram nan sipoze ale? Li sanble ke repons lan nan kesyon an nan ki rektang wouj isit la. Sa a reprezante yon konsèy, ak li a jiska òdinatè a nan magazen, tanporèman, sou chemine a sa yo rele adrès la nan prensipal pou ke le pli vit ke foo fè pwomenad, òdinatè a konnen ki kote ak ki sa liy nan prensipal pou tounen nan. Konsèy sove ankadreman gen rapò menm bagay ak sa a. Char bar * isit la reprezante ki sa? Oke, kounye a segman sa a ble isit la se ankadreman foo a, ki sa ki ba? Oke, kidonk bar se jis agiman nan fonksyon an foo. Se konsa, kounye a nou ap tounen nan foto a yo konnen yo. Genyen nan bagay pi plis ak distraksyon plis sou ekran an men segman sa a limyè ble se ki sa nou ve yo te fè desen sou tablo a pou yon bagay tankou swap. Sa a se ankadreman an pou foo ak bagay la sèlman nan li kounye a se ba, ki se sa a paramèt. Men, ki lòt bagay yo ta dwe nan chemine a, dapre sa a kòd isit la? Char c [12]. Se konsa, nou ta dwe tou wè 12 kare nan memwa, afekte nan yon varyab rele c. Ak tout bon nou gen ki sou ekran an. Trè tèt la gen c [0], ak Lè sa a, otè a nan dyagram sa a pa t 'bezwen deranje desen tout kare yo men gen tout bon 12 gen paske si ou gade nan dwa anba a, c [11], si ou konte soti nan 0, se 12 bytes yo sa yo. Men, isit la nan pwoblèm nan: Nan ki direksyon an c k ap grandi? Triye nan tèt anba, dwa? Si li kòmanse nan tèt la ak ap grandi jouk anba a, pa sanble nou te kite tèt nou anpil pist isit la nan tout. Nou te kalite pentire tèt nou nan yon kwen, e ke c [11] se dwa atake bar, ki se dwa atake konsèy ankadreman chemine, ki se dwa atake adrès retou a; gen nan chanm pa plis. Se konsa, sa ki nan enplikasyon la, lè sa a, si ou vis moute nan, epi ou eseye lekti 20 bytes nan yon zòn de defans 12-multiple? Kote moun yo 8 bytes plis pwal ale? Anndan tout lòt bagay, kèk nan yo ki se super enpòtan. Ak bagay ki pi enpòtan, potansyèlman, se ti bwat la wouj la, adrès retou. Paske ta kwè ke ou yo se swa aksidantèlman oswa adversarially recouvrir sa yo bytes 4, ki adrès konsèy, pa sèlman ak fatra yo, men ak yon chif ki k ap pase nan reprezante yon adrès aktyèl nan memwa? Ki sa ki nan implicaiton a, lojikman? [Repons elèv, enkonpreansibl] >> Egzakteman. Lè foo retounen ak frape ki atèl Curly, pwogram nan se pral kontinye pa pou retounen nan prensipal yo, li pral pou retounen nan kèlkeswa adrès se nan ki bwat wouj. Koulye a, nan ka a nan kontourn enskripsyon lojisyèl, ki sa ki adrès la ki k ap tounen tounen l 'ap fonksyon an ki nòmalman vin rele apre ou te peye pou lojisyèl an ak antre kòd enskripsyon ou a? Ou te kapab sòt nan Trick òdinatè a nan pa pral isit la, men olye de sa, moute isit la. Oswa, si ou ap reyèlman entelijan, yon lènmi ka aktyèlman tape nan nan klavye a, pou egzanp, pa yon mo reyèl, pa 20 karaktè, men ta kwè li oswa li kalite nan kèk karaktè ki reprezante kòd? E li pa k ap pase yo dwe C kòd, li te pral fè karaktè yo ki reprezante kòd machin binè, nan 0 ak 1 a. Men, si yo ap entelijan ase fè sa, nan yon jan kanmenm keratin nan èd memwa nan GetString yon bagay ki se esansyèlman konpile kòd, ak 4 dènye bytes yo recouvrir ki adrès retou, ak sa ki adrès ki D 'fè? Li makèt nan rektang sa a wouj adrès ki nan multiple an premye nan zòn de defans la. Se konsa, ou gen yo dwe reyèlman entelijan, e sa se yon anpil nan esè ak erè pou moun ki move yo deyò, men si ou kapab konnen ki jan gwo sa a tanpon se, sa yo ki dènye bytes yo kèk moun nan opinyon la ke ou bay nan pwogram lan rive yo ekivalan nan adrès ki nan kòmansman an nan zòn de defans ou a, ou ka fè sa. Si nou reponn: nòmalman, hello, ak \ 0, se sa ki fini moute nan zòn de defans la. Men, si nou ap plis entelijan, e nou ranpli ke zòn de defans ak sa nou pral generic rele kòd atak, A, A, A, A: atak, atak, atak, atak, kote sa a se jis yon bagay ki fè yon bagay mal. Oke, sa k ap pase si ou se vrèman entelijan, ou ta ka fè sa: Nan ti bwat la wouj isit la se yon sekans nan nimewo: 80, CO, 35, 08. Remake ke matche ak nimewo a ki la moute isit la. Li nan yo nan lòd do, men li plis sou tan sa a kèk lòt. Remake sa a te adrès retou te fè espre chanje egal adrès la moute isit la, pa adrès ki nan prensipal la. Se konsa, si nèg la move se super entelijan, li te oswa li pral gen ladan yo nan ke kòd atak yon bagay tankou, 'Efase tout dosye itilizatè a.' 'Oswa' Kopye modpas yo, 'oswa' Kreye yon kont itilizatè ke mwen ka ale nan. Anyen nan tout; ak sa a se tou de danje a ak pouvwa a nan C. Paske ou gen aksè a memwa via endikasyon epi ou ka Se poutèt sa ekri anyen ou vle nan memwa yon òdinatè la. Ou kapab fè yon òdinatè fè anyen ou vle tou senpleman pa gen li sote alantou nan espas pwòp memwa li yo. Se konsa, nan jou sa a, se konsa anpil pwogram ak anpil sit entènèt ki konpwomèt bouyi desann nan moun k ap pran avantaj de sa a. Ak sa a ta ka sanble tankou yon atak super-sofistike, men li pa toujou kòmanse fason sa. Reyalite a se ke sa moun move ap anjeneral fè se, si li nan yon pwogram nan yon liy lòd oswa nan yon pwogram grafik oswa sit entènèt yon, se ou jis kòmanse bay istwa san sans. Ou tape nan yon mo nan jaden yo rechèch ak frape antre nan reyèlman gwo, ak ou rete tann yo wè si aksidan yo sou sit wèb. Oswa ou rete tann yo wè si pwogram lan manifeste kèk mesaj erè. Paske si ou jwenn chans, menm jan nèg la move, epi ou bay kèk D 'fou ki kolizyon pwogram nan, sa vle di pwogramè a pa t 'antisipe move konpòtman ou ki vle di ou kapab pwobableman, ak efò ase, ase esè ak erè, konnen ki jan salè yon atak plis presi. Se konsa, kòm anpil yon pati nan sekirite se pa sèlman evite atak sa yo nèt, men detekte yo ak aktyèlman gade nan mòso bwa ak wè sa entrées fou gen moun tape nan sit entènèt ou. Ki sa ki tèm rechèch yo te moun tape nan sit entènèt ou a nan espwa ke yo debòde kèk zòn de defans? Lè sa a tout klou desann nan Basics yo senp nan sa ki nan yon etalaj, epi ki sa sa vle di asiyen epi sèvi ak memwa? Ak ki gen rapò ak sa, tou, se sa a. Se konsa, kite a jis gade andedan nan yon kondwi difisil ankò. Se konsa, ou sonje soti nan yon semèn oswa de Anons sa pibliye depi ke lè ou trennen dosye bin resiklaj ou a oswa poubèl, ki sa ki k ap pase? [Elèv] Pa gen anyen. >> Yeah, absoliman anyen. Evantyèlman si ou kouri ba sou espas ki gen kapasite, Windows oswa Mac OS pral kòmanse efase dosye pou ou. Men, si w glise yon bagay nan la, Lè sa a, li pa nan tout ki an sekirite. Tout manm roomate, zanmi oswa yon fanmi ou an gen fè se doub klike sou, ak vwala. Genyen nan tout dosye yo preliminè ke ou te eseye efase. Se konsa, pifò nan nou omwen konnen ki di ou gen dwa klike sou oswa kontwole klike sou ak vid fatra a, oswa yon bagay tankou sa. Men, menm lè sa a, ki pa byen fè jwe fent la. Paske sa ki pase lè ou gen yon dosye sou kondwi difisil ou ki reprezante kèk dokiman mo oswa kèk JPEG? Lè sa a reprezante kondwi difisil ou, e kite yo di sa tranch isit la reprezante ki ranpli, ak li a ki konpoze de yon pakèt antye nan la 0 ak 1 a. Kisa k ap pase lè ou pa sèlman trennen ki dosye trachkan a oswa bin resiklaj, men tou vide l '? Triye nan pa gen anyen. Li pa absoliman anyen kounye a. Kounye a li nan jis pa gen anyen, paske yon ti kras yon bagay k ap pase nan fòm lan nan tablo sa a. Se konsa, gen nan kèk kalite baz done oswa tablo andedan nan memwa yon òdinatè a ki esansyèlman gen 1 kolòn pou dosye non, ak 1 kolòn pou kote dosye a, kote sa a ta kapab kote 123, jis yon nimewo o aza. Se konsa, nou ta ka gen yon bagay tankou x.jpg, ak kote 123. Ak sa k ap pase lè sa a, lè ou vide fatra ou a? Ki ale. Men, sa ki pa ale se la a 0 ak 1 a. Se konsa, sa a, lè sa a, koneksyon a pset 4? Oke, ak pset 4, jis paske nou te aksidantèlman efase kat la flash kontra enfòmèl ant ki te gen tout foto sa yo, oswa jis paske li pa move chans te vin pèvèti, pa vle di ke 0 a la ak nan 1 yo pa toujou la. Petèt kèk nan yo yo pèdi paske yon bagay te resevwa pèvèti nan sans ke kèk nan 0 te vin 1 a ak 1 a te vin 0 a. Move bagay ka rive paske nan buggy lojisyèl oswa kenkayri ki defektye. Men, anpil nan moun ki Bits, petèt menm 100% nan yo se toujou la, li jis ki òdinatè a oswa kamera a pa konnen ki kote JPEG 1 te kòmanse ak ki kote JPEG 2 te kòmanse, men si ou, pwogramè a, konnen, avèk yon ti jan nan konprandr, kote sa yo JPEGs yo oswa sa yo sanble, ou ka analize a nan 0 ak nan 1 ak m 'di: Ooh. JPEG. Ooh, JPEG. ' Ou kapab ekri yon pwogram ak esansyèlman jis yon pou oswa pandan y ap riban ki restaure yon sèl chak ak tout moun sa yo dosye. Se konsa, leson an lè sa a, se kòmanse "byen" efase dosye ou si ou ta renmen pou fè pou evite sa a tout ansanm. Wi? [Kesyon elèv, enkonpreansibl] >> Gen plis memwa pase ou te fè anvan - Oh! Bon kesyon. Se konsa, poukisa, lè sa a, apre yo fin vidanj fatra a, òdinatè w lan di ou ke ou gen plis gratis espas pase ou te fè anvan? Nan yon Nutshell, paske li nan bay manti. Plis teknikman, ou gen plis espas. Paske, koulye a ou yo te di, ou ka mete lòt bagay kote ki dosye yon fwa se te, men sa pa vle Bits yo yo pral lwen, ak sa pa vle di Bits yo yo te chanje tout 0 a, pou egzanp, pou pwoteksyon ou. Nan kontras, si ou "byen" dosye efase, oswa fizikman detwi aparèy la, ki vrèman se yon fason a sèlman, pafwa, otou sa. Se konsa, poukisa pa nou kite sou ki note semi-pè, ak nou pral wè ou nan Lendi. CS50.TV