[Powered by Google Translate] [WIKI 5]
[David J. Malan, Chuo Kikuu cha Harvard]
[Hii ni CS50.] [CS50.TV]
[Mwanamke] Yeye amelala; kuhusu nini, mimi sijui.
[Man] Basi nini sisi kujua?
[Mwanamke] Hiyo saa 9:15, Ray Santoya ilikuwa kwa ATM.
[Man] Hivyo swali ni, nini ilikuwa yeye kufanya saa 9:16?
[Mwanamke] Risasi mm 9 katika kitu fulani.
Labda aliona sniper.
[Man] Au alikuwa anafanya kazi pamoja naye.
[Mwanamke] Subiri. Nenda moja nyuma.
[Man] Unaona nini?
[♫ muziki Suspenseful ♫]
[Mwanamke] Lete uso wake juu. Kamili screen.
[Man] glasi wake. >> Kuna reflection.
[♫ muziki Suspenseful ♫]
[Man] Hiyo baseball Nuevita wa timu. Hiyo ni alama yao.
[Mwanamke] Na yeye ni kuzungumza na mtu yeyote, s amevaa kwamba Jacket.
>> [Daudi Malan] hiyo, hili ni CS50 wiki 5, na leo sisi uharibifu kidogo ya televisheni na sinema kwa ajili yenu.
Hiyo wakati wowote wewe ni kuangalia show kama hii moja hapa,
na Cops kusema "Je, wewe safi kuwa hadi?" au "Kuongeza,"
hakuna kuongeza katika ulimwengu wa kweli.
Kwa kweli, nini wewe kweli ni kupata kitu kidogo kama hii.
Nimekuwa anapigiwa moja ya picha wafanyakazi kutoka ukurasa.
Hii ni programu inayoitwa Photoshop. Hii ni 1 ya Bowdens 2,
1 ya 3 Bowdens kweli, leo, kwa sababu tuna Bi Bowden hapa pia, na Rob na Paulo.
Lakini hapa ni Rob kwenye screen, na kama sisi zoom katika juu ya glint kwamba yeye daima alikuwa katika jicho lake,
nini hasa kuona kwamba ni nini kuona ni nini kupata.
Hii ni "kuimarishwa," hivyo "CSI" kuwa ni kidogo makosa.
Kuna mmoja video nyingine, kama tunaweza kuchukua juu ya "CSI" tu kidogo tena.
Hii moja ni maneno nice atatoa sasa kama unataka
sauti za kiufundi kwa rafiki yako wakati, kwa kweli, wewe ni kusema kitu kabisa.
>> [Man] Kwa muda wa wiki Nimekuwa kuchunguza mauaji Killer Cabby
na fascination fulani morbid.
[Mama # 1] Hii ni katika muda halisi.
[Mama # 2] Mimi utaunda interface GUI kutumia Visual Basic, kuona kama naweza kufuatilia anwani ya IP.
>> [Malan] Basi audio nje ya Sync kando, kujenga interface GUI kutumia Visual Basic
kufuatilia anwani ya IP ni kamili nonsense.
Siku hizi bila kutumia Visual Basic,
hakuna haja kwa GUI, na anwani ya IP alikuwa mrefu kitaalam sahihi.
Hivyo kuweka jicho nje kwa ajili ya haya, na moja ya favorites yangu:
Hii moja ni kidogo zaidi arcane, kwa sababu unahitaji kujua lugha tofauti.
Kuna lugha inayoitwa Lengo-C, ambayo ni superset ya C.
Ambayo ina maana ya C plus baadhi ya vipengele ziada, kati yao kitu-oriented programu.
Na hii ni lugha ya kwamba Apple ina umaarufu kwa ajili ya programu iOS.
Na hivyo hapa ni picha ya video kutoka show tofauti kabisa, kutoka "Hesabu,"
kwamba kama kweli kuangalia kwa karibu juu ya TiVo yako na pause wakati wa kulia,
utaona kwamba nini re kuangalia ni nini si kabisa kinachoelezwa.
Na napenda kujaribu tofauti audio kontakt hapa na kuona kama hatuwezi
kuweka audio katika Sync wakati huu.
Mimi kukupa "Hesabu."
>> [Man # 1] Ni ya 32-bit IPv4 anuani.
[Man # 2] IP, hiyo ni ya internet. >> Private mtandao. Ni Anita binafsi ya mtandao.
[Malan] Sawa. Hii ni Lengo-C, na ni kwa ajili ya kuchorea mpango baadhi mtoto wa,
kama unaweza labda infer kutoka jina la kutofautiana huko.
Hivyo hivyo, basi, ilikuwa "Hesabu." Hivyo leo na wiki hii sisi kuanzisha
kidogo ya dunia ya forensics na muktadha katika matatizo kwa sababu hiyo.
Leo itakuwa hotuba abbreviated kwa sababu kuna tukio maalum katika hapa
baadaye, hivyo tutaweza kuchukua Peek, na tease wanafunzi wote na wazazi sawa leo
na baadhi ya mambo ambayo ni juu ya upeo wa macho.
Kati yao, kama ya Jumatatu, utakuwa chache wanafunzi zaidi.
EdX, Harvard na mits mpya online mpango kwa wazi courseware
na zaidi, ni uzinduzi juu ya chuo cha Harvard juu ya Jumatatu.
Ambayo ina maana ya kuja Jumatatu utakuwa - kama ya kuhesabu mwisho,
86,000 classmates ziada itakuwa kufuatia pamoja na mihadhara CS50 ya
na sehemu na walkthroughs na seti tatizo.
Na kama sehemu ya hii, utakuwa kuwa wanachama wa darasa uzinduzi wa
CS50 na sasa CS50x.
>> Kama sehemu ya hili, sasa, kutambua kwamba kutakuwa na baadhi upsides pia.
Ili kupata tayari kwa ajili ya hii, kwa idadi kubwa ya wanafunzi,
inatosha kusema kwamba hata kama tuna TFS 108 na CAS,
si bora kabisa mwanafunzi / mwalimu uwiano mara moja sisi hit 80,000 wanafunzi wengine.
Hivyo sisi siyo kwenda kuwa grading wengi tatizo seti manually.
Hivyo ilianzisha wiki hii katika kuweka tatizo itakuwa CS50 Check,
ambayo ni kwenda kuwa mstari amri shirika ndani ya appliance
kwamba utapata mara moja update baadaye mwishoni mwa wiki hii,
na wewe utakuwa na uwezo wa kukimbia amri, angalia 50,
juu ya pset yako mwenyewe, na utapata baadhi ya maoni ya kama mpango wako ni
sahihi au yasiyo sahihi kulingana na design mbalimbali specifikationer kwamba tuna zinazotolewa.
Hivyo zaidi juu ya kuwa na vipimo tatizo kuweka na
Classmates CS50x itakuwa kutumia hii kama vile.
>> Hivyo tatizo kuweka 4 ni wote kuhusu forensics.
Na kipande hii ulitokana na baadhi ya mambo halisi ya maisha,
ambapo nilipokuwa katika shule ya kuhitimu, mimi interned kwa wakati na
Ofisi Jina Middlesex ya Wilaya ya Mwanasheria kufanya kazi ya kuchunguza mauaji
na mpelelezi wao risasi kuchunguza mauaji, na nini hii yalifikia
ni, nadhani nilivyoeleza wiki iliyopita chache, ni Misa Jimbo polisi au watu wengine
ingekuwa kuja katika, wangeweza kuacha mbali mambo kama anatoa ngumu na CD na disks floppy
na kama, na kisha lengo la ofisi forensics ilikuwa ili kuhakikisha kama
kulikuwa au hakuwa na ushahidi wa aina fulani.
Hii ilikuwa Maalum Uchunguzi Unit, hivyo ilikuwa nyeupe-collar uhalifu,
ilikuwa zaidi kumsumbua aina ya uhalifu,
chochote kuwashirikisha baadhi ya aina ya vyombo vya habari digital; zinageuka kuwa si kwamba watu wengi
kuandika barua pepe akisema "Mimi alifanya hivyo."
Hivyo mara nyingi kabisa upekuzi forensics hawakufika matunda yote sana,
lakini wakati mwingine watu bila kuandika barua pepe kama hizo.
Hivyo wakati mwingine juhudi walipewa zawadi.
>> Lakini kuwaongoza hadi pset hii ya kuchunguza mauaji, tutaweza kuwa kuanzisha katika pset 4 kidogo ya graphics.
Hivyo pengine kuchukua mambo haya kwa nafasi, JPEGs GIFs, na kama siku hizi,
lakini kama kweli kufikiri juu yake, sanamu, kiasi kama uso wa Rob,
inaweza kuwa inatokana kama mlolongo wa dots, au Ukubwa.
Sasa, katika kesi ya uso wa Rob, kuna kila aina ya rangi,
na sisi kuanza kuona dots mtu binafsi, otherwide inayojulikana kama, saizi ya
mara moja tulianza zoom in
Lakini kama sisi kurahisisha dunia kidogo, na kusema tu kwamba hii hapa ni Rob
katika nyeusi na nyeupe, vizuri, kuwakilisha nyeusi na nyeupe tunaweza tu kutumia binary.
Na kama sisi ni kwenda kutumia binary, 1 au 0, tunaweza kueleza picha hii sawa
ya uso wa Rob smiling na muundo huu wa bits: 11000011 inawakilisha
nyeupe, nyeupe, nyeusi, nyeusi, nyeusi, nyeusi, nyeupe nyeupe.
Na hivyo si leap kubwa, basi, kuanza kuzungumza juu ya picha colourful.
Mambo ambayo unaweza kuiona kwenye Facebook au kuchukua na kamera ya digital,
lakini, kwa hakika, linapokuja rangi, unahitaji bits zaidi.
Na kawaida kabisa katika ulimwengu wa picha ni kutumia si 1-bit Michezo,
kama hii unaonyesha, lakini 24-bit Michezo, ambapo kwa kweli kupata mamilioni ya rangi.
Hivyo kama katika kesi wakati sisi zoomed katika juu ya jicho Rob wa,
kwamba ilikuwa na idadi yoyote ya mamilioni ya uwezekano tofauti colorful.
>> Hivyo tutaweza kuanzisha hii katika tatizo kuweka 4 kama vile katika walkthrough,
ambayo itakuwa leo saa 3:30 badala ya 2:30 kawaida kwa sababu ya hotuba ya Ijumaa hapa.
Lakini video itakuwa online, kama kawaida, kesho.
Tutaweza pia kuanzisha wewe format faili nyingine.
Hivyo hii ni makusudi maana ya kuangalia vitisho mara ya kwanza,
lakini hii ni baadhi tu nyaraka kwa ajili ya struct C.
Ni zinageuka kuwa Microsoft, miaka iliyopita, umesaidia wanatangaza hii format,
kuitwa bitmap faili format, BMP, na hii ilikuwa super-rahisi,
colourful graphical faili format ambayo ilitumika kwa muda kabisa
na wakati mwingine bado kwa wallpapers kwenye kopyuta.
Kama unafikiri nyuma kwa Windows XP na milima rolling na anga ya bluu,
kwamba ilikuwa kawaida BMP, au picha bitmap, na bitmaps
ni furaha kwa ajili yetu kwa sababu wana kidogo zaidi utata.
Ni kabisa kama rahisi kama hii ya gridi ya 0 na 1 ya;
badala yake, una vitu kama header mwanzoni ya faili.
Hivyo kwa maneno mengine, ndani ya faili bmp. Ni rundo zima la wa 0 na 1 ya,
lakini kuna baadhi ya ziada 0 na 1 ya huko.
Na zinageuka kuwa kile ambacho tumekuwa pengine kuchukuliwa kwa nafasi kwa miaka,
file format kama. doc xls au. au. mp3 au. mp4,
chochote format faili kwamba wewe ni ukoo na.
Naam, ni nini hata maana ya kuwa format faili?
Kwa sababu mwisho wa siku, wote wa files haya sisi kutumia kuwa tu 0 na 1 ya
na labda wale 0 na 1 ya kuwakilisha, b, c, kupitia ASCII au kama,
lakini kwa njia ya mwisho wa siku, ni tu 0 na 1 ya.
>> Hivyo binadamu tu mara kwa mara ya kuamua mzulia faili mpya format
ambapo wao standardize nini mwelekeo wa bits kwa kweli maana.
Na katika kesi hii hapa, folks ambao iliyoundwa bitmap faili format
alisema kuwa katika Byte sana kwanza katika faili bitmap, kama ulionyehsa kwa kukabiliana 0, kuna,
kuna kwenda kuwa baadhi isiyoeleweka kirahisi aitwaye variable kuitwa bfType,
ambayo tu anasimama kwa ajili ya aina bitmap faili; ni aina gani ya faili bitmap hii ni.
Unaweza infer, pengine, kutoka safu ya pili kwamba kukabiliana 2, Byte idadi 2,
ina mfano wa Mungu na 0 1 kwamba inawakilisha nini?
ukubwa wa kitu fulani, na unaendelea kutoka huko.
Hivyo katika tatizo kuweka 4, wewe utakuwa kutembea kwa njia ya baadhi ya mambo haya.
>> Sisi si kuishia kujali juu ya wote, lakini taarifa ni kuanza kupata kuvutia
kuzunguka mstari au Byte 54, rgbtBlue, Green na Red.
Kama ve milele habari kifupi RGB, nyekundu kijani bluu, hii ni kumbukumbu ya kwamba.
Kwa sababu ni zamu nje unaweza rangi rangi zote za upinde wa mvua
na baadhi ya macho ya nyekundu na bluu na kijani.
Na, kwa kweli, wazazi katika chumba wapate kukumbuka baadhi ya madomo mwanzo.
Siku hizi, wewe tu kuona 1 mwanga mkali kuja nje ya Lens.
Lakini nyuma katika siku, wewe alikuwa Lens nyekundu, Lens bluu, na Lens kijani
na pamoja nao kwa lengo la screen na sumu picha colourful.
Na mara nyingi kabisa katikati ya shule na shule za sekondari ingekuwa lenses wale
milele-ili-kidogo potovu, hivyo walikuwa aina ya kuona picha mara mbili au tatu,
lakini kwamba alikuwa na wazo. You alikuwa nyekundu na kijani na bluu mwanga uchoraji picha.
Na kanuni hiyo ni kutumika katika kompyuta.
>> Hivyo kati ya changamoto, basi, kwa ajili yenu katika tatizo kuweka 4
itakuwa ni ya mambo kadhaa, moja ni kweli resize picha.
Kuchukua katika muundo wa wa 0 na 1 ya,
kufikiri ambayo chunks ya ya 0 na 1 ya kuwakilisha nini katika muundo kama hii,
na kisha kufikiri ni jinsi gani ya kuiga saizi: boundin, blues, wiki
ndani ili wakati picha inaonekana kama hii ya awali, ili kuangalia kama hii badala baada ya hapo.
Miongoni mwa changamoto nyingine, pia, ni kwenda kuwa kuwa wewe utakuwa mitupu
picha ya kuchunguza mauaji ya faili halisi kutoka kamera ya digital
na juu ya kamera kwamba, mara moja juu ya muda, walikuwa rundo zima la photos.
Tatizo ni, sisi ajali erased au alikuwa image kupotoshwa kwa namna fulani.
Mambo mabaya kutokea kwa kamera ya digital, na hivyo sisi haraka kunakiliwa yote ya ya 0 na 1 ya
mbali ya kwamba kadi kwa ajili yenu, kuokolewa kwao wote katika faili 1 kubwa, na kisha tutaweza mkono wao kwa wewe
katika tatizo kuweka 4 ili uweze kuandika mpango katika C na ambayo kupona
wote wa JPEGs hizo, walau.
Na zinageuka JPEGs kwamba, ingawa wao ni kiasi fulani ya muundo tata ya SVG,
wao uko magumu zaidi kuliko uso hii smiling hapa.
Ni zinageuka kuwa kila JPEG kuanza na mwelekeo huo wa wa 0 na 1 ya.
Hivyo kwa kutumia kitanzi wakati au kwa kitanzi au sawa,
unaweza iterate juu ya wote 0 na 1 katika picha hii ya kuchunguza mauaji
na kila wakati unaweza kuona mfano maalum ambacho defined katika vipimo kuweka tatizo la,
unaweza kudhani, 'Oh, hapa ni pamoja na uwezekano juu sana,
mwanzo wa JPEG, 'na kwa haraka kama wewe kupata mfano huo,
baadhi idadi ya ka au kilobytes au megabaiti baadaye,
unaweza kudhani, 'Ooh! Hapa ni JPEG pili, picha mimi alichukua baada ya moja ya kwanza.
Hebu kuacha kusoma kwamba faili kwanza, kuanza kuandika hii moja mpya. '
Na pato la mpango wako kwa pset 4 ni kwenda kuwa kama wengi kama 50 JPEGs.
Na kama siyo 50 JPEGs, una kidogo ya kitanzi.
Kama una idadi ya usio wa JPEGs, una kitanzi usio.
Hivyo kwamba, pia, itakuwa kesi ya kawaida kabisa.
Hiyo ni nini juu ya upeo wa macho.
>> Maswali 0, nyuma yetu. Kutambua, kwa email yangu, kwamba invariably kuna folks
wote ambao ni furaha, ni aina ya neutral, na kusikitisha kuzunguka Jaribio 0 muda.
Na tafadhali kufikia nje kwangu, TFS kichwa, Zamyla, TF yako mwenyewe
au moja ya CAS kwa kuwa wewe kujua kama ungependa kujadili jinsi mambo akaenda.
>> Hivyo kumvutia wazazi hapa katika chumba,
kile ni maktaba CS50? Kazi nzuri.
Nini maktaba CS50? Yeah? [Mwanafunzi majibu, unintelligible]
>> Okay, nzuri. Hivyo ni kuweka prewritten ya kificho kwamba sisi, wafanyakazi, aliandika,
sisi kutoa na wewe, kwa kutoa functionalities baadhi ya kawaida.
Stuff like kupata yangu string; kupata yangu int, wote wa kazi ambayo yameorodheshwa hapa.
Kuanzia sasa, sisi kuanza kwa kweli kuchukua magurudumu haya mafunzo mbali.
Hivyo sisi ni kwenda kuanza kuchukua "kamba" kutoka kwenu,
ambayo, wanakumbuka, mara tu kisawe kwa ajili ya aina yale halisi data? Char *.
Hivyo kwa wazazi, kwamba labda - kwamba ni nzuri, hivyo * Char tutaweza kuanza kuona
juu ya screen wote zaidi kama sisi kuondoa "kamba" kutoka msamiati wetu,
angalau linapokuja kweli kuandika code.
Vile vile, tutaweza kuacha kutumia baadhi ya kazi hizi kama mengi,
kwa sababu mipango yetu ni kwenda kupata kisasa zaidi
badala tu ya kuandika mipango kwamba kukaa pale na blinking haraka,
kusubiri kwa mtumiaji na aina kitu in
Utapata pembejeo yako kutoka mahali pengine.
Kwa mfano, utapata yao kutoka katika mfululizo wa bits kwenye gari mitaa ngumu.
Wewe utakuwa badala kupata yao katika siku zijazo kutoka uhusiano wa mtandao, baadhi tovuti mahali fulani.
Basi hebu peel safu nyuma hii kwa mara ya kwanza, na kuvuta up appliance CS50
na faili hii inaitwa CS50.h, ambayo wewe tumekuwa mkali ikiwa ni pamoja na kwa wiki.
>> Lakini hebu kweli kuona nini ndani ya hii.
Hivyo juu ya faili katika bluu ni tu rundo zima la maoni,
udhamini habari na leseni. Hii ni aina ya dhana ya kawaida
katika programu, kwa sababu mengi ya programu siku hizi ni nini inayoitwa "chanzo wazi,"
ambayo ina maana kwamba mtu ameandika code
na alifanya hivyo kwa uhuru zaidi, si tu kukimbia na kutumia,
lakini kwa kweli kusoma na kubadilisha na kuunganisha katika kazi yako mwenyewe.
Hivyo kwamba ni nini tumekuwa kutumia, wazi chanzo programu,
angalau katika fomu ndogo sana.
Kama mimi kitabu chini cha maoni, ingawa, tutaweza kuanza kuona baadhi ya mambo zaidi ya ukoo.
Hivyo taarifa juu hapa, kwamba faili CS50.h ni pamoja na rundo zima la files header.
Sasa, wengi wa hawa hatujaona kabla, lakini moja ni
zinazojulikana, ambayo ya hizi sisi kuonekana, angalau kwa ufupi, hivi sasa?
Yeah, kiwango maktaba. Stdlib.h ina malloc,
hivyo mara moja tulipoanza kuzungumza kuhusu mgao nguvu kumbukumbu,
ambayo tutaweza kurudi wiki ijayo kama vizuri, sisi ilianza ikiwa ni pamoja na faili hilo.
Ni zinageuka kuwa bool na kweli na uongo si kweli zipo katika C, per se,
isipokuwa wewe ni pamoja na faili hii hapa.
Hivyo tuna, kwa wiki, ikiwa ni pamoja na kiwango wamekuwa bool.h
hivyo kwamba unaweza kutumia dhana ya bool, kweli au uongo.
Bila hili, ungependa kuwa na aina ya bandia na kutumia int
na tu kiholela kudhani kwamba 0 ni uongo na 1 ni kweli.
>> Sasa, kama sisi kitabu chini zaidi, hapa ni ufafanuzi yetu ya kamba.
Ni zinageuka, kama tumekuwa alisema kabla, kwamba ambapo * hii ni kweli haina jambo.
Unaweza hata kuwa na nafasi pande zote.
Sisi, hii muhula, wamekuwa kukuza kama hii kufanya wazi kwamba * ina nini na aina.
Lakini kutambua, kama kawaida, kama siyo kidogo zaidi ya kawaida, ni kuweka huko
lakini functionally ni kitu kimoja.
Lakini sasa, kama sisi kusoma chini zaidi, hebu kuchukua kuangalia kusema, GetInt,
kwa sababu sisi kutumika kwamba, pengine, kabla ya kitu kingine chochote hii muhula.
Na hapa ni GetInt. Hii ni nini?
Hii ni mfano. Hivyo mara nyingi, tuna kuweka prototypes katika vilele vya wetu c files.,
lakini unaweza pia kuweka prototypes katika files header,. files h,
kama hii moja hapa, hivyo kwamba wakati wewe kuandika baadhi ya majukumu
kwamba unataka watu wengine kuwa na uwezo wa kutumia, ambayo ni hasa kesi na maktaba CS50,
wewe si tu kutekeleza majukumu yako katika kitu kama CS50.c,
wewe pia kuweka prototypes si wakati juu ya faili kwamba, lakini wakati juu ya faili header,
basi kwamba faili header ni nini marafiki na wafanyakazi wenzake ni pamoja na,
na mkali pamoja katika kanuni zao wenyewe.
Hivyo muda wote huu tumekuwa pamoja wote prototypes hizi
ufanisi katika juu ya faili yako, lakini kwa njia ya hii ni pamoja na utaratibu mkali
kwamba kimsingi nakala na pastes faili hii katika yako mwenyewe.
Sasa, hapa ni baadhi ya nyaraka uungwana kina.
>> Tumekuwa pretty much kuchukuliwa kwa nafasi ya kuwa GetInt anapata int,
lakini zinageuka kuna kesi kona baadhi, haki?
Nini kama mtumiaji aina katika idadi hiyo ni njia kubwa mno?
quintillion, kwamba tu hawezi fit ndani ya int?
Je, ni tabia yanayotarajiwa? Naam, walau, ni kutabirika.
Hivyo katika kesi hii, kama kweli kusoma magazeti faini,
utaona kwamba kama mstari hauwezi kusoma, hii INT_MAX atakaporudi.
Sisi sijawahi kuongelea kuhusu hili, lakini kwa kuzingatia mtaji wake,
ni nini, pengine?
Ni mara kwa mara, hivyo ni baadhi ya mara kwa mara maalum kwamba pengine alitangaza
katika moja ya files wale header kwamba ni juu ya juu katika faili,
na INT_MAX pengine ni kitu kama, ukali, bilioni 2.
wazo kuwa kuwa sababu tunahitaji namna fulani yanamaanisha kwamba kitu potoka,
sisi, ndiyo, na idadi bilioni 4 katika ovyo yetu,
hasi juu ya bilioni 2 hadi bilioni 2, kutoa au kuchukua.
Naam, ni ya kawaida katika programu hii ni wewe kuiba moja tu ya wale idadi.
Labda 0, labda bilioni 2, labda hasi bilioni 2.
Hivyo wewe kutumia moja ya maadili yako iwezekanavyo ili uweze kufanya kwa dunia
kwamba kama kitu fulani kitaenda vibaya, nitarudi thamani hii super-kubwa.
Lakini hutaki mtumiaji kuandika kitu cryptic kama "2, 3, 4 ..."
ya idadi kubwa kweli kweli, ambapo badala generalize kama mara kwa mara.
Hivyo kweli, kama wewe walikuwa kuwa anal majuma machache yaliyopita,
wakati wowote wewe piga GetInt, unapaswa kuwa na hali ya kuangalia kama.
Je aina user katika INT_MAX, au zaidi hasa,
alifanya GetInt kurudi INT_MAX? Kwa sababu kama ni hivyo,
kwamba kwa kweli ina maana hawakuwa unapoandika; kitu potoka katika kesi hii.
Hivyo hii ni nini ujumla inayojulikana kama thamani "sentinel", ambayo ina maana maalum.
>> Naam, hebu sasa kurejea katika c. Files.
Faili C limekuwepo katika appliance kwa muda fulani,
na, kwa kweli, appliance ina precompiled kwa wewe
ndani ya jambo kwamba sisi kuitwa "kitu kificho,"
lakini ni tu Haijalishi wewe ambapo ni kwa sababu mfumo anajua,
katika kesi hii, ambako ni, appliance.
Lakini hebu kitabu chini sasa kwa GetInt, na kuona jinsi GetInt imekuwa ikifanya kazi muda wote huu.
Hivyo hapa tuna sawa maoni kutoka kabla.
Hebu kuvuta tu sehemu ya kificho,
na kile sisi kwa GetInt ni zifuatazo.
Inachukua hakuna pembejeo na kuirudisha int, wakati (wa kweli), hivyo tuna makusudi usio kitanzi
lakini, labda, tutaweza kuvunja nje ya hii kwa namna fulani, au kurudi kutoka ndani ya hii.
Basi hebu angalia jinsi hii matendo. Naam, sisi wanaonekana kuwa na kutumia GetString
katika mstari huu wa kwanza ndani ya kitanzi, 166.
Hii sasa ni mazoezi mazuri kwa sababu chini ya mazingira gani
inaweza GetString kurudi hii maalum Keyword, null?
Kama kitu fulani kitaenda vibaya. Je, inaweza kwenda vibaya wakati wewe piga kitu kama GetString?
Yeah? [Mwanafunzi jibu, unintelligible] >> Yeah. Hivyo labda malloc inashindwa.
Mahali fulani chini GetString Hood wito malloc,
ambao unagawa kumbukumbu, ambayo inakuwezesha kuhifadhi kompyuta
yote ya wahusika kwamba mtumiaji aina katika keyboard.
Na kudhani mtumiaji alikuwa na mengi nzima ya muda bure
na typed zaidi, kwa mfano, zaidi ya herufi bilioni 2.
Zaidi ya wahusika kuliko kompyuta hata ina RAM.
Naam, GetString ina kuwa na uwezo kwa ishara ya kwamba na wewe,
hata kama hii ni super, super kawaida kona kesi.
Ina kwa namna fulani kuwa na uwezo wa kushughulikia suala hili, na hivyo GetString,
kama sisi kurudi nyuma na kusoma nyaraka zake, haina, kwa kweli, kurudi null.
Sasa kama GetString inashindwa na kurudi null, GetInt ataenda kushindwa
na kurudi INT_MAX, kama sentinel.
Hizi ni baadhi tu ya binadamu makongamano. njia pekee ya kujua hii ni kesi
ni kwa kusoma nyaraka.
Basi hebu kitabu chini ambapo int ni kweli GotInt.
>> Hivyo kama mimi kitabu chini kidogo zaidi, katika mstari 170 tuna maoni juu ya mistari haya.
Hivyo sisi kutangaza, katika 172, n int na c Char, na kisha kazi hii mpya
ambayo baadhi yenu mashaka hela kabla, lakini sscanf.
Hii anasimama kwa kamba f Scan.
Kwa maneno mengine, nipe string nami Scan kwa vipande vya habari ya riba.
Hiyo ni nini maana ya kwamba? Naam, tuseme kwamba ninapoandika katika, literally, 1 2 3 katika keyboard,
na kisha hit kuingia. Je, ni aina ya data 1 2 3 wakati akarudi na GetString?
Ni wazi kamba, sawa? I got kamba, hivyo 1 2 3 ni kweli "1 2 3"
na 0 \ katika mwisho wake. Hiyo siyo int.
Hiyo si idadi. Inaonekana kama idadi lakini si kweli.
Hiyo ni nini GetInt kufanya? Ina Scan kwamba string kushoto na kulia,
1 2 3 \ 0, na kwa namna fulani kubadilisha kwa integer halisi.
Sasa, unaweza kufikiri ni jinsi gani ya kufanya hivyo.
Kama unafikiri nyuma pset 2, wewe labda got kidogo starehe
kwa Kaisari, au vigenere hivyo unaweza iterate juu ya kamba,
unaweza kubadilisha chars kwa ints na pick. Hiyo ni mengi yote ya kazi.
Mbona si wito kazi kama sscanf kwamba gani kwa ajili yenu?
Hivyo sscanf anatarajia hoja, katika kesi hii inaitwa mstari, ambayo ni kamba.
Wewe basi bayana, katika quotes, ni sawa na printf,
je, wewe kutarajia kuona katika kamba hii?
Nini mimi kusema hapa ni, mimi kutarajia kuona idadi decimal na labda tabia.
Na tutaweza kuona nini hii ni kesi katika muda tu.
Ni zinageuka kuwa nukuu hii sasa ni kukumbusha ya mambo
tulipoanza kuzungumza kuhusu tu zaidi ya wiki iliyopita.
>> Nini ni & n na & c kufanya kwa sisi hapa? [Mwanafunzi majibu, unintelligible]
>> Yeah. Ni kunipa anuani ya n na anuani ya c.
Sasa, kwa nini ni muhimu kwamba? Naam, unajua kwamba pamoja na utendaji katika C
unaweza daima kurudi thamani au hakuna thamani wakati wote.
Unaweza kurudi int, kamba, kuelea, char, chochote.
Au unaweza kurudi batili, lakini unaweza tu kurudi 1 kitu Upeo.
Lakini hapa tunataka sscanf kurudi kwangu labda int, idadi decimal,
na pia Char, na mimi itabidi kueleza kwa nini Char katika wakati huu.
Hivyo ufanisi wanataka f kurudi mambo 2; kwamba si tu inawezekana katika C.
Hivyo unaweza kufanya kazi ya kuzunguka kwamba kwa kupita katika anwani 2,
kwa sababu kwa haraka kama wewe mkono kazi anwani 2, nini wanaweza kufanya kazi hiyo pamoja nao?
Ni unaweza kuandika kwa anwani hizo. Unaweza kutumia operesheni * na "kwenda huko" kwa kila moja ya anwani hizo.
Ni aina ya mfumo huu backdoor, lakini kawaida sana kwa ajili ya kubadilisha maadili ya vigezo
katika zaidi ya 1 tu mahali, katika kesi hii 2.
Sasa, mimi nina taarifa ya kuangalia kwa == to1, na kisha kurudi n kama hana, kwa kweli, kutathmini kwa kweli.
Basi nini kinaendelea? Naam, kitaalam, wote kweli tunataka kutokea katika GetInt ni hii.
Tunataka kuchanganua, hivyo kusema; tunataka kusoma string
"1 2 3" na kama inaonekana kama kuna idadi huko,
nini tuko kuwaambia sscanf kufanya ni kuweka kwamba idadi, 1 2 3, katika n hii variable kwa ajili yangu.
Kwa nini, basi, alifanya nina hili pia?
Je, jukumu la pia akisema, sscanf, unaweza pia kupata tabia hapa.
[Mwanafunzi akizungumza, unintelligible] >> Si - uhakika decimal anaweza kufanya kazi.
Hebu kushikilia kwamba walidhani kwa muda. Gani kingine?
[Mwanafunzi, unintelligible] >> Hivyo, wazo nzuri, inaweza kuwa tabia null.
Ni kweli si, katika kesi hii. Yeah? [Mwanafunzi, unintelligible]
>> >> ASCII. Au, basi mimi generalize hata zaidi.
C% kuna tu kwa makosa ya kuangalia.
Hatutaki kuwa kuna tabia baada ya idadi,
lakini nini hii inaruhusu mimi kufanya ni yafuatayo:
Ni zinageuka kuwa sscanf, badala ya kuhifadhi maadili katika n na c, katika mfano huu hapa,
nini pia haina ni kuirudisha idadi ya vigezo ni kuweka maadili in
Hivyo kama wewe tu aina katika 1 2 3, basi tu d% ni kwenda kwa mechi
na tu n anapata kuhifadhiwa kwa thamani kama 1 2 3 na kitu anapata kuweka katika c;
c bado thamani ya takataka, hivyo kusema.
Takataka kwa sababu ni haijawahi initialized kama thamani fulani.
Hivyo katika kesi hiyo, sscanf anarudi 1, kwa sababu mimi wakazi moja ya kuyatumia hizo,
katika kesi ambayo, kubwa. Nina int, hivyo mimi huru line ya bure juu ya kumbukumbu
kwamba GetString kweli zilizotengwa, na kisha mimi kurudi n.
Mwingine, kama umewahi kujiuliza ambapo kwamba retry kauli huja kutoka, linatokana na haki hapa.
Kama, kwa kulinganisha, ninapoandika katika 1 2 3 foo,
baadhi tu mlolongo random wa maandishi, sscanf ni kwenda kuona,
ooh, idadi, ooh, idadi, ooh, idadi, ooh - f.
Na ni kwenda kuweka 1 2 3 katika n.
Ni kwenda kuweka f katika c, na kisha kurudi 2.
Hivyo tuna, tu kutumia ufafanuzi wa msingi wa tabia ya scanf,
njia rahisi sana - vizuri, tata katika mtazamo wa kwanza, lakini mwisho wa siku,
haki rahisi utaratibu wa kusema, ni pale int, na kama ni hivyo, ni kwamba kitu pekee mimi kupatikana?
Na nafasi nyeupe hapa ni makusudi. Kama unaweza kusoma nyaraka kwa ajili ya sscanf,
ni anakwambia kwamba kama wewe ni pamoja na kipande ya nafasi nyeupe mwanzoni au mwishoni,
sscanf pia itaruhusu mtumiaji, kwa sababu yoyote, hit spacebar 1 2 3, na hiyo itakuwa halali.
Itakuwa si yell katika user tu kwa sababu wao hit spacebar mwanzoni au mwishoni,
ambayo ni kidogo tu zaidi user-kirafiki.
>> Maswali yoyote, basi, juu ya GetInts? Yeah?
[Mwanafunzi swali, unintelligible]
>> Bora swali. Je, iwapo tu typed katika Char, kama hit f, na kuingia
bila hata kuandika 1 2 3; unafikiri nini tabia ya huu mstari wa kanuni basi ingekuwa?
Hivyo sscanf unaweza cover kwamba pia, kwa sababu katika kesi hiyo,
si kwenda kujaza n au c; itakavyo badala kurudi 0.
Katika kesi ambayo, mimi nina pia kuambukizwa kwamba hali hiyo, kwa sababu thamani inatarajiwa nataka ni 1.
Mimi nataka tu 1, na kitu pekee 1 ya kujazwa. Nzuri swali. Wengine?
>> Haki ya wote, hivyo basi si kwenda kwa yote ya kazi katika hapa,
lakini moja ambayo inaonekana kuwa, pengine, riba iliyobaki
ni kwa sababu GetString zinageuka kuwa GetFloat, GetInt,
GetDouble, GetLongLong wote punt mengi ya utendaji wao wa GetString.
Basi hebu tuangalie jinsi yeye ni kutekelezwa hapa.
Hii moja inaonekana tata kidogo lakini inatumia misingi hiyo
kwamba sisi kuanza kuzungumza kuhusu wiki iliyopita. Hivyo katika GetString,
ambayo inachukua hakuna hoja kama kwa utupu hapa juu,
na kuirudisha string; hivyo mimi kutangaza string kuitwa buffer.
Mimi kwa kweli sijui ni nini ambayo inaenda kutumika kwa ajili bado, lakini tutaweza kuona.
Looks kama uwezo ni, kwa default, 0; uhakika kabisa ambapo hii ni kwenda.
Uhakika nini n kinaendelea kutumiwa kwa maana bado.
Lakini sasa ni kupata zaidi kidogo ya kuvutia, hivyo katika mstari 243,
sisi kutangaza c int, hii ni aina ya kina ya kijinga.
Char ni 8 bits, na 8 bits unaweza kuhifadhi wangapi maadili tofauti?
256. Tatizo ni, kama unataka kuwa na 256 tofauti wahusika ASCII,
ambayo kuna, kama unafikiri nyuma, na hii si kitu kwa kukariri.
Lakini kama unadhani nyuma chati kwamba kubwa ASCII tulikuwa wiki iliyopita,
walikuwepo, katika kesi hiyo, 128 au 256 ASCII wahusika.
Sisi kutumika mifumo yote ya ya 0 na 1 ya juu.
Hiyo ni tatizo kama unataka kuwa na uwezo wa kuchunguza makosa.
Kwa sababu kama uko tayari kutumia maadili 256 kwa wahusika wako,
wewe si kweli mpango wa mbele, kwa sababu sasa una hakuna njia ya kusema,
"Hii si tabia legit, hii ni kwa baadhi ya ujumbe makosa."
Basi nini dunia gani ni, wao kutumia ijayo kubwa thamani,
kitu kama int ili una idadi mambo ya bits,
32 kwa maadili bilioni 4 iwezekanavyo, ili kwamba unaweza tu kuishia kutumia,
kimsingi, 257 kati yao, 1 ambayo ina baadhi ya maana maalum kama makosa.
>> Basi hebu angalia jinsi hii matendo. Katika mstari 246, nina hii kubwa wakati kitanzi
kwamba ni wito fgetc, f maana ya SVG, getc, na kisha stdin.
Zinageuka hii ni njia tu sahihi zaidi ya kusema "kusoma pembejeo kutoka keyboard."
Darasa la pembejeo njia keyboard, pato kiwango ina maana screen,
na kiwango makosa, ambayo tutaweza kuona katika pset 4, ina maana screen,
lakini sehemu maalum ya screen ili siyo conflated
na pato halisi kwamba wewe nia ya magazeti, lakini zaidi juu ya kwamba katika siku zijazo.
Hivyo fgetc njia tu kusoma moja tabia kutoka keyboard, na kuhifadhi wapi?
Kuhifadhi katika c, na kisha kuangalia, hivyo mimi nina kutumia tu kuhusianisha baadhi ya bulin hapa,
kuangalia kwamba hana sawa \ n, hivyo user ina hit kuingia.
Tunataka kukomesha saa kwamba uhakika, mwisho wa kitanzi, na sisi pia wanataka kuangalia
kwa mara kwa mara maalum, EOF, ambayo kama unajua au nadhani - ni nini kusimama kwa?
Mwisho wa faili. Hivyo hii ni aina ya kiupuzi, kwa sababu kama mimi nina kuandika katika keyboard,
kuna kweli hakuna faili kushiriki katika hili,
lakini hii tu ya aina ya muda generic kutumika kwa maana ya
kwamba kitu kingine ni kuja kutoka kwa vidole binadamu. EOF. Mwisho wa faili.
Kama kando, kama wameweza milele hit kudhibiti d katika keyboard yako,
si kwamba ungependa kuwa bado; ve hit kudhibiti c.
Lakini kudhibiti d zituma hii maalum ya mara kwa mara huitwa EOF.
>> Hivyo sasa sisi tu baadhi ya nguvu ya kumbukumbu mgao.
Hivyo kama n + 1> uwezo, sasa mimi itabidi kueleza n.
n ni jinsi tu wengi ka ni sasa katika buffer,
kamba kwamba wewe sasa kujenga kutoka kwa mtumiaji.
Kama una zaidi ya wahusika katika buffer yako kuliko wewe kuwa na uwezo katika buffer,
intuitively, tunachotaka kufanya ni basi kutenga zaidi ya uwezo.
Mimi naenda skim juu ya baadhi ya hesabu hapa
na lengo tu juu ya kazi hii hapa.
Unajua nini malloc ni, au angalau kwa ujumla ukoo.
Kuchukua nadhani nini realloc gani. [Mwanafunzi jibu, unintelligible]
>> Yeah. Na si kabisa kuongeza kumbukumbu; ni reallocates kumbukumbu kama ifuatavyo:
Kama bado kuna chumba katika mwisho wa kamba kukupa zaidi ya kumbukumbu ya kwamba
kuliko awali inakupa, kisha utapata kwamba kumbukumbu ya ziada.
Hivyo unaweza kuweka tu wahusika masharti nyuma kwa nyuma kwa nyuma kwa nyuma.
Lakini kama si kwamba kesi, kwa sababu wewe walisubiri muda mrefu sana
na kitu random got plopped katika kumbukumbu huko, lakini kuna ziada
kumbukumbu hapa chini, hiyo ni sawa. Realloc anaenda kufanya kuinua nzito kwa ajili yenu,
hoja string umeisoma katika hivi sasa kutoka hapa,
kuiweka chini huko, na kisha kukupa baadhi zaidi Runway katika hatua hiyo.
Hivyo, pamoja na wimbi la mkono, basi mimi kusema kwamba kile GetString ni kufanya
ni ni kwa kuanzia na buffer ndogo, labda 1 moja tabia,
na kama mtumiaji aina katika wahusika 2, GetString inaishia
wito realloc na anasema, 'Ooh, 1 tabia ilikuwa haitoshi.
Nipe wahusika 2. ' Kisha kama kusoma kwa njia ya mantiki ya kitanzi,
itakavyo kusema, 'Ooh, mtumiaji typed katika herufi 3.
Nipe sasa si 2 lakini 4 wahusika, basi nipe 8, basi nipe 16 na 32. '
ukweli kwamba mimi nina uwezo mara dufu kila wakati
ina maana kwamba buffer si kwenda kukua polepole.
Ni kwenda kukua super kufunga, na nini inaweza kuwa faida ya kwamba?
Kwa nini mimi mara mbili ya ukubwa wa buffer, ingawa mtumiaji
ili tu haja 1 ziada tabia kutoka keyboard?
[Mwanafunzi jibu, unintelligible]. >> Gani hiyo?
Hasa. Huna kukua ni kama mara nyingi.
Na hii ni aina tu ya - you're Hedging bets yako hapa.
wazo kuwa kuwa hutaki kuwaita realloc mengi, kwa sababu huelekea kuwa polepole.
Wakati wowote kuuliza mfumo wa uendeshaji kwa ajili ya kumbukumbu, kama utasikia haraka kuona
katika kuweka baadaye tatizo, huelekea kuchukua muda.
Hivyo kukanusha kwamba kiasi cha muda, hata kama wewe ni kupoteza baadhi ya nafasi, huelekea kuwa ni jambo jema.
>> Lakini kama sisi kusoma kupitia sehemu ya mwisho ya GetString hapa,
na tena, kuelewa kila line moja hapa sio muhimu leo.
Lakini ona kwamba hatimaye wito malloc tena, na kutenga
hasa kama ka wengi kama ni mahitaji kwa kamba
na kisha throws mbali na wito bure, buffer kupita kiasi kikubwa,
kama ni kweli got mara mbili mara nyingi sana.
Kwa kifupi, hiyo ni jinsi GetString imekuwa ikifanya kazi muda wote huu.
All yake ni kusoma moja ya tabia kwa wakati tena na tena na tena
na kila wakati inahitaji baadhi ya kumbukumbu ya ziada, inauliza mfumo wa uendeshaji kwa ajili yake kwa wito realloc.
Maswali yoyote? Wote haki.
>> mashambulizi. Sasa kwa kuwa tunaelewa kuyatumia, au angalau
zinazidi ukoo na kuyatumia,
hebu fikiria jinsi dunia zima kuanza kuanguka
kama huna kabisa kulinda dhidi ya watumiaji adversarial,
watu ambao ni kujaribu Hack ndani ya mfumo wako.
Watu ambao ni kujaribu kuiba programu yako kwa circumventing baadhi ya kanuni za usajili
wapate kuwa vinginevyo na aina in
Kuangalia mfano huu hapa, ambayo ni tu C code
kwamba ina kazi kuu chini, kwamba wito foo kazi,
na kile ni kupitisha foo? [Mwanafunzi] hoja moja.
>> Single hoja. Hivyo argv [1], ambayo ina maana ya neno kwanza mtumiaji typed
katika mstari amri baada a.out au chochote mpango inaitwa.
Hivyo foo, saa ya juu, inachukua katika * Char, lakini * Char ni yale tu?
Kamba. Kuna kitu kipya hapa, na kamba kwamba ni kiholela kuitwa bar.
Katika mstari huu hapa, char c [12], katika aina ya nusu ya kiufundi Kiingereza, ni nini mstari huu kufanya?
Safu ya -? Nyingine. Nipe safu ya wahusika 12.
Hivyo tupate wito huu buffer. Ni kitaalam inaitwa c, lakini buffer katika programu
njia tu rundo la nafasi kuwa unaweza kuweka baadhi ya mambo in
>> Kisha mwisho, memcpy, tumekuwa si kutumika kabla.
Lakini pengine unaweza nadhani nini inakuwa hivyo. Ni nakala ya kumbukumbu.
Ni nini nini? Naam, ni dhahiri nakala bar, mchango wake, katika c,
lakini tu hadi urefu wa bar.
Lakini kuna mdudu hapa.
Okay, hivyo kitaalam tunatakiwa kufanya strlen (bar) x sizeof (Char), kwamba ni sahihi.
Lakini katika hali mbaya hapa, hebu kudhani kwamba that's - hivyo, okay.
Kisha kuna 2 mende. Hivyo sizeof (Char), wote haki, wacha kufanya hii kidogo pana.
Hivyo sasa bado kuna mdudu, ambayo ni nini?
[Mwanafunzi jibu, unintelligible] >> Check kwa nini? Okay, kwa hivyo sisi inapaswa kuangalia
kwa null, kwa sababu mambo mabaya kutokea wakati pointer yako ni null,
Kwa sababu unaweza kuishia kwenda huko, na unapaswa si milele kuwa kwenda kwa null
na dereferencing kwa operator *.
Basi hiyo ni nzuri, na kile kingine ni sisi kufanya? Kimantiki kuna flaw hapa pia.
[Mwanafunzi jibu, unintelligible]
>> Hivyo kuangalia kama argc ≥ 2?
Okay, hivyo kuna 3 mende katika mpango huu hapa.
Sisi siyo kuangalia kama mtumiaji kweli typed katika kitu chochote ndani ya argv [1], nzuri.
Basi nini mdudu wa tatu? Yeah?
[Mwanafunzi jibu, unintelligible] >> Good.
Hivyo sisi tulienda moja tukio. Sisi implicitly checked usinakili zaidi ya kumbukumbu
kuliko ingekuwa kisichozidi urefu wa bar.
Hivyo kama string mtumiaji typed katika ni 10 wahusika muda mrefu,
hii ni kusema, 'tu nakala wahusika 10.'
Na hiyo ni sawa, lakini kile kama mtumiaji typed katika neno katika kuchochea
kama neno 20 tabia, hii ni, akisema nakala wahusika 20 kutoka bar ndani ya nini?
c, inayojulikana kama buffer yetu, ambayo ina maana tu aliandika data
hadi 8 Byte maeneo ambayo huna mwenyewe,
na humiliki yao kwa maana ya kwamba kamwe zilizotengwa kwao.
Hivyo hii ni nini ujumla inayojulikana kama mashambulizi ya kufurika buffer,
au buffer overrun mashambulizi, na mashambulizi yake kwa maana kwamba kama mtumiaji
au mpango hiyo wito kazi yako ni kufanya hii maliciously,
nini hasa kinatokea ijayo inaweza kuwa mbaya kabisa.
>> Hebu tuangalie picha hii hapa.
Hii picha inawakilisha stack yako ya kumbukumbu.
Na kukumbuka kwamba kila wakati wewe piga kazi,
kupata sura hii kidogo juu ya stack na kisha mwingine na kisha mwingine na kisha mwingine.
Na hivi sasa tumekuwa aina tu ya abstracted hizi mbali kama mistatili
aidha kuna ubaoni au kwenye screen hapa.
Lakini kama sisi zoom katika kwenye moja ya mistatiri hizo,
wakati wewe piga foo kazi, zinageuka kuwa kuna zaidi juu ya stack
ndani ya kwamba sura na kwamba Mstatili
kuliko tu x na y na a na b, kama sisi hawakuwa kuzungumza juu ya kubadilishana.
Ni zinageuka kuwa kuna baadhi ya maelezo ya chini ya ngazi,
kati yao kurudi anuani.
Hivyo zinageuka wakati kuu wito foo, kuu ina kuwajulisha foo
nini anwani kuu ni katika kumbukumbu ya kompyuta.
Kwa sababu vinginevyo, kwa haraka kama foo inafanywa utekelezaji, kama katika kesi hii hapa,
mara moja wewe kufikia hii karibu curly brace mwishoni mwa foo,
jinsi heck haina foo kujua ambapo udhibiti wa mpango zinatakiwa kwenda?
Ni zinageuka kuwa jibu la swali hilo ni katika mstatili kwamba nyekundu hapa.
Hii inawakilisha pointer, na ni juu ya kompyuta kuhifadhi, kwa muda,
juu ya stack kinachojulikana anuani ya kuu ili haraka kama foo inafanywa utekelezaji,
kompyuta anajua wapi na nini line katika kuu ya kwenda nyuma ya.
Kuokolewa frame pointer inahusiana vile vile kwa hii.
Char * bar hapa inawakilisha nini?
Naam, sasa hii sehemu ya bluu hapa ni sura foo, je ni bar?
Okay, kwa hivyo ni bar tu hoja kwa kazi foo.
>> Hivyo sasa tuko nyuma katika picha za ukoo.
Kuna zaidi ya mambo na distractions zaidi juu ya screen
lakini hii mwanga sehemu ya bluu ni nini tumekuwa kuchora ubaoni kwa kitu kama byta.
Hiyo ni sura kwa foo na kitu pekee katika haki sasa ni bar,
ambayo ni hii parameter.
Lakini nini kingine unapaswa kuwa katika stack, kulingana na kanuni hii hapa?
Char c [12]. Hivyo inabidi kuona viwanja 12 ya kumbukumbu,
zilizotengwa kwa ajili ya variable kuitwa c.
Na hakika sisi kufanya kuwa na kwamba kwenye screen.
sana juu kuna c [0], na kisha mwandishi wa mchoro huu
haikujali kuchora wote wa miraba lakini kuna shaka 12 kuna
kwa sababu kama ukiangalia chini kulia, c [11], kama hesabu kutoka 0, ni 12 vile bytes.
Lakini hapa ni tatizo: Katika ambayo mwelekeo ni kuongezeka c?
Aina ya juu chini, sawa? Kama ni kuanza saa ya juu na kukua hadi chini,
haionekani kama sisi kushoto wenyewe Runway sana hapa wakati wote.
Tumekuwa aina ya walijenga wenyewe ndani ya kona,
na kwamba c [11] ni haki juu ya bar, ambayo ni haki ya juu dhidi ya stack pointer frame,
ambayo ni haki juu ya anwani ya kurudi; hakuna nafasi zaidi.
Basi nini maana, basi, kama wewe screw up,
na wewe jaribu kusoma ka 20 ndani ya buffer 12-Byte?
Ambapo ni wale 8 ka ziada kwenda?
Ndani ya kila kitu kingine, ambayo baadhi ni super muhimu.
Na jambo muhimu zaidi, uwezekano, ni sanduku nyekundu huko, kurudi anuani.
Kwa sababu tuseme kwamba wewe ni aidha ajali au adversarially
overwrite ka wale 4, kwamba anuani pointer,
si tu kwa takataka, lakini pamoja na kwamba idadi hiyo hutokea kwa kuwakilisha anuani halisi katika kumbukumbu?
Nini implicaiton, mantiki?
[Mwanafunzi majibu, unintelligible] >> Hasa. Wakati foo anarudi
na hits kwamba brace curly, mpango ni kwenda kuendelea wasimrudie kuu,
itakavyo kurudi chochote anuani ni katika sanduku kwamba nyekundu.
>> Sasa, katika kesi ya usajili circumventing programu,
kile ni anuani ya kwamba ni kuwa alirejea ni kazi
kwamba kwa kawaida anapata kuitwa baada ve kulipwa kwa ajili ya programu na inputted usajili wako code?
Unaweza aina ya hila ya kompyuta katika si kwenda hapa, lakini badala yake, anakwenda hapa.
Au, kama wewe ni kweli wajanja, adui unaweza kweli aina katika saa keyboard,
kwa mfano, si neno halisi, wahusika si 20, lakini nadhani yeye au yeye
aina katika baadhi ya wahusika kwamba kuwakilisha code?
Na si kwenda kuwa C kificho, ni kwenda kuwa wahusika
kwamba kuwakilisha codes mashine binary, 0 na 1 ya.
Lakini tuseme wao uko wajanja kutosha kufanya hivyo, kwa namna fulani kuweka katika haraka GetString
kitu ambacho kimsingi ni compiled kificho,
na mwisho 4 ka overwrite kwamba anuani kurudi, na nini anwani haina pembejeo kwamba kufanya?
Ni maduka katika mstatili hii nyekundu anuani ya Byte kwanza ya buffer.
Hivyo wewe kuwa kweli wajanja, na hii ni mengi ya kesi na makosa
kwa watu mbaya huko nje, lakini kama unaweza kufikiri ni jinsi gani kubwa buffer hii ni,
vile kwamba mwisho ka chache katika pembejeo kwamba wewe kutoa kwa mpango
kutokea kwa kuwa sawa na anuani ya mwanzo wa buffer yako,
unaweza kufanya hivyo. Tukisema, kwa kawaida, hello, na \ 0, kwamba ni nini mwisho juu katika buffer.
Lakini kama tupo zaidi wajanja, na sisi kujaza kwamba buffer na kile tutaweza generically kuwaita mashambulizi kificho,
,,,: Attack, mashambulizi, mashambulizi, mashambulizi, ambapo hii ni tu kitu ambacho hana kitu mbaya.
Naam, kile kinachotokea kama wewe ni kweli wajanja, unaweza kufanya kazi hii:
Katika sanduku nyekundu hapa ni mlolongo wa namba: 80, CO, 35, 08.
Ona kwamba kuwa mechi ya idadi hiyo ni hapa juu.
Ni katika utaratibu reverse, lakini zaidi juu ya wakati kwamba baadhi nyingine.
Ona kwamba anuani hii kurudi imekuwa makusudi ilibadilika
kwa anuani sawa hapa, si anuani ya kuu.
Hivyo kama mtu mbaya ni super smart, yeye au yeye ni kwenda kwa pamoja katika kificho kwamba mashambulizi
kitu kama, 'Futa wote wa files mtumiaji.'
Au 'Nakili nywila,' au 'Fungua akaunti ya mtumiaji kwamba naweza kuingia ndani.'
Chochote wakati wote, na hii ni hatari zote na nguvu ya C.
Kwa sababu unaweza kupata kumbukumbu kupitia kuyatumia
na kwa hiyo unaweza kuandika kitu chochote unataka ndani ya kumbukumbu ya kompyuta.
Unaweza kufanya kompyuta kufanya kitu chochote unataka tu na
baada yake kuruka karibu ndani ya nafasi yake mwenyewe kumbukumbu.
Na hivyo, kwa leo, hivyo wengi mipango na tovuti nyingi kwamba ni kuathirika
chemsha chini ya watu kuchukua faida ya hii.
Na hii inaweza kuonekana kama mashambulizi super-kisasa,
lakini haina daima kuanza kwa njia hiyo.
>> ukweli ni kwamba watu wabaya itakuwa kawaida kufanya ni,
kama ni mpango katika mstari amri au mpango GUI au tovuti,
ni wewe tu kuanza kutoa nonsense.
Wewe aina katika neno kubwa kweli kweli ndani ya shamba tafuta na hit kuingia,
na kusubiri kuona kama shambulio tovuti.
Au wewe kusubiri kuona kama mpango hudhihirisha baadhi ujumbe wa kosa.
Kwa sababu kama wewe kupata bahati, kama mtu mbaya,
na wewe kutoa baadhi ya pembejeo crazy kwamba shambulio mpango,
kwamba maana ya programu Hawakutarajia tabia yako mbaya
ambayo ina maana unaweza pengine, na juhudi za kutosha,
kutosha kesi na makosa, kufikiri jinsi ya kupigana mashambulizi sahihi zaidi.
Hivyo kama sehemu kubwa ya usalama si tu kuepuka mashambulizi haya kabisa, lakini kuchunguza yao
na kwa kweli kuangalia magogo na kuona ni nini pembejeo mambo kuwa watu typed katika tovuti yako.
Nini tafuta masharti kuwa watu typed katika tovuti yako kwa matumaini ya kufurika baadhi buffer?
Na hii yote majipu chini misingi rahisi ya nini safu,
na nini maana ya kutenga na kutumia kumbukumbu?
Na kuhusiana na kwamba, pia, ni hii.
>> Basi hebu tu mtazamo ndani ya gari ngumu bado tena.
Hivyo, unakumbuka kutoka wiki moja au mbili zilizopita kwamba wakati wewe Drag files
kwa yako kusaga bin au takataka unaweza, nini kitatokea?
[Mwanafunzi] Hakuna. >> Yeah, kitu kabisa. Hatimaye kama wewe kukimbia chini
juu ya nafasi disk, Windows au Mac OS itaanza kufuta faili kwa ajili yenu.
Lakini kama wewe Drag kitu huko, basi ni si wakati wote salama.
Yako yote roomate, rafiki au familia ina kufanya ni bonyeza mara mbili, na voilà.
Kuna mafaili yote sketchy kwamba alijaribu kufuta.
Hivyo wengi wetu angalau kujua kwamba una haki bonyeza au kudhibiti click
na tupu takataka, au kitu kama hicho.
Lakini hata hivyo, kwamba hana kabisa kufanya hila.
Kwa sababu kile kinachotokea wakati una faili kwenye gari yako ngumu
kwamba inawakilisha baadhi ya hati neno au baadhi JPEG?
Na hii inawakilisha gari yako ngumu, na hebu sema hii Sliver hapa inawakilisha kwamba faili,
na ni linajumuisha rundo zima la wa 0 na 1 ya.
Nini kinatokea wakati wewe si tu Drag kwamba faili trashcan au kusaga bin,
lakini pia ni tupu?
Aina ya kitu. Ni si kitu kabisa sasa.
Sasa ni kitu tu, kwa sababu kitu kidogo kinachotokea katika fomu ya meza hii.
Hivyo kuna baadhi ya aina ya database au meza ndani ya kumbukumbu ya kompyuta
kwamba kimsingi ina 1 safu kwa majina files,
na 1 safu kwa ajili ya eneo faili, ambapo hii inaweza kuwa mahali 123, tu idadi random.
Hivyo sisi tupate kuwa na kitu kama x.jpg, na mahali 123.
Na kile kinachotokea basi, wakati wewe tupu takataka yako?
Kwamba huenda mbali. Lakini ni nini si kwenda mbali ni ya 0 na 1 ya.
>> Basi nini, basi, uhusiano na pset 4?
Naam, na pset 4, kwa sababu tu tumekuwa ajali erased
kompakt flash kadi kwamba alikuwa zote za picha hizi,
au kwa sababu tu kwa bahati mbaya akawa kupotoshwa,
haina maana kwamba 0 na 1 ni si bado kuna.
Labda wachache wao ni kupotea kwa sababu kitu got kupotoshwa
kwa maana kwamba baadhi ya 0 1 akawa na 1 akawa 0 wa.
Mambo mabaya yanaweza kutokea kwa sababu ya programu Buggy au defective vifaa.
Lakini wengi wa bits wale, labda hata 100% ya nao ni bado kuna,
ni kwamba tu kompyuta au kamera hajui ambapo JPEG 1 ilianza
na ambapo JPEG 2 kuanza, lakini kama wewe, programu,
kujua, na kidogo ya savvy, ambapo wale JPEGs ni nini au kuangalia kama,
unaweza kuchanganua ya 0 na 1 na kusema, 'Ooh. JPEG. Ooh, JPEG. '
Unaweza kuandika mpango na kimsingi tu kwa wakati au kitanzi
kwamba recovers kila mmoja na kila mmoja wa wale files.
Hivyo somo basi, ni kuanza "salama" erasing files yako
kama Ningependa ili kuepuka hili kabisa. Ndiyo?
[Mwanafunzi swali, unintelligible]
>> Je kumbukumbu zaidi kuliko alivyofanya kabla -
Oh! Nzuri swali. Hivyo kwa nini, basi, baada ya kuingia takataka,
haina kompyuta yako kukuambia kwamba una zaidi bure nafasi kuliko wewe alifanya mbele?
Kwa kifupi, kwa sababu ni uongo. Zaidi ya kitaalam, una nafasi zaidi.
Kwa sababu sasa wewe kuwa alisema, unaweza kuweka mambo mengine ambapo faili kwamba mara alikuwa,
lakini hiyo haina maana bits ni kwenda mbali,
na hiyo haina maana bits ni kuwa iliyopita wote 0, kwa mfano, kwa kinga yako.
Kwa kulinganisha, kama wewe "salama" erase files, au kimwili kuharibu kifaa,
kwamba kweli ni njia pekee, wakati mwingine, kuzunguka kwamba.
Hivyo kwa nini sisi kuondoka kwamba kumbuka nusu inatisha, na sisi kuona juu ya Jumatatu.
CS50.TV