[Powered by Google Translate] [Linggo 5] [David J. Malan - Harvard University] [Ito ay CS50. - CS50.TV] CS50, Linggo 5. Ngayon at sa linggong ito, ipakilala namin ng kaunti ng mundo ng mga forensics sa konteksto ng Problema Itakda 4. Ngayon ay isang dinaglat na panayam dahil may isang espesyal na kaganapan sa dito pagkatapos. Kaya makikita namin tumagal ng isang silip at manunudyo ang parehong mga mag-aaral at mga magulang magkamukha ngayon na may ilang ng mga bagay na sa abot-tanaw. Kasama ng mga ito, bilang ng Lunes, mayroon ka ng ilang higit pang mga kaklase. edX, Harvard at MIT bagong online na hakbangin para OpenCourseWare at higit pa, ay paglunsad sa Harvard ng campus sa Lunes, na nangangahulugan ay Lunes mayroon ka, bilang ng huling count, 86,000 karagdagang mga kaklase na ay sumusunod na kasama CS50 aralin at mga seksyon at walkthroughs at problema set. At bilang bahagi ng, ikaw ay maging miyembro ng pampasinaya klase ng CS50 at ngayon CS50x. Bilang bahagi ng ngayon, mapagtanto na magkakaroon ilang mga upsides bilang. Upang makakuha ng handa para sa, para sa napakalaking bilang ng mga mag-aaral, sumapat ito sa sabihin na kahit na mayroon kaming 108 TFs at Cas, ito ay hindi pa ang pinakamahusay na mag-aaral-guro ratio sa sandaling namin pindutin 80,000 ng ang mag-aaral. Hindi namin na grading maraming problema nagtatakda nang manu-mano, kaya ipinakilala linggo na ito sa hanay ng problema ay CS50 Check, na pagpunta sa isang command-line utility sa loob ng appliance na makakakuha ka ng isang beses mong i-update ang mga ito sa ibang pagkakataon ito weekend. Magagawa mong upang magpatakbo ng isang command, check50, sa iyong sariling pset, at makakakuha ka ng instant na feedback bilang sa kung ang iyong programa ay tama o maling ayon sa iba't-ibang mga pagtutukoy ng disenyo na ibinigay namin. Higit pa sa na sa detalye ng hanay ng problema. Ang mga CS50x kaklase ay gumagamit na ito pati na rin. Problema Set 4 ay tungkol sa forensics, at ang pset ito ay talagang inspirasyon sa pamamagitan ng ilang mga real-buhay na mga bagay-bagay kung saan kapag ako ay sa graduate paaralan interned ko para sa isang sandali sa District Attorney opisina Middlesex County ng paggawa ng forensic trabaho sa kanilang mga lead na forensic imbestigador. Ano ito amounted sa, sa tingin ko nabanggit ko ng ilang linggo nakaraan, ay ang Mass Pulisya ng Estado o iba ay darating sa, sila drop off ang mga bagay tulad ng mga na hard drive at CD at tumbahin disk at ang mga tulad ng, at pagkatapos ay ang layunin ng opisina ng mga forensics ay upang alamin kung nagkaroon o ay hindi katibayan ng uri. Ito sa Espesyal na Yunit ng Pagsisiyasat, kaya ito ay pantanggapan krimen. Ito ay mas troubling uri ng mga krimen, ang anumang bagay na kinasasangkutan ng ilang mga uri ng mga digital na media. Ito lumiliko out na hindi na ang maraming tao ay sumulat ng isang email na nagsasabi, "ginawa ko ito." Kaya medyo madalas, ang mga forensic paghahanap ay hindi i-lahat na magkano prutas, ngunit kung minsan mga tao ay sumulat ng mga naturang email. Kaya minsan, ang mga pagsusumikap ay gagantimpalaan. Ngunit sa humantong forensic pset na ito, makikita namin nagpapakilala sa pset4 bit ng graphics. Maaaring tumagal ng mga bagay na ito para sa nabigyan ng - mga JPEG, GIF, at tulad ng - mga araw na ito. Ngunit kung sa tingin mo talagang tungkol dito, isang imahe, tulad ng mukha ng Rob, ma-modelo bilang isang pagkakasunud-sunod ng mga tuldok o pixels. Sa kaso ng Rob sa mukha, may lahat ng mga uri ng mga kulay, at nagsimula kaming upang makita ang mga indibidwal na tuldok, na kilala bilang pixel, sabay-sabay na sinimulan namin upang mag-zoom in. Ngunit kung pasimplehin namin ang mundo ng kaunti at lamang sabihin na ito dito ay Rob sa black and white, upang kumatawan sa itim at puti, maaari naming gamitin na lamang ang binary. At kung kami ay pagpunta sa gamitin ang binary, 1 o 0, maaari naming ipahayag ang parehong imahe ng nakangiting mukha Rob ang pattern na ito ng bits. 11000011 kumakatawan puti, puti, itim, itim, itim, itim, puti, puti. At kaya ito ay hindi isang malaking hakbang pagkatapos ay upang simulan ang pakikipag-usap tungkol sa makulay na litrato, mga bagay na nais mong makita sa Facebook o sa isang digital camera. Ngunit tiyak na pagdating sa kulay, kailangan mo ng higit pang mga bit. At medyo karaniwang sa mundo ng mga larawan ay gamitin hindi 1-bit na kulay, bilang na ito ay nagmumungkahi, ngunit 24-bit na kulay, kung saan ang iyong aktwal na makakuha ng mga milyon-milyong mga kulay. Kaya bilang sa kaso kapag kami naka-zoom in sa Rob mata, na anumang bilang ng mga milyon-milyong ng iba't ibang makukulay na posibilidad. Kaya naming ipakilala ito sa Problema Set 4 pati na rin sa walkthrough, na ngayon sa 3:30 sa halip ng karaniwang 2:30 dahil sa Biyernes sa panayam dito. Ngunit video online gaya ng dati bukas. Din namin ipakilala sa iyo sa isa pang format ng file. Ito ay sadyang ginawa upang hitsura intimidating sa unang, ngunit ito ay ilan lang dokumentasyon para sa isang C struct. Ito lumiliko out na ang Microsoft taon na ang nakakaraan nakatulong sa magpabantog ang format na ito na tinatawag na ang bitmap file format, bmp, at ito ay isang sobrang simple, makulay na graphical format ng file na ginagamit para sa pa ng ilang oras at paminsan-minsan pa rin para sa mga wallpaper sa desktop. Kung sa tingin mo pabalik sa Windows XP at ang mga lumiligid na burol at ang mga asul na langit, na karaniwang isang bmp o bitmap imahe. Bitmaps ay masaya para sa atin dahil mayroon sila ng kaunti pang pagiging kumplikado. Hindi pa bilang simpleng bilang ang grid na ito ng 0s at 1s. Sa halip, mayroon kang mga bagay tulad ng isang header sa simula ng isang file. Kaya sa ibang salita, sa loob ng isang file na. Bmp ay isang buong bungkos ng 0s at 1s, ngunit may ilang karagdagang 0s at 1s sa doon. At ito ay lumiliko out na ang malamang nagsagawa kami para sa ipinagkaloob para sa taon - format ng file tulad ng. doc o. xls o. mp3,. mp4, anuman ang format ng file na pamilyar ka sa - ano ang kahit ibig sabihin ay isang format ng file, dahil sa pagtatapos ng araw ang lahat ng mga file na ito ginagamit namin lamang 0s at 1s. At siguro mga 0s at 1s kumakatawan ABC sa pamamagitan ng ASCII o tulad ng, ngunit sa pagtatapos ng araw, ito ay pa rin lamang 0s at 1s. Kaya mga tao lamang paminsan-minsan magpasya upang maglubid ng isang bagong format ng file kung saan sila alisunod sa pamantayan kung ano ang talagang ibig sabihin ng mga pattern ng bits. At sa kasong ito dito, ang mga tao na dinisenyo sa bitmap format ng file sinabi na sa unang byte sa isang bitmap na file, tulad ng naitala sa pamamagitan ng offset 0 doon, may ilang cryptically na pinangalanang variable na tinatawag na bfType, kung saan nakatayo lamang para sa bitmap uri ng file, kung anong uri ng bitmap file ito. Maaari mong magpakilala marahil mula sa pangalawang hilera na offset 2, byte numero 2, may isang pattern ng 0s at 1s na kumakatawan sa kung ano ang? Ang laki ng isang bagay. At ito napupunta mula doon. Kaya sa Problema Set 4, makikita ka lumakad sa pamamagitan ng ilan sa mga bagay na ito. Hindi namin aalaga tungkol sa lahat ng mga ito. Ngunit mapansin ito nagsimulang upang makakuha ng kawili-wiling sa buong byte 54: rgbtBlue, Green, at Red. Kung sakaling mo na narinig ang acronym RGB - pula, berde, asul - ito ay isang reference na dahil ito ay lumiliko ang maaari mong ipinta ang lahat ng mga kulay ng bahaghari may ilang mga kumbinasyon ng mga pula at bughaw at berde. At sa katunayan, ang mga magulang sa kuwarto ay maaaring isipin ang ilan sa pinakamaagang Projector. Mga araw na ito, mo lamang makita ang isang maliwanag na ilaw paparating ng lens, ngunit pabalik sa araw ay ang pulang lens, ang mga asul na lens, at ang berde lens, at kasama nila naglalayong sa isang screen at nabuo ang isang makulay na larawan. At medyo madalas, gitnang paaralan at mataas na paaralan ay may mga lens kailanman kaya bahagyang nakatagilid, kaya ikaw ay ang uri ng makakita ng mga double o triple larawan. Ngunit na ideya. Ikaw ay may pula at berde at bughaw na ilaw pagpipinta ng isang larawan. At ang parehong prinsipyo ay ginagamit sa mga computer. Kaya kabilang ang mga hamon pagkatapos ay para sa iyo sa Problema Set 4 na ang ilang mga bagay. Ay isa sa aktwal na baguhin ang laki ng isang imahe, sa isang pattern ng 0s at 1s, malaman kung aling chunks ng 0s at 1s ay kumakatawan sa kung ano ang sa isang istraktura tulad nito, at pagkatapos malaman kung paano ginagaya ang pixels - ang mga pula, blues, sa paglalaro ng golf - sa loob ng sa gayon ay kapag ang isang larawan ay ganito ang hitsura simula, maaaring magmukhang ganito sa halip pagkatapos na. Kabilang sa iba pang mga hamon na ikaw ay ipinasa ng forensic imahe ng isang aktwal na file mula sa isang digital camera. At sa camera na, sa sandaling unang panahon, ay isang buong grupo ng mga larawan. Ang problema ay aksidenteng namin mabubura o may larawan Nasira sa paanuman. Masamang mangyayari sa mga digital camera. At kaya mabilis namin kinopya lahat ng 0s at 1s off ng card na iyon para sa iyo, naka-save na ang lahat ng ito sa isang malaking file, at pagkatapos ay makikita namin ipasa ang mga ito sa iyo sa Problema Itakda 4 sa gayon ay maaari mong magsulat ng isang programa sa C na upang mabawi ang lahat ng mga JPEG na, perpektong. At ito ay lumiliko out na mga JPEG, kahit na nasa medyo ng isang complex na format ng file - sila magkano ang mas kumplikado kaysa ito nakangiting mukha dito - ito lumiliko out na ang bawat JPEG ay nagsisimula na may parehong pattern ng 0s at 1s. Ito gamit, sa huli, habang loop o para sa loop o katulad, maaari mong umulit sa ibabaw ng lahat ng 0s at 1s sa forensic imahe, at sa bawat oras na makita mo ang mga espesyal na pattern na tinukoy sa detalye ng hanay ng problema, maaari mong ipagpalagay dito ay, na may napakataas na posibilidad, ang simula ng isang JPEG. At sa lalong madaling mahanap ka ng parehong pattern sa ilang bilang ng mga byte o kilobytes o megabytes sa ibang pagkakataon, maaari mong ipagpalagay dito ay isang pangalawang JPEG, ang mga larawan na kinuha ko pagkatapos ng unang. Hayaan akong itigil ang pagbabasa na unang file, simulan ang pagsusulat na ito bagong, at ang output ng iyong programa para sa pset4 pagpunta sa bilang maraming bilang 50 mga JPEG. At kung hindi ito 50 mga JPEG, mayroon kang isang bit ng isang loop. Kung mayroon ka ng isang walang-katapusang bilang ng mga JPEG, mayroon ka ng isang walang-katapusang loop. Sa gayon ay masyadong ay lubos na isang karaniwang kaso. Kaya na kung ano ang sa abot-tanaw. Pagsusulit 0 likod sa amin, Napagtanto bawat aking email na walang paltos may mga tao na parehong masaya, uri ng neutral, at malungkot sa paligid pagsusulit 0 oras. At mangyaring huwag makipag-ugnay sa akin, ang ulo ng tf Zamyla, ang iyong sariling tf, o isa ng Cas na alam mo kung nais mong upang talakayin kung paano ang mga bagay nagpunta. Kaya sa mapabilib ang mga magulang dito sa kuwarto, kung ano ang CS50 library? [Tawa] Magandang trabaho. Ano ang CS50 library? Oo. >> [Mag-aaral] Ito ay isang paunang nakasulat na hanay ng mga code [hindi marinig] Okay, mabuti. Ito ay isang paunang nakasulat na hanay ng mga code na namin ang mga kawani sinulat ni, nagbibigay kami sa iyo, na nagbibigay ng ilang mga karaniwang pag-andar, bagay-bagay na tulad ng makakuha ako ng isang string, kumuha ako ng isang int - lahat ng mga pagpapaandar na nakalista dito. Simula ngayon, sisimulan namin talagang gawin ang mga gulong ng pagsasanay. Kami ay pagpunta upang simulan ang isang string mula sa iyo, kung saan manariwa sa diwa ay lamang isang kasingkahulugan para sa kung ano ang aktwal na mga uri ng data? >> [Maramihang mga mag-aaral] magpasinda *. Magpasinda *. Para sa mga magulang, na marahil [ginagawang whooshing tunog]. Iyon ay mabuti. Magpasinda * magsisimula kami upang makita sa screen ang lahat ng higit pa bilang aalisin namin ang string mula sa aming bokabularyo, hindi bababa sa pagdating sa aktwal na pagsusulat code. Gayundin, ititigil namin gamit ang ilan sa mga function ng mas maraming dahil ang aming mga programa ay pagpunta upang makakuha ng mas sopistikadong. Sa halip na magsulat lamang ng mga programa na umupo doon na may isang prompt kumikislap, naghihintay para sa user i-type ang isang bagay sa, makakakuha ka ng iyong mga input mula sa ibang lugar. Halimbawa, makakakuha ka ng mga ito mula sa isang serye ng mga bits sa lokal na hard drive. Makikita mo sa halip makakuha ng mga ito sa hinaharap mula sa isang network connection, ilang mga website sa isang lugar. Kaya sabihin alisan ng balat pabalik ang layer na ito sa unang pagkakataon at makuha ang CS50 Appliance at ang file na ito na tinatawag na cs50.h, kung saan ikaw ay # kabilang para sa linggo, ngunit hayaan ng aktwal na makita kung ano ang sa loob ng mga ito. Ang tuktok ng file sa asul ay lamang ng buong bungkos ng mga komento: warranty impormasyon at paglilisensya. Ito ay uri ng isang karaniwang paradaym sa software dahil maraming ng software mga araw na ito ay kung ano ang tinatawag na open source, na nangangahulugan na ang isang tao ay nakasulat na code at ginawa ito malayang magagamit hindi lamang upang mapatakbo at upang gamitin ngunit sa aktwal na basahin at baguhin at isama sa iyong sariling. Kaya na kung ano ang iyong ginagamit, open source software, kahit na sa isang napakaliit na paraan. Kung mag-scroll ko pababa nakaraan ng mga komento, bagaman, makikita namin simulan upang makita ang ilang mga mas pamilyar na mga bagay. Abiso sa tuktok narito na ang cs50.h file ay nagsasama ng isang buong grupo ng mga file ng header. Karamihan sa mga ito, hindi namin nakita bago, ngunit ang isa ay pamilyar. Alin sa mga ito ang na namin nakikita, kahit na sa maikling, kaya sa ngayon? >> [Mag-aaral] Standard library. Oo, standard library. stdlib.h may malloc. Sa sandaling na sinimulan namin ang pakikipag-usap tungkol sa dynamic memory paglalaan, na gagamitin namin bumalik sa susunod na linggo pati na rin, na sinimulan namin kasama ang file na iyon. Ito lumiliko out na bool at totoo at maling hindi tunay na umiiral sa C per se maliban kung isama mo ang file na ito dito. Namin ang para sa linggo ay kabilang stdbool.h sa gayon ay maaari mong gamitin ang paniwala ng bool, true o false. Wala ang, gusto mo upang pag-uri-uriin ng mga pekeng ito at gamitin ang isang int at mang ipinapalagay na ang 0 ay mali at 1 ay totoo. Kung mag-scroll namin hiwalay, narito ang aming kahulugan ng isang string. Ito lumiliko out, bilang namin ang sinabi bago, na kung saan ito ay ang bituin ay hindi talagang mahalaga. Maaari ka ring magkaroon ng espasyo sa buong. Namin ito semestre ay nagpo-promote ang mga ito bilang ito upang gumawa ng malinaw na ang star ay may sa gawin sa ang uri, ngunit Napagtanto tulad ng karaniwan, kung hindi isang maliit na mas karaniwang, ay ilagay ang mga ito doon, ngunit pagtakbo nito ang parehong bagay. Ngunit ngayon kung binabasa namin ang hiwalay, sabihin kumuha ng isang pagtingin sa GetInt dahil ginagamit namin na marahil unang bago anumang bagay na ito semestre. Narito ang GetInt. Ito ay kung ano ang? >> [Mag-aaral] Isang prototype. >>, Ito ay lamang prototype. Madalas, namin ilagay modelo sa tops ng aming c file, ngunit maaari mo ring ilagay ang modelo sa mga file ng header,. h file, tulad ng isang ito dito sa gayon ay kapag sumulat kang ilang mga function na nais mong iba pang mga tao magagawang gamitin, na eksakto ang kaso sa CS50 sa library, hindi lamang ipatupad ang iyong mga function sa isang bagay tulad ng cs50.c, mo ring ilagay ang mga modelo ay hindi sa tuktok ng file na iyon ngunit sa tuktok ng isang file ng header. Pagkatapos na header file ay kung ano ang mga kaibigan at kasamahan ang may # include sa kanilang sariling mga code. Kaya lahat ng oras na ito, na kabilang ang lahat ng mga modelo, epektibo sa tuktok ng iyong mga file ngunit sa pamamagitan nito # include mekanismo, kung saan ang mahalagang mga kopya at pastes ang file na ito sa iyong sariling. Narito ang ilang medyo detalyadong dokumentasyon. Namin na medyo mas kinuha para sa ipinagkaloob na GetInt nakakakuha ng isang int, ngunit ito lumiliko out mayroong ilang mga sulok kaso. Paano kung ang mga uri ng user sa isang numero na paraan masyadong malaki, quintillion, na lamang ay hindi maaaring magkasya sa loob ng isang int? Ano ang inaasahang pag-uugali? May perpektong, predictable. Kaya sa kasong ito, kung aktwal mong basahin ang fine na naka-print, aktwal mong makita na kung linya ay hindi maaaring basahin, ito babalik INT_MAX. Hindi kailanman na-uusapang namin tungkol dito, ngunit batay sa capitalization, ano ito marahil? [Mag-aaral] Ang isang pare-pareho. >> Ito ay isang pare-pareho. Ang ilang espesyal na pare-pareho na malamang na ipinahayag sa isa ng mga file ng header na hanggang mas mataas sa ang file, at INT_MAX ay marahil isang bagay tulad ng halos 2 bilyong, nangyaring mali ang ideya pagiging na dahil kailangan namin sa paanuman magpahiwatig na may isang bagay, namin, oo, 4 bilyong numero sa aming pagtatapon: -2 bilyong sa hanggang sa 2 bilyong, bigyan o. Well, kung ano ang karaniwan sa programming nakawin mo lang ang isa sa mga numero, siguro 0, siguro 2 bilyong, siguro -2 bilyong, kaya gagastusin mo ang isa sa iyong mga posibleng halaga upang maaari kang mangako sa mundo na kung ang isang bagay napupunta mali, ako ay ibalik ito sobrang malaking halaga. Ngunit hindi mo nais ang user ng pag-type ng isang bagay na misteriyoso tulad ng 234 ..., talagang malaking bilang. Kang magbigay ng tuntuning panlahat ang mga ito sa halip bilang isang pare-pareho. Kaya talagang, kung ikaw ay pagiging anal sa nakalipas na ilang linggo, anumang oras na tinatawag na GetInt, dapat mong na-check sa isang kung kundisyon ginawa ang uri ng user sa INT_MAX, o, higit na partikular, ginawa GetInt return INT_MAX, dahil kung ginawa ito, na aktwal na nangangahulugan na hindi nila type ito. May nangyaring mali sa kasong ito. Kaya ito ay kung ano ang karaniwang kilala bilang isang tanod na halaga, na kung saan ay nangangahulugan lamang espesyal. Natin ngayon maging ang file na. C. Ang C file ay umiiral sa appliance para sa ilang oras. At sa katunayan, appliance ay pre-pinagsama-sama para sa iyo sa na bagay na tinatawag namin ang bagay na code, ngunit ito lamang ay hindi mahalaga sa iyo kung saan ito ay dahil alam ng system ang sa kasong ito kung saan ito ay: ang appliance. Sabihin mag-scroll pababa ngayon sa GetInt at makita kung paano GetInt ay nagtatrabaho lahat oras na ito. Narito mayroon kami ng mga katulad na mga komento mula sa bago. Hayaan akong mag-zoom in sa lamang ang bahagi code. At kung ano ang mayroon kami para sa GetInt ay ang mga sumusunod. Ito ay tumatagal ng walang input. Nagbalik ng isang int, habang (totoo), kaya kami ay may isang sinadya na walang-katapusang loop, ngunit baka makikita namin masira ng ito sa paanuman o bumalik mula sa loob ng. Natin makita kung paano ito gumagana. Mukhang namin na ang paggamit na GetString sa ang unang linya na ito sa loob ng loop, 166. Ito ay mahusay na kasanayan na ngayon dahil sa ilalim kung ano pangyayari ay maaaring GetString bumalik espesyal null keyword? >> [Mag-aaral] Kung ang isang bagay napupunta mali. Kung ang isang bagay napupunta mali. At kung ano ang maaaring pumunta mali kapag tumawag ka ng isang bagay tulad ng GetString? Oo. >> [Mag-aaral] Malloc nabigo upang bigyan ito ng ints. Oo. Siguro malloc nabigo. Sa isang lugar sa ilalim ng hood, GetString pagtawag malloc, na allocates memorya, kung saan ay nagbibigay-daan sa computer store ang lahat ng ang mga character na na gumagamit ng mga uri sa keyboard. At ipagpalagay na ang user ay may isang buong maraming libreng oras at nai-type nang higit pa, halimbawa, sa 2 bilyong character sa, ang higit pang mga character kaysa sa computer kahit may RAM. May GetString upang magpahiwatig na ang sa iyo. Kahit na ito ay isang napakabilis, sobrang bihira na sulok ng kaso, ay sa paanuman magagawang upang mahawakan ito, at kaya GetString, kung namin nagpunta bumalik at basahin nito dokumentasyon, ginagawa sa katotohanan return null. Kaya ngayon kung GetString nabigo sa pamamagitan ng pagbalik null, GetInt ay pagpunta sa mabibigo sa pamamagitan ng pagbalik INT_MAX bilang isang tanod. Ito ang lang tao convention. Ang tanging paraan na alam mo ito ang kaso ay sa pamamagitan ng pagbabasa ang dokumentasyon. Sabihin mag-scroll pababa kung saan ay aktwal na nakuha ang int. Kung mag-scroll ko ng kaunti pa, sa line 170, mayroon kaming isang komento sa itaas ng mga linya. Idedeklara namin sa 172 isang int, n, at isang pansamantalang trabaho, c, at pagkatapos ay ang bagong function na, kung saan ang ilan sa inyo ay stumbled kabila bago, sscanf. Ito ay nakatayo para sa string scanf. Sa ibang salita, bigyan ako ng string at ko i-scan ang mga ito para sa mga piraso ng impormasyon ng interes. Ano ang na ibig sabihin nito? Ipagpalagay na-type sa ko, literal, 123 sa keyboard at pagkatapos ay pindutin ang Enter. Ano ang mga uri ng data ng 123 kapag ibinalik ng GetString? >> [Mag-aaral] String. Ito ay malinaw naman isang string, i-right? Nakatanggap ako ng string. Kaya 123 ay talagang, quote-magpanipi, 123 gamit ang \ 0 sa pagtatapos nito. Na ay hindi isang int. Iyon ay hindi isang numero. Mukhang isang numero ngunit ito ay hindi tunay na. Kaya kung ano ang GetInt gawin? Upang i-scan na string kaliwa papuntang kanan - 123 \ 0 - at sa paanuman-convert sa isang aktwal na integer. Maaari mong malaman kung paano gawin ito. Kung sa tingin mo bumalik sa pset2, baka Mayroon isang maliit na komportable sa Caesar o Vigenere, kaya maaari mong umulit sa loob ng isang string, maaari mong i-convert ng mga karakter sa mga ints. Ngunit ano ba, ang isang buong maraming trabaho. Bakit hindi tumawag sa isang function tulad sscanf na ginagawa na para sa iyo? Kaya inaasahan ng sscanf ng argumento - sa kasong ito na tinatawag na linya, na isang string. Mo nang tinukoy sa mga panipi, na halos kapareho sa printf, kung ano ang inaasahan mong makita sa ang string na ito. At kung ano ang ako sinasabi dito ay inaasahan ko upang makita ang isang decimal na numero at maaaring isang character. At kami na makita kung bakit ito ang kaso sa sandali lamang. At ito ay lumiliko ang pagtatanda na ito ay nakapagpapaalaala na ngayon ng mga bagay-bagay na sinimulan namin ang pakikipag-usap tungkol sa higit lamang sa isang linggo na ang nakalipas. Ano ang & n at & c na ginagawa para sa amin dito? >> [Mag-aaral] Address ng n at address ng c. Oo. Ito ay nagbibigay sa akin ang address ng n at address ng c. Bakit ay na mahalaga? Alam mo na may mga function sa C, maaari mong laging nagbabalik ng halaga o walang halaga sa lahat. Maaari mong ibalik ang isang int, isang string, Float, pansamantalang trabaho, anumang, o maaari kang bumalik walang bisa, ngunit maaari ka lamang bumalik ang isang bagay maximally. Ngunit dito gusto naming sscanf upang bumalik sa akin siguro isang int, decimal na numero, at ding pansamantalang trabaho, at Ipapaliwanag ko kung bakit pansamantalang trabaho sa isang sandali. Gusto mong epektibong sscanf upang bumalik ang dalawang bagay, ngunit ito lamang ay hindi posible sa C. Maaari kang gumawa sa paligid na sa pamamagitan ng pagpasa sa dalawang address dahil sa lalong madaling mo ipasa ang isang function ng dalawang address, ano ang function na sa kanila? >> [Mag-aaral] Sumulat sa mga address na iyon. Maaari itong sumulat sa mga address na iyon. Maaari mong gamitin ang operasyon ng star at pumunta doon, sa bawat isa sa mga address na iyon. Ito ay uri ng ang back-pinto mekanismo ngunit napaka-karaniwang para sa pagbabago sa mga halaga ng variable higit pa kaysa lamang isang lugar - sa kasong ito, dalawang. Ngayon mapansin Lalabas na ako para sa == 1 at pagkatapos ay bumabalik n kung iyon ay, sa katunayan, evaluate sa true. Kaya kung ano ang nangyayari sa? Technically, lahat talaga namin nais na mangyayari sa GetInt ito. Gusto naming upang i-parse, kaya na magsalita, gusto naming basahin ang string - quote-magpanipi 123 - at kung ito ay mukhang may isang numero doon, kung ano ang sinasabi namin ang sa sscanf gawin ay ilagay na numero - 123 - sa variable n para sa akin. Kaya bakit pagkatapos ay ako aktwal na mayroon na ito pati na rin? Ano ang papel na ginagampanan ng sscanf sinasabi maaari mo ring makakuha ng isang character dito? [Hindi marinig na mag-aaral ng tugon] >> Isang decimal point aktwal na maaaring gumana. Natin pindutin nang matagal na naisip para sa isang sandali. Ano pa? [Mag-aaral] Ito ay maaaring maging null. >> Magandang iisip. Ito ay maaaring maging null karakter. Ito ay aktwal na hindi sa kasong ito. Oo. >> [Mag-aaral] ASCII. ASCII. O ipaalam sa akin ng tuntuning panlahat kahit karagdagang. Ang% c may lamang para sa error checking. Hindi namin gusto doon sa isang character pagkatapos ang numero, ngunit kung ano ang nagbibigay-daan sa akin upang gawin ang mga sumusunod na. Ito lumiliko out na sscanf, bukod sa pag-iimbak ng mga halaga sa n at c sa halimbawang ito dito, kung ano ito din ay nagbabalik ang bilang ng mga variable ilagay ito ng mga halaga. Kaya kung nag-type lamang sa 123, pagkatapos lamang ang% d upang tumugma sa, at lamang n ay makakakuha ng naka-imbak na may halaga tulad ng 123, at walang maipo ilagay sa c. C nananatiling isang halaga ng basura, kaya magsalita - basura dahil hindi ito ay nasimulan sa ilang mga halaga. Kaya sa kasong iyon, nagbabalik ang sscanf 1 dahil ako populated 1 ng mga payo, kung saan mahusay na, mayroon akong isang int kaya magbakante ko ang linya sa magbakante ang memorya GetString na aktwal na inilaan, at pagkatapos ay bumalik ako n, tao kung ikaw ba kung saan na pahayag Subukang muli ay mula, ito ay mula dito mismo. Kaya kung, sa pamamagitan ng kaibahan, ako type sa 123foo - ilang mga random na pagkakasunod-sunod ng teksto - sscanf ay pagpunta upang makita ang numero, numero, bilang, f, at pagpunta sa ilagay ang 123 sa n; ito upang ilagay ang f sa c at pagkatapos ay bumalik 2. Kaya mayroon kami, lamang gamit ang pangunahing kahulugan ng sscanf pag-uugali, isang napaka-simpleng paraan - mahusay, complex sa unang tingin ngunit sa pagtatapos ng araw medyo simple na mekanismo - ng pagsabi may int at kung gayon, ay ang tanging bagay na nakita ko? At ang whitespace dito ay sinadya. Kung ikaw ay basahin ang dokumentasyon para sa sscanf, ay nagsasabi sa iyo na kung isasama mo ang isang piraso ng whitespace sa simula o sa katapusan, sscanf masyadong ay magbibigay-daan sa user, para sa anumang dahilan, sa pindutin ang space bar 123 at na lehitimong. Hindi ka sumigaw sa user dahil lamang sila pindutin ang space bar sa simula o sa katapusan, na sandali lang mas user-friendly. Anumang mga katanungan pagkatapos sa GetInt? Oo. >> [Mag-aaral] Paano kung mo lamang ilagay sa isang pansamantalang trabaho? Magandang tanong. Paano kung ikaw-type sa isang pansamantalang trabaho tulad ng f at pindutin ang Enter nang hindi pag-type ng 123? Ano sa tingin ninyo ang pag-uugali ng ang linya ng code pagkatapos? [Hindi marinig na mag-aaral ng tugon] Oo, kaya sscanf maaaring masaklawan na masyadong dahil sa kasong iyon, hindi ito upang punan n o c. Ito ay sa halip na bumalik 0, kung saan rin ako pansing na sitwasyon dahil ang inaasahang halaga na gusto kong ay 1. Gusto ko lang ng isa at lamang ng isang bagay na puno. Magandang tanong. Iba? Ayos lang. Natin hindi pumunta sa pamamagitan ng lahat ng mga function in dito, ngunit ang isa na tila marahil ng natitirang interes GetString dahil ito ay lumiliko out na GetFloat, GetInt, GetDouble, GetLongLong lahat ng tumikin ng maraming ng kanilang mga pag-andar sa GetString. Kaya sabihin kumuha ng isang pagtingin sa kung paano siya ay ipinatupad dito. Ito mukhang isang maliit na kumplikado, ngunit ginagamit nito ang parehong batayan namin na sinimulan ng pakikipag-usap tungkol sa huling linggo. Sa Sa GetString, na walang argumento bilang bawat ang walang bisa hanggang dito at nagbabalik ng isang string, tila ko ako ang deklarasyon ng isang string na tinatawag na buffer. Hindi ko talaga alam ano ang pagpunta sa ginagamit para sa pa, ngunit gagamitin namin makita. Mukhang kapasidad ay sa pamamagitan ng default 0. Hindi masyadong sigurado kung saan ito ay pagpunta, hindi sigurado kung ano n ay pagpunta upang gamitin para sa pa, ngunit ngayon ay nakakakuha ito ng kaunti pa sa kawili-wili. Sa linya 243, ipinapahayag namin ang isang int, c. Ito ay uri ng bobo detalye. Pansamantalang trabaho ay 8 bit, at 8 bits ay maaaring iimbak sa kung gaano karaming iba't ibang mga halaga? >> [Mag-aaral] 256. >> 256. Ang problema ay kung gusto mong magkaroon ng 256 iba't ibang mga character na ASCII, na may mga kung sa tingin mo muli - at ito ay hindi isang bagay na kabisaduhin. Ngunit kung sa tingin mo na malaki ASCII chart nagkaroon kami linggo ang nakalipas, mayroong sa kasong iyon 128 o 256 mga character na ASCII. Ginamit namin ang lahat ng mga pattern ng 0s at 1s up. Na ang isang problema kung nais mong upang makita ang isang error dahil kung gumagamit ka na ng 256 halaga para sa iyong mga character, hindi mo talaga magplano magpatuloy dahil ngayon mayroon kang walang paraan ng pagsabi, ito ay hindi isang legit karakter, ito ay ilang maling mensahe. Kaya kung ano ang mundo ang ginagawa nila gamitin ang susunod na pinakamalaking halaga, ang isang bagay tulad ng isang int, kaya na mayroon kang mabaliw bilang ng mga bits, 32, para sa 4 bilyong posibleng halaga sa gayon ay maaari mo lamang gamit ang mahalagang 257 sa kanila, 1 na may ilang mga espesyal na kahulugan bilang isang error. Kaya sabihin makita kung paano ito gumagana. Sa linya 246, mayroon akong ito malaki habang loop na pagtawag fgetc, f file ng kahulugan, kaya getc, at pagkatapos stdin. Ito lumiliko out lamang ito sa mas tumpak na paraan ng pagsabi basahin ang input mula sa keyboard. Standard keyboard input paraan, ang ibig sabihin ng standard output screen, at standard na error, na kung saan namin makita sa pset4, ay nangangahulugan na ang screen ngunit ang isang espesyal na bahagi ng screen upang hindi ito conflated may aktwal na output na nilayon mo upang i-print. Ngunit higit pa sa na sa hinaharap. Kaya fgetc lamang nangangahulugan basahin ang isang character mula sa keyboard at mag-imbak ito kung saan? Iimbak ito sa c. At pagkatapos suriin - kaya lang ako sa paggamit ng ilang mga Boolean conjunctions dito - suriin na ito ay hindi katumbas - \ n, kaya ang gumagamit ay pindutin ang Enter, gusto naming huminto sa puntong iyon, magtapos ng loop - at gusto rin naming mag-check para sa espesyal na pare-pareho ang EOF, na kung alam mo o hulaan, ano ang tumayo para sa? >> [Mag-aaral] Pagtatapos ng file. >> End ng file. Ito ay uri ng walang saysay dahil kung nagta-type ako sa keyboard, may talagang walang file na kasangkot sa, ngunit ito ay lamang ayusin ng generic na termino na ginagamit sa ibig sabihin na walang ibang darating mula sa mga daliri ang tao. EOF - pagtatapos ng file. Bilang isang bukod, kung sakaling mo na pindutin ang Control D sa iyong keyboard, hindi na mayroon ka pa - mo na pindutin ang Control C - Control D nagpapadala ito ng espesyal na pare-pareho na tinatawag na EOF. Kaya ngayon namin lamang magkaroon ng ilang dynamic na paglalaan ng memorya. Kaya kung (n + 1> kapasidad). Ngayon Ipapaliwanag ko kung n. N ay lamang kung gaano karaming mga byte ay kasalukuyang sa buffer, ang string na kasalukuyan mong pagbuo mula sa user. Kung mayroon kang higit pang mga character sa iyong buffer kaysa sa mayroon kang kapasidad sa buffer, intuitively kung ano ang kailangan namin upang gawin pagkatapos ay magtalaga ng karagdagang kapasidad. Kaya ako sagap sa paglipas ng ilang ng aritmetika dito at tumutok lamang sa function na ito dito. Alam mo kung ano ang malloc o hindi bababa sa pangkalahatan pamilyar. Kumuha ng hula kung ano ang realloc ginagawa. >> [Mag-aaral] Nagdadagdag ng memorya. Hindi ito medyo pagdaragdag ng memorya. Reallocates memory tulad ng sumusunod. Kung mayroon pa rin room sa dulo ng string upang bigyan ka ng higit pa sa na memorya kaysa sa orihinal na ito ay nagbibigay sa iyo, pagkatapos ay makakakuha ka na ng karagdagang memorya. Sa gayon ay maaari mo lamang panatilihin ang paglalagay ng character ang string pabalik upang i-back i-back upang i-back. Ngunit kung hindi iyon ang kaso dahil naghintay ka masyadong mahaba at isang bagay random Nakakuha plopped sa memory doon ngunit may dagdag na memorya pababa dito, na okay lang. Realloc ay pagpunta sa gawin ang lahat ng mga mabibigat na nakakataas para sa iyo, ilipat ang string na nabasa mo na sa samakatuwid ay malayo mula dito, ilagay ito doon, at pagkatapos ay magbibigay sa iyo ng ilang higit pang mga paliparan sa puntong iyon. Kaya may isang wave ng kamay, sabihin sabihin sa akin na ang GetString ay ginagawa ay ito ay nagsisimula sa isang maliit na buffer, maaaring isang solong character, at kung ang user ay uri sa dalawang character, GetString nagtatapos up ng pagtawag realloc at sabi isang character ay hindi sapat; magbibigay sa akin ng dalawang character. Pagkatapos kung mong basahin sa pamamagitan ng logic ng loop, ito sasabihin ng gumagamit na nai-type sa 3 mga character; ninyo ako ngayon hindi 2 ngunit 4 na mga character, pagkatapos akong bigyan 8, pagkatapos ninyo ako 16 at 32. Ang katotohanan na ako pagdodoble ang kapasidad sa bawat oras ay nangangahulugan na ang buffer ang hindi pagpunta sa palaguin mabagal, ito upang mapalago ang napakabilis na. At kung ano ang maaaring ang bentahe ng na? Bakit ako pagdodoble ang laki ng buffer kahit na ang user ay maaaring kailangan lang ng isang dagdag na character mula sa keyboard? [Hindi marinig na mag-aaral ng tugon] >> Ano iyon? >> [Mag-aaral] Hindi mo binabalak na palaguin ang mga ito nang madalas. Eksakto. Hindi mo binabalak na palaguin ang mga ito nang madalas. At ito lamang ang uri ng sa iyo ay hedging dito ang iyong mga taya, ideya sa na hindi mo nais na upang tawagan ang realloc ng maraming dahil ito ay may gawi na maging mabagal ang. Anumang oras na hinihiling mo ang operating system para sa memory, tulad ng makikita mo sa lalong madaling panahon makita sa isang hinaharap na hanay ng problema, ay may kaugaliang upang tumagal ng ilang oras. Kaya sa pagliit na halaga ng oras, kahit na kung ikaw ay aksaya ng ilang espasyo, may gawi na maging isang magandang bagay. Ngunit kung basahin namin sa pamamagitan ng huling bahagi ng GetString dito - at muli unawa bawat solong linya dito ay hindi kaya mahalaga ngayon - mapansin na kalaunan tawag malloc muli at ito allocates eksakto tulad ng maraming mga byte kailangan nito para sa string at pagkatapos throws ang layo sa pamamagitan ng pagtawag sa libreng labis na malaking buffer kung ito ay sa katunayan Nakakuha Dinoble masyadong maraming beses. Kaya sa maikling salita, na kung paano GetString ay nagtatrabaho lahat oras na ito. Lahat ng ito ay basahin ang isang character sa isang pagkakataon muli at muli at muli, at sa bawat oras na ito ay nangangailangan ng ilang karagdagang memorya, Humihingi ito ang operating system para sa sa pamamagitan ng pagtawag realloc. Anumang mga katanungan? Ayos lang. Isang atake. Ngayon na naiintindihan namin payo o hindi bababa sa ay nagiging pamilyar na may mga payo, sabihin isaalang-alang kung paano ang buong mundo ay nagsimulang upang tiklupin kung hindi mo pa masyadong ipagtanggol laban adversarial mga gumagamit, mga taong sinusubukang i-Hack sa iyong system, mga tao na sinusubukang nakawin ang iyong software sa pamamagitan ng circumventing ilang pagpaparehistro code na maaaring sila kung hindi man ay i-type in. Tingnan sa halimbawang ito dito, na lamang C code na may isang function na pangunahing sa ibaba na tawag ng isang function foo. At kung ano ang pagpasa sa foo? [Mag-aaral] Ang isang argumento. >> [Malan] Ang isang argumento. Kaya argv [1], na nangangahulugan na ang unang salita na ng user ang na-type sa command line pagkatapos a.out o anumang programa ay tinatawag na. Kaya ang foo sa tuktok tumatagal sa isang pansamantalang trabaho *. Ngunit magpasinda * kung ano? >> [Mag-aaral] Isang string. [Malan] A string, kaya walang bagong dito. Na string ay mang na tinatawag na bar. Ang line dito, magpasinda c [12], sa uri ng semi-teknikal Ingles, ano ang linya na ito ginagawa? [Mag-aaral] Isang hanay ng mga - >> Array ng? >> [Mag-aaral] Character. >> Character. Bigyan mo ako ng isang hanay ng mga 12 character. Kaya maaari naming tumawag ito ng buffer. Ito ang technically tinatawag c, ngunit isang buffer sa programming lamang ay nangangahulugan na ang isang bungkos ng espasyo na maaari mong ilagay ang ilang mga bagay-bagay. Pagkatapos bilang wakas, memcpy hindi namin ginamit mo dati, ngunit maaari mong malamang na hulaan kung ano ang ginagawa nito. Ito kinokopya sa memory. Ano ang gagawin? Tila ito kinokopya ang bar, ang input, sa c ngunit lamang hanggang sa haba ng bar. Ngunit mayroong isang bug dito. >> [Mag-aaral] Kailangan mong sizeof karakter. >> Okay. Technically, dapat namin talagang gawin strlen (bar) * sizeof (pansamantalang trabaho)). Na tama. Ngunit sa ang pinakamasama kaso dito, sabihin ipinapalagay na that's - Okay. Pagkatapos ay may dalawang mga bug. Kaya sizeof (pansamantalang trabaho)); Natin gumawa ito ng kaunti mas malawak na. Kaya ngayon ay may pa rin ng isang bug, na kung ano ang? >> [Hindi marinig na mag-aaral tugon] Suriin para sa kung ano? >> [Mag-aaral] Suriin para sa null. Dapat namin sa pangkalahatan ay check para sa null dahil masamang mangyayari kapag ang iyong pointer null dahil maaari mong pagpunta doon, at hindi kailanman mo dapat null sa pamamagitan ng dereferencing ito sa operator star. Kaya na mabuti. At kung ano ang tao ay namin ginagawa? Lohikal na, may lamat dito masyadong. [Mag-aaral] Suriin kung ang argc> = sa 2. Kaya suriin kung ang argc ay> = 2. Okay, kaya may tatlong bug sa programang ito dito. Sinusuri namin ngayon kung ang user ay talagang type sa anumang sa argv [1]. Mabuti. Kaya kung ano ang sa ikatlong bug? Oo. >> [Mag-aaral] C maaaring hindi malaki sapat. Mabuti. Naka-check namin ang isang sitwasyon. Naka-check nang kataon lamang namin huwag kopyahin ang higit pang memory kaysa ay lumampas sa haba ng bar. Kaya kung ang string ng gumagamit na nai-type sa 10 character ang haba, ito ay sinasabi lamang kopyahin 10 character. At na okay lang. Ngunit ano kung ang user ay nai-type sa isang salita sa prompt tulad ng isang 20-character na salita? Ito ay sinasabi ng kopya 20 character mula sa bar sa kung anong? C, na kilala bilang aming buffer, na nangangahulugan ka lang sinulat ni data 8 byte lokasyon na hindi mo pag-aari, at hindi ito sa iyo sa pakiramdam na hindi ka na kailanman inilalaan sa kanila. Kaya ito ay kung ano ang karaniwang kilala bilang buffer overflow atake o atake ng buffer paglampas. At ang isang pag-atake sa kamalayan na kung ang gumagamit o ang programa na pagtawag sa iyong function na ginagawa ito maliciously, kung ano ang aktwal na ang susunod na mangyayari ay maaaring aktwal na medyo masamang. Kaya sabihin tingnan ang larawang ito dito. Ang larawan na ito ay kumakatawan sa iyong stack ng memory. Manariwa sa diwa na ang bawat oras na tumawag ka ng isang function makuha mo ang mga maliit na frame sa stack at pagkatapos ay isa at pagkatapos ay isa at sa isa pang. At kaya ngayon, lang namin uri ng malayo ito bilang mga parihaba alinman sa board o sa screen dito. Ngunit kung namin mag-zoom in sa isa sa mga parihaba, kapag tumawag ka ng isang function foo, ito lumiliko out na may higit pa sa stack loob ng frame na sa na parihaba kaysa lamang x at y at isang at b, tulad namin ay pakikipag-usap tungkol makipagpalitan. Ito lumiliko out na ang ilang mga mas mababang antas na mga detalye, kasama ng mga ito Return Address. Kaya ito lumiliko out kapag pangunahing tawag foo, ang pangunahing ay upang ipaalam sa foo ano ang pangunahing address sa memory ng computer dahil kung hindi man, sa lalong madaling foo tapos na execute, tulad ng sa kasong ito dito, sa sandaling naabot mo na ito closed kulot suhay sa dulo ng foo, kung paano ang ano ba ang foo malaman kung saan ang kontrol ng programa ay dapat na pumunta? Ito lumiliko out na ang sagot sa tanong na ito pulang parihaba dito. Ito ay kumakatawan sa isang pointer, at ito ay hanggang sa ang computer upang mag-imbak ng pansamantalang sa tinatawag na stack ang address ng pangunahing upang ang sa lalong madaling foo tapos na e-execute, computer na ang nakakaalam kung saan at kung ano ang linya sa pangunahing upang bumalik sa. Nai-save na Frame pointer nauugnay katulad na ito. Magpasinda * bar dito ay kumakatawan sa kung ano ang? Ngayon ang asul na segment dito foo ng frame. Ano ang bar? Bar ay ang argumento sa pag-andar ng foo. Kaya ngayon hindi namin pabalik sa uri ng pamilyar larawan. Mayroong higit pang mga bagay-bagay at higit pa distractions sa screen, ngunit ito mapusyaw na asul na segment lamang kung ano ang namin ang pagguhit sa Chalkboard para sa isang bagay tulad ng makipagpalitan. Na ang frame para sa foo. At ang tanging bagay sa loob nito ngayon ay bar, na ang parameter na ito. Ngunit ano pa ang dapat sa stack ayon sa ang code na ito dito? [Mag-aaral] magpasinda c [12]. >> [Malan] magpasinda c [12]. Dapat din namin makita ang 12 parisukat ng memory na inilalaan sa isang variable na tinatawag c, at sa katunayan namin na sa screen. Pinakatuktok may c [0], at pagkatapos ay ang may-akda ng diagram na ito ay hindi abala ang pagguhit ng lahat ng mga parisukat, ngunit may katunayan 12 doon dahil kung titingnan mo sa kanan sa ibaba, c [11] kung ikaw ay mabibilang mula 0 ay ang ika-12 tulad byte. Ngunit narito ang problema. Sa aling mga direksyon ay c lumalaking? -Uri-uriin ng tuktok pababa kung ito ay nagsisimula sa tuktok at lumalaki sa ibaba. Hindi ito hitsura namin ang natitira sa ating sarili magkano paliparan dito sa lahat. Namin ang uri ng ipininta sa ating sarili sa isang sulok, at c [11] ay karapatan up laban sa bar, na karapatan up laban sa Nai-save na pointer ng Frame, na karapatan up laban sa Return Address. Walang karagdagang puwang. Kaya kung ano ang implikasyon pagkatapos ay kung ikaw magtaas at subukan mong pagbabasa 20 bytes sa isang 12-byte buffer? Kung saan ang mga 8 karagdagang mga byte pagpunta sa pumunta? >> [Mag-aaral] Inside - Inside lahat ng iba pa, ang ilang na kung saan ay sobrang mahalaga. At ang pinaka-mahalagang bagay, potensyal na, ay ang pulang kahon doon, Return Address, dahil ipagpalagay mong alinman sa aksidente o adversarially patungan ang mga 4 bytes, na pointer address, hindi lamang sa ng basura ngunit may isang numero na mangyayari sa kumakatawan sa isang aktwal na address sa memorya. Ano ang implikasyon, lohikal? >> [Mag-aaral] Ang function na ay pagpunta upang bumalik sa ibang lugar. Eksakto. Kapag foo babalik at hit na kulot suhay, ang programa ay upang magpatuloy hindi upang bumalik sa pangunahing, ito ay pagpunta sa bumalik sa anumang address na pulang kahon. Sa kaso ng circumventing ng pagpaparehistro ng software, paano kung ang address na ibinalik sa function na normal ay makakakuha tinatawag pagkatapos mo binayaran para sa software at inputted ang iyong pagpaparehistro code? Maaari mong pag-uri-uriin ng nanlilinlang ang computer sa hindi pagpunta dito ngunit sa halip ng pagpunta dito. O kung ikaw ay talagang matalino, kalaban ng aktwal type in sa keyboard, halimbawa, hindi isang aktwal na salita, hindi 20 character, ngunit ipagpalagay siya aktwal na uri sa ilang mga character na kumakatawan code. At hindi ito pagpunta sa C code, aktwal na ito ang mga character na na kumakatawan sa binary code machine, 0s at 1s. Ngunit ipagpalagay na ito ay matalino sapat na upang gawin iyon, sa paano pa man i-paste sa GetString prompt ng isang bagay na mahalagang inipon code, at ang huling 4 bytes patungan na return address. At kung ano ang address ay input na gawin? Ito aktwal na nag-iimbak sa pulang parihaba ang address ng unang byte ng buffer. Kaya mayroon kang talagang matalino, at ito ng maraming pagsubok at error para sa mga masamang tao out doon, ngunit kung maaari mong malaman kung gaano kalaki ang buffer ito tulad na ang huling ilang mga byte sa input magbigay sa iyo sa programa mangyari katumbas sa address ng simula ng iyong buffer, maaari mong gawin ito. Kung sabihin namin normal kumusta at \ 0, na kung ano ang nagtatapos sa buffer. Ngunit kung hindi namin mas matalino at punan namin na buffer sa kung ano ang makikita namin generically call na code ng atake - AAA, atake, atake, atake - kung saan ito ay isang bagay na ang isang bagay masamang, kung ano ang mangyayari kung ikaw ay talagang matalino, maaari mong gawin ito. Sa pulang kahon dito ay isang sequence ng mga numero - 80, C0, 35, 08. Pansinin na na tumutugma sa numero na dito. Sa reverse pagkakasunud-sunod, ngunit higit pa sa na ang ilang iba pang mga oras. Pansinin na ang return address na ito ay sadyang binago katumbas ng address dito, hindi ang address ng pangunahing. Kaya kung ang masamang tao ay sobrang na smart, siya ay pagpunta sa isama sa na atake code isang bagay tulad ng tanggalin ang lahat ng mga file ng user o kopyahin ang mga password o lumikha ng isang user account na maaari kong pagkatapos ay mag-log in sa - anumang bagay sa lahat. At ito ay parehong mga panganib at ang kapangyarihan ng C. Dahil mayroon kang access sa memory sa pamamagitan ng pointer at maaari mong samakatuwid isulat ang anumang nais mo sa memory ng computer, maaari kang gumawa ng computer ng isang gawin ang anumang nais mo sa pamamagitan lamang ng pag-ito tumalon sa paligid sa loob ng sarili nitong espasyo sa memory. At iba pa sa araw na ito kaya maraming mga programa at mga website na maraming na nakompromiso pasingawan sa mga tao na sinasamantala ng mga ito. At maaaring ito tila tulad ng isang sobrang sopistikadong atake, ngunit ito ay hindi palaging simulan na paraan. Katotohanan ay na ang masamang tao ay karaniwang gawin ay, kung ito ay isang programa sa command line o isang GUI na programa o sa isang website, mo lang simulan ang pagbibigay ng bagay na walang kapararakan. Kang mag-type sa isang talagang malaking salita sa patlang ng paghahanap at pindutin ang Enter, at maghintay upang makita kung nagka-crash ang website o hintayin mo upang makita kung ang programa sa manifests ilang mga mensahe ng error dahil kung makakuha ka ng masuwerteng bilang ang masamang tao at magbigay sa iyo ng ilang mabaliw input na nagka-crash sa programa, na nangangahulugan na programmer ay hindi inaasahan ang iyong masamang pag-uugali, na nangangahulugan na maaari mong malamang na may sapat na pagsisikap, sapat na pagsubok at error, malaman kung paano sa pasahod ng mas tumpak na pag-atake. Kaya bilang magkano ang isang bahagi ng seguridad ay hindi lamang pag-iwas sa mga pag-atake na ito nang sama-sama ngunit detect ang mga ito at talagang aktwal na tumitingin sa mga tala ng at nakikita kung ano ang mabaliw input ay may mga tao na nai-type sa iyong website, kung ano ang mga term sa paghahanap na mga tao-type sa iyong website sa pag-asa ng umaapaw ilang buffer. At ito kahulihan babagsak sa simpleng mga pangunahing kaalaman ng kung ano ang isang array at kung ano ang ibig sabihin upang maglaan at gamitin ang memory. Na may kaugnayan sa na pagkatapos ay masyadong ito. Sabihin lamang sulyap sa loob ng isang hard drive pa muli. Manariwa sa diwa ka mula sa isa o dalawang linggo ang nakalipas na kapag ikaw ay i-drag ang mga file sa iyong recycle bin o basurahan, ano ang mangyayari? >> [Mag-aaral] Walang. >> GANAP wala, i-right? Sa paglaon kung nagpapatakbo ka mababa sa disk space, Windows o Mac OS ay simulan ang pagtanggal ng mga file para sa iyo. Ngunit kung mong i-drag ang isang bagay sa doon, na hindi sa lahat ng ligtas. Lahat ng iyong mga kasama o kaibigan o miyembro ng pamilya ay may sa gawin ay i-double click at, voila, may lahat ang pahapyaw na mga file na sinubukan mong tanggalin. Karamihan sa atin ng hindi bababa sa malaman na mayroon kang upang i-right click o Kontrolin ang pag-click at walang laman ang basura o isang bagay tulad na. Ngunit kahit na pagkatapos na hindi pa gawin ang nanlilinlang dahil kung ano ang mangyayari kapag mayroon ka ng isang file sa iyong hard drive na kumakatawan ang ilang mga dokumento ng Word o ilang JPEG, at ito ay kumakatawan sa iyong hard drive, at sabihin nating ito salubsob dito ay kumakatawan sa file na iyon, at ito ay binubuo ng isang buong bungkos ng 0s at 1s. Ano ang mangyayari kapag hindi mo lamang i-drag ang file na iyon sa trash maaari o recycle bin ngunit din alisan ng laman ang mga ito? Pagsunud-sunurin ng walang. Ito ay hindi ganap na walang ngayon. Ngayon lang wala dahil ang isang maliit na isang bagay na mangyayari sa paraan ng table na ito. Kaya may ilang mga uri ng database o talahanayan sa loob ng memorya ng isang computer na mahalagang na may isang hanay para sa mga file na 'pangalan at isang hanay para sa mga file na' lokasyon, kung saan maaaring ito ay ang lokasyon 123, lamang ng random na numero. Kaya maaari naming magkaroon ng tulad ng x.jpeg at lokasyon 123. Ano ang mangyayari pagkatapos ay kapag aktwal mong alisan ng laman ang iyong basurahan? Na mawala. Ngunit ano ay hindi umalis ang 0s at 1s. Kaya kung ano ang pagkatapos ay ang koneksyon sa pset4? Well, may pset4, dahil lang sa hindi sinasadyang kami mabubura ang compact flash card na mayroon ang lahat ng mga larawan o dahil lang sa ito sa pamamagitan ng alat naging Nasira ay hindi nangangahulugan na ang 0s at 1s ay hindi pa rin doon. Siguro ang ilan sa mga ito ay nawala dahil isang bagay Nakakuha Nasira sa kamalayan na ang ilang 0s naging 1s at 1s naging 0s. Bad bagay ay maaaring mangyari dahil sa maraming surot software o depekto hardware. Ngunit maraming ng mga bit, marahil kahit na 100% ng mga ito, hindi pa rin doon. Lang na ang computer o ang camera ay hindi alam kung saan JPEG1 makapagsimula at kung saan JPEG2 makapagsimula. Ngunit kung ikaw, programmer, alam na may bit ng savvy na kung saan ang mga JPEG na o kung ano ang tumingin sila tulad ng sa gayon ay maaari mong pag-aralan ang 0s at 1s at sabihin JPEG, JPEG, Maaari kang magsulat ng isang programa na may mahalagang lamang para sa o habang loop na recovers sa bawat isa sa mga file. Kaya aralin pagkatapos ay upang simulan ang secure na binubura ang iyong mga file kung nais mong upang maiwasan ang kabuuan. Oo. [Mag-aaral] Paano dumating sinasabi nito sa iyong computer na mayroon kang higit pang memory kaysa ginawa mo dati? Magkaroon ng higit pang memory kaysa ginawa mo dati - >> [mag-aaral] Higit pang mga magagamit na memorya. Oh. Magandang tanong. Kaya bakit pagkatapos tinatanggalan ng laman ang trash ang iyong computer sabihin sa iyo na mayroon kang higit libreng espasyo kaysa ginawa mo dati? Sa maikling sabi, dahil ito namamalagi. Mas technically, ikaw ay walang higit pang espasyo dahil ngayon mo pa sinabi maaari mong ilagay ang iba pang mga bagay-bagay na kung saan ang file na sabay-sabay ay. Ngunit iyon ay hindi nangangahulugan na ang mga bits ay mawawala, at na ay hindi nangangahulugan na ang mga bits ay nabago sa lahat ng 0s, halimbawa, para sa iyong proteksyon. Kaya sa pamamagitan ng kaibahan, kung burahin mo secure file o pisikal na sirain ang aparato, na talagang ay ang tanging paraan na minsan sa paligid na. Kaya bakit hindi namin umalis sa na semi-nakakatakot na tala, at kami ay nakikita mo sa Lunes. [Palakpakan] [CS50.TV]