[Powered by Google Translate] [TÝDEN 5]
[David J. Malan, Harvard University]
[To je CS50.] [CS50.TV]
[Žena] Lže, o tom, co, já nevím.
[Muž] Tak co víme?
[Žena] To v 9:15, Ray Santoya byl u bankomatu.
[Muž] Takže otázka je, co se dělá v 9:16?
[Žena] Střelba 9 mm na něco.
Možná viděl odstřelovače.
[Muž] Nebo byl s ním pracovat.
[Žena] Počkej. Vraťte se jeden.
[Muž] Co vidíš?
[♫ napínavý music ♫]
[Žena] Přineste mu lícem nahoru. Celá obrazovka.
[Man] Jeho brýle. >> Tam to odraz.
[♫ napínavý music ♫]
[Muž] To je ten Nuevita je baseballový tým. To je jejich logo.
[Žena] A mluví na toho, kdo má na sobě tu bundu.
>> [David Malan] Tak, tohle je CS50 týden 5, a dnes jsme zničit trochu o televizi a film pro vás.
Takže pokaždé, když sledujete pořad, jako je tenhle tady,
a policajti říkají "Můžete vyčistit, že se děje?" nebo "vylepšení,"
není zvýšit v reálném světě.
Ve skutečnosti to, co opravdu dostanete, je trochu něco jako toto.
Já jsem vytáhl jeden z pracovníků fotografií z stránce.
Toto je program s názvem Photoshop. To je 1 z 2 Bowdeny,
Pro 1 ze 3 Bowdeny vlastně, dnes, protože máme paní bowden i zde, s Robem a Pavla.
Ale tady je Rob na obrazovce, a pokud se zoom na uvedeném lesk vždycky měl v očích,
to, co skutečně vidět, že to, co vidíte, je to, co dostanete.
Toto je "lepší," takže "CSI" si to trochu špatně.
Je tu ještě jedna klip, pokud si můžeme vybrat na "CSI" jen trochu déle.
Tenhle je pěkný výraz vyslovit dále, pokud chcete
řádné technické se svými přáteli, když opravdu, říkáš vůbec nic.
>> [Muž] Celé týdny jsem vyšetřoval taxikář Killer vraždy
s určitou morbidní fascinací.
[Žena # 1] To je v reálném čase.
[Woman # 2] Budu vytvořit grafické uživatelské rozhraní pomocí jazyka Visual Basic, uvidíme, jestli můžete sledovat IP adresy.
>> [Malan] Tak audio out of sync stranou, vytváření GUI rozhraní pomocí jazyka Visual Basic
sledovat IP adresy je úplný nesmysl.
V těchto dnech byste se použít Visual Basic,
není potřeba GUI, a IP adresa byla technicky přesný termín.
Takže dávat pozor na to, a jeden z mých oblíbených:
Tohle je trochu tajemný, protože musíte vědět, jiný jazyk.
Tam je jazyk tzv. Objective-C, který je nadmnožinou C.
Což znamená, že je C plus některé další funkce, mezi nimi objektově orientované programování.
A to je jazyk, který Apple popularizoval pro programování iOS.
A tak tady je klip z jiného přehlídky dohromady, z "čísla,"
, že pokud skutečně podíváte pozorně na TiVo a pauzy v pravou chvíli,
uvidíte, že to, co hledají na není to, co je popisováno.
A zkusím jiný audio konektor sem a uvidíme, jestli nemůžeme
udržet zvuk v synchronizaci tentokrát.
Dávám ti "čísla."
>> [Man # 1] Je to 32-bit IPv4 adresy.
[Man # 2] IP, to je Internet. >> Private sítě. Je to Anita je privátní síť.
[Malan] Dobře. To je Objective-C, a to je pro některé dětský zbarvení programu,
jak můžete snad odvodit z názvu proměnné tam.
Tak, že pak byl "Čísla." Takže dnes a tento týden jsme se představit
trochu ze světa forenzní a kontext v problematice proto.
Dnes bude zkrácen přednáška, protože tam je zvláštní událost zde
potom, takže budeme se podívat, a dráždit oba studenty i jejich rodiče dnes
s některými z věcí, které jsou na obzoru.
Mezi nimi, v pondělí, budete mít několik dalších spolužáků.
EDX, Harvard a MIT nových on-line iniciativa pro otevřený výukový
a více, je spuštění na akademické půdě Harvardu v pondělí.
Což znamená, že přijde pondělí se bude mít - jako poslední počtu,
86000 další spolužáci budou sledovat spolu s přednáškami CS50 tyto
a oddíly a návody a problém soupravy.
A jako součást tohoto, stanete se členy inaugurační třídy
CS50 a nyní CS50x.
>> V rámci tohoto, nyní si uvědomit, že dojde k určitým upsides stejně.
Chcete-li získat připraven na to, pro masivní počet studentů,
stačí říct, že i když máme 108 TFS a CAS,
není zcela nejlepší student / učitel poměr, jakmile se dostaneme 80.000 dalšími studenty.
Takže my nebudeme se třídění tolik problém nastavuje ručně.
Takže představil tento týden v problémové sady budou CS50 Check,
který bude příkazového řádku v zařízení
že budete mít po aktualizaci později tento víkend,
a budete moci spustit příkaz, zkontrolovat 50,
na vlastní PSet, a dostanete nějakou zpětnou vazbu o tom, zda je váš program
správné nebo nesprávné podle různých konstrukčních specifikací, které jsme stanovili.
Takže o tom více a problém set specifikace a
se CS50x spolužáci budou používat to stejně.
>> Takže problém set 4 je všechno o kriminalistice.
A tento kousek byl inspirován nějakým reálném životě věci,
přičemž, když jsem byl v postgraduálním studiu, jsem internován na chvíli se
na Middlesex County je okresní zastupitelství dělá forenzní práci
s jejich hlavní forenzní vyšetřovatel, a co to činil
je, myslím, že jsem se zmínil některé poznatky týden minulost, je Mass Státní policie nebo jiných
by přijít, by odejdou věci jako pevné disky a CD a diskety
a podobně, a pak se cílem forenzní období bylo zjistit, zda
tam byl nebo nebyl důkaz nějakého druhu.
To bylo zvláštní Oddělení pro vyšetřování, tak to bylo úřednický zločin,
to bylo více znepokojující druh trestné činnosti,
nic zahrnující nějaký digitálních médií, ukazuje se, že ne, že mnoho lidí
napsat e-mail, "jsem to udělal."
Takže často jsou tyto forenzní vyhledávání neobjevil všude tolik ovoce,
ale někdy lidé by psát takové e-maily.
Takže někdy snaha byla odměněna.
>> Ale vést až k tomuto forenzní PSet, budeme zavádět na PSet 4 bit grafiky.
Takže pravděpodobně vzít tyto věci jako samozřejmost, JPEG, GIF a jako v těchto dnech,
ale pokud si opravdu myslíte, že o tom, obraz, podobně jako obličej Rob,
může být modelován jako sled teček, nebo pixelech.
Nyní, v případě obličeje Robertův, je tu všechny druhy barev,
a začali jsme vidět jednotlivé body, otherwide známé jako obrazové body,
jakmile jsme začali pro přiblížení
Ale pokud budeme zjednodušovat svět o trochu, a prostě říct, že tohle je Rob
v černé a bílé, dobře, k reprezentaci černé a bílé se můžeme jen použít binární.
A pokud budeme používat binární, 1 nebo 0, můžeme vyjádřit stejný obrázek
usmívající se tvář Robertův s tímto vzorem bitů: 11000011 představuje
bílá, bílá, černá, černá, černá, černá, bílá.
A tak to není obrovský skok, pak začít mluvit o barevných fotografiích.
Věci, které byste vidět na Facebooku, nebo se s digitálním fotoaparátem,
ale jistě, pokud jde o barvy, budete potřebovat více bitů.
A docela běžné ve světě fotografií je použít ne 1-bitové barvy,
, protože to naznačuje, ale 24-bitové barvy, kam vlastně získat miliony barev.
Tak jako v případě, kdy jsme se přiblížili na oko Rob,
, který byl libovolný počet milionů různých barevných možností.
>> Takže budeme zavádět to v problému sadě 4 stejně jako v návodu,
která bude dnes v 03:30 místo obvyklých 02:30, protože přednášky pátečním zde.
Ale video bude on-line, jako obvykle, zítra.
Budeme také představí vám do jiného formátu.
Tak to je záměrně chtěl podívat zastrašující na první,
ale to je jen nějaká dokumentace pro struct C.
Ukazuje se, že Microsoft před lety, pomohl popularizovat tento formát,
volal bitmapový formát souboru, BMP, a to super-jednoduchý,
barevné grafické formát souboru, který byl použit na nějakou dobu
a někdy ještě pro tapety na stolní počítače.
Pokud si myslíte, že zpět na systém Windows XP a pahorkatiny a modrou oblohu,
to bylo typicky BMP, nebo bitmapový obraz, a bitmapy
jsou zábavné pro nás, protože mají trochu větší komplexnost.
Není to tak jednoduché, jak tento mřížky 0 a 1 je;
místo, máte věci jako záhlaví na začátku souboru.
Takže jinými slovy, uvnitř. Soubor BMP je celá parta 0 a 1 je,
ale tam je nějaký další 0 a 1 je tam.
A ukázalo se, že to, co jsme pravděpodobně zaujatý za samozřejmost let,
formáty souborů, jako. doc nebo. xls nebo. mp3 nebo. mp4,
bez ohledu na formáty souborů, které jste zvyklí.
No, co to vůbec znamená být formát souboru?
Vzhledem k tomu, na konci dne, všechny tyto soubory používáme mít jen 0 a 1 je
a možná ti 0 a 1 reprezentují, b, c, a to prostřednictvím ASCII nebo podobně,
ale až do konce dne, je to jen 0 a 1 je.
>> Takže lidé jen občas rozhodnou vymyslet nový formát souborů
kde standardizovat co vzory bitů bude skutečně znamenat.
A v tomto případě zde jsou lidé, kteří navrhli bitmapový formát souboru
řekl, že při prvním bajtu v rastrového souboru, jak je označil offset 0, tam,
tam to bude nějaký nesrozumitelné názvy proměnné volal bfType,
který právě zkratka pro bitmapový typ souboru, jaký typ rastrového souboru je.
Můžete usuzovat, snad, ze druhé řady, která ofsetovou 2, byte číslo 2,
má vzor 0 a 1 je, že představuje to, co?
Velikost něco, a pokračuje odtud.
Takže problém sadě 4, budete prošel některé z těchto věcí.
>> Nebudeme skončit starat o všechny z nich, ale všimnete, že začíná být zajímavé
kolem řádku nebo bytového 54, rgbtBlue, zelené a červené.
Pokud jste někdy slyšeli zkratku RGB, červená zelená modrá, to je odkaz na to.
Vzhledem k tomu, že ukáže, že můžete malovat všechny barvy duhy
s nějakou kombinaci červené a modré a zelené.
A ve skutečnosti, může rodiče v pokoji připomenout některé z prvních projektorů.
V těchto dnech, stačí vidět 1 jasné světlo vycházející z objektivu.
Ale zpět v den, jste měli červené čočky, modré čočky, a zelené čočky
a společně se snažily na obrazovku a tvořil barevné fotografie.
A docela často střední školy a vysoké školy by měla ty čočky
někdy-tak-trochu nakřivo, takže jsi trochu vidět dvojité nebo trojité obrázků,
ale že byl nápad. Vy jste měli červené a zelené a modré světlo malování obrazu.
A to stejný princip je použit v počítačích.
>> Takže mezi problémy, pak pro vás v problému nastavení 4
se bude pár věcí, jeden je skutečně změnit velikost obrazu.
Chcete-li ve vzoru 0 a 1 je,
zjistit, které kousky 0 a 1 reprezentují to, co do struktury jako je tento,
a pak zjistit, jak replikovat pixelů: Reds, blues, Zelení
uvnitř tak, že když obraz vypadá to zpočátku může vypadat toto místo po tom.
Mezi další problémy, příliš, bude, že budete předána
forenzní obraz skutečného souboru z digitálního fotoaparátu
a na tomto fotoaparátu, kdysi, byli celá parta fotografií.
Problém je, že jsme omylem vymazány nebo měl obraz poškozen nějak.
Špatné věci se stávají s digitálními fotoaparáty, a tak jsme se rychle kopírovat všechny 0 a 1 je
vypnutí této kartě pro vás, zachránil vše v 1 velkém souboru, a pak budeme předat vám je
v problému nastavit 4 tak, že můžete napsat program v C, s nimiž se zpět
všech těchto JPEG, ideálně.
A ukázalo se, že JPEG, i když jsou poněkud složité formátu,
jsou mnohem složitější, než tento usmívající se tvář zde.
Ukazuje se, že každá JPEG začíná stejnými vzory 0 a 1 je.
Takže pomocí smyčky while nebo pro smyčce nebo podobné,
můžete iterovat přes všechny 0 a 1 je v tomto soudním obrázek
a pokaždé, když vidíte speciální vzor, ​​který je definován v problému setu specifikace,
můžete předpokládat, "Oh, tady je, s velmi vysokou pravděpodobností,
začátek ve formátu JPEG, "a jakmile zjistíte, že stejný vzor,
některé počet bajtů nebo kilobajtů nebo megabyty později,
můžete předpokládat, "Ooh! Zde je druhý JPEG, fotografie jsem si vzal po prvním.
Dovolte mi, abych přestat číst, že první soubor, začněte psát tento nový. "
A výstup vašeho programu pro PSet 4 bude tolik jako 50 JPEG.
A pokud to není 50 JPEG snímků, budete mít trochu smyčky.
Pokud máte nekonečný počet JPEG, máte nekonečnou smyčku.
Takže, i bude docela běžný případ.
To je to, co je na obzoru.
>> Kvíz 0, za námi. Uvědomte si, na můj e-mail, že vždy je tu lidi
kteří jsou oba šťastní, tak nějak neutrální a smutný kolem kvíz 0 hraní.
A prosím, dostat se ke mně, hlavové TFS, Zamyla, vlastní TF
nebo jeden z úřadů, které budete vědět, jestli byste chtěli diskutovat o tom, jak to šlo.
>> Takže zapůsobit na rodiče tady v pokoji,
co je CS50 knihovna? Dobrá práce.
Co je to CS50 knihovna? Jo? [Student odpovědi, nesrozumitelným]
>> Dobře, dobře. Takže je to prewritten soubor kódu, který jsme, personál, napsal,
vám poskytneme, aby některé společné funkce.
Věci jako se mi řetězec, získáte mi int, všechny funkce, které jsou zde uvedeny.
Od teď, začneme skutečně brát tyto vzdělávací kola off.
Takže budeme začít odnést "řetězec" od vás,
které připomínají, byl jen synonymem pro jaký skutečný datový typ? char *.
Takže pro rodiče, to bylo asi - to je dobré, tak char * začneme vidět
na obrazovce o to víc, jak jsme odstranit "řetězec" z našeho slovníku,
alespoň pokud jde o skutečnosti psaní kódu.
Podobně, budeme přestat používat některé z těchto funkcí stejně,
protože naše programy se dostat sofistikovanější
spíše než jen psát programy, které sedí tam s výzvou, bliká,
čeká na uživatele něco psát palců
Získáte vaše vstupy odjinud.
Například, budete si je z řady bitů na místní pevný disk.
Budete místo si v budoucnu od síťového připojení, některé webové stránky někde.
Takže pojďme Sloupněte této vrstvy poprvé, a zvedněte CS50 spotřebiče
a tento soubor s názvem CS50.h, které jste byli ostré včetně týdnů.
>> Ale pojďme skutečně vidět, co je uvnitř toho.
Takže začátek souboru v modré barvě je jen celá parta komentářů,
Informace o záruce a licencování. To je druh společného paradigmatu
v softwaru, protože spousta software v těchto dnech je to, co se nazývá "open source",
což znamená, že někdo napsal kód
a dělal to volně k dispozici, a to nejen spustit a používat,
ale ve skutečnosti číst a měnit a integrovat do své vlastní práce.
Takže to je to, co jste dosud používali, open source software,
i když ve velmi malém formuláře.
Kdybych posunout dolů kolem připomínky, když začneme vidět některé další známé věci.
Takže všimnete nahoře zde, že soubor CS50.h obsahuje spoustu hlavičkových souborů.
Nyní, většina z nich jsme neviděli, ale jeden je
obeznámeni, které z nich jsme viděli, byť krátce, tak daleko?
Jo, standardní knihovny. Stdlib.h má malloc,
takže jakmile jsme začali mluvit o dynamické přidělování paměti,
které se vrátíme na příští týden, stejně, jsme začali včetně tohoto souboru.
Ukazuje se, že bool a pravdivé a falešné dělat ne vlastně existovat v C, samo o sobě,
pokud tento soubor zahrnout zde.
Tak jsme celé týdny, byla včetně standardní bool.h
takže můžete použít pojem typu bool, true nebo false.
Bez toho, měli byste se trochu falešné něj a použít int
a jen svévolně předpokládat, že 0 je false a 1 je pravda.
>> Teď, když jsme přejděte dolů dál, tady je naše definice řetězce.
Ukázalo se, jak jsme řekli dříve, že pokud to * je opravdu nezáleží.
Můžete dokonce mít prostor všude kolem.
My, tento semestr, byly propagovat ji, protože to, aby bylo jasné, že * má co do činění s typem.
Ale uvědomit, stejně jako časté, ne-li o něco běžnější, je to tam
ale funkčně je to totéž.
Ale teď, když jsme si stanoví další, pojďme se podívat na, řekněme, GetInt,
protože jsme použili, že možná dříve, než cokoli jiného tento semestr.
A tady je GetInt. To je to, co?
To je prototypem. Tak často, dali jsme prototypy na vrcholky našich. C soubory,
ale můžete také dát prototypy v hlavičkových souborech,. H soubory,
jako je tento zde, takže když píšete některé funkce
že chcete, aby ostatní lidé mohli používat, což je přesně ten případ s CS50 knihovny,
můžete nejen realizovat své funkce v něco jako CS50.c,
si také dát prototypy nejsou v horní části tohoto souboru, ale v horní části záhlaví souboru,
pak, že hlavičkový soubor je to, co přátelé a kolegové patří,
s ostrými patří ve svém vlastním kódu.
Takže celou tu dobu jste byli, včetně všech těchto prototypů
efektivně v horní části souboru, ale prostřednictvím tohoto ostrý patří mechanismus
že v podstatě kopie a pasty tento soubor do své vlastní.
Nuže, zde je několik poměrně podrobná dokumentace.
>> Jsme skoro za samozřejmé, že GetInt dostane int,
ale to dopadá, že je nějaké rohové případech, že jo?
Co když uživatel zadá do čísla, které je příliš velké?
A quintillion, že prostě nemůže vejít z int?
Co je očekávané chování? No, v ideálním případě, je to předvídatelné.
Takže v tomto případě, pokud si skutečně přečíst drobným písmem,
uvidíte, že v případě, že linka nemůže být přečíst, vrátí INT_MAX.
Nikdy jsme o tom mluvili, ale na základě jeho kapitalizace,
co to je, asi?
Je to konstantní, tak je to nějaký speciální konstanta, která je pravděpodobně prohlášena za
v jednom z těch hlavičkových souborů, které se nachází v výš v souboru,
a INT_MAX je asi něco jako, hrubě, 2 miliardy.
Myšlenka je, že proto, že musíme nějak znamenat, že něco se pokazilo,
jsme, ano, mají 4000000000 čísla máme k dispozici,
negativní 2000000000 až na 2 miliardy, dávat nebo brát.
No, to, co je běžné v programování je budete krást jen jeden z těch čísel.
Možná 0, možná 2 miliardy, možná negativní 2000000000.
Takže budete trávit jeden z vašich možných hodnot, takže můžete zavázat k světu
že když se něco pokazí, budu vraťte tento super-velké hodnoty.
Ale nechcete uživatel zadáním něco mystické, jako "2, 3, 4 ..."
z opravdu velkého počtu, kde se zobecnit místo jako konstanta.
Takže opravdu, pokud jste byli anal v posledních několika týdnech,
kdykoliv zavoláte GetInt, měli byste být kontrola s IF podmínka.
Bylo typ uživatele v INT_MAX, nebo více specificky,
udělal GetInt vrátit INT_MAX? Protože kdyby to udělal,
to vlastně znamená, že ani psát to, něco se pokazilo v tomto případě.
Tak tohle je to, co je všeobecně známo jako "Sentinel" hodnotou, což vyžaduje zvláštní.
>> No, pojďme se nyní v na. C soubory.
Soubor C existuje v zařízení nějakou dobu,
a, ve skutečnosti, přístroj má to předkompilovaný pro vás
do té věci jsme nazvali "objektový kód,"
ale to prostě není jedno, kde to je, protože systém ví,
v tomto případě, je-li, zařízení.
Ale pojďme přejděte nyní GetInt, a uvidíte, jak GetInt působí celou tu dobu.
Takže tady máme podobné poznámky z období před.
Dovolte mi, abych přiblížit jen na kódu části,
a to, co máme na GetInt je následující.
To trvá žádný vstup a vrací hodnotu typu int, while (true), takže máme úmyslné nekonečnou smyčku
ale patrně budeme vypuknout to nějak, nebo se vrátit v rámci tohoto.
Tak uvidíme, jak to funguje. No, zdá se, že používáte GetString
V tomto prvním řádku uvnitř smyčky, 166.
To je nyní dobré praxe, protože za jakých podmínek
by GetString vrátit tuto speciální klíčové slovo, NULL?
Pokud se něco pokazí. Co se může pokazit, když budete volat něco jako GetString?
Jo? [Student odpověď, nesrozumitelné] >> Jo. Takže možná malloc nezdaří.
Někde pod kapotou GetString volá malloc,
které přiděluje paměť, což umožňuje obchod s počítači
všechny znaky, které uživatel zadá do klávesnice.
A předpokládám, že uživatel měl spoustu volného času
a napsal více, například, než 2000000000 znaků.
Více znaků, než v počítači, má dokonce i RAM.
No, GetString musí být schopen znamenat, že na vás,
i když je to super, super neobvyklé rohový případ.
Je nějak být schopen zvládnout, a tak GetString,
pokud bychom se vrátit a přečíst si jeho dokumentaci, se ve skutečnosti, vrátí NULL.
Nyní, když GetString selže vrácením NULL, GetInt bude selhání
vrácením INT_MAX, stejně jako hlídka.
To jsou jen lidské konvence. Jediný způsob, jak by se, že tohle je případ
je tím, čtení dokumentace.
Tak pojďme přejděte na místo, kde int je vlastně GotInt.
>> Takže pokud jsem posunout dolů o kousek dál, v souladu 170 máme komentář nad těmito řádky.
Takže my deklarujeme, v 172, int n a char c, a pak se toto nové funkce
které někteří z vás narazil předtím, ale sscanf.
To je zkratka pro řetězce f skenování.
Jinými slovy, dej mi řetězec a budu testovat to na kusy informací zájmu.
Takže co to znamená? No, předpokládám, že jsem typ v doslova, 1 2 3 na klávesnici,
a poté stiskněte klávesu Enter. Jaký je datový typ 1 2 3 když se vrátil od GetString?
Je to samozřejmě string, ne? Mám řetězec, takže 1 2 3 je opravdu "1 2 3"
s \ 0 na jejím konci. To není int.
To není číslo. Vypadá to jako číslo, ale není to vlastně.
Takže to, co se GetInt udělat? To má skenovat, že řetězec zleva doprava,
1 2 3 \ 0, a nějak převést na skutečné číslo.
Nyní můžete zjistit, jak to udělat.
Pokud si myslíte, že zpět do PSet 2, budete pravděpodobně se trochu pohodlné
s Caesarem nebo Vigenère, takže si můžete iterovat přes řetězec,
můžete převést znaky to ints s výběrem. To je spousta práce.
Proč ne volat funkci jako sscanf, který dělá to pro vás?
Takže sscanf očekává argument, v tomto případě nazývá linka, která je řetězec.
Ty pak zadat v uvozovkách, velmi podobný printf,
co očekávat, že v tomto řetězci?
Co tu říkám je, že jsem očekávat, že desetinné číslo a možná i charakter.
A uvidíme, proč tomu tak je za chvíli.
Ukazuje se, že tento záznam je nyní připomíná věcí
jsme začali mluvit o něco více než před týdnem.
>> Co je a n a a c dělá pro nás? [Student odpovědi, nesrozumitelným]
Jo >>. Je to, že mi dal adresu n a adresu c.
A teď, proč je to tak důležité? No, víte, že s funkcí v C
můžete vždy vrátit hodnotu, nebo žádnou hodnotu.
Můžete se vrátit int, je řetězec, float, char, cokoliv.
Nebo se můžete vrátit void, ale můžete vrátit pouze 1 věc maximálně.
Ale tady chceme sscanf vrátit mi možná int, desetinné číslo,
a také char, a já ti to vysvětlím, proč char za chvíli.
Takže jste skutečně chcete f vrátit 2 věci, to prostě není možné v C.
Takže si můžete obejít, že předáním 2 adresy,
protože jakmile podáš funkci, 2 adresy, co může tato funkce s nimi dělat?
To může napsat na tyto adresy. Můžete použít * operace a "tam", aby každý z těchto adres.
Je to něco tohoto backdoor mechanismu, ale velmi běžné pro změnu hodnot proměnných
ve více než jen 1 místo, v tomto případě 2.
Nyní si všimněte, jsem kontrola == TO1, a pak se vracet n případě, že se ve skutečnosti, vyhodnotí na true.
Tak co se děje? No, technicky vzato, všechno, co jsme opravdu chceme, aby se stalo v GetInt je tento.
Chceme analyzovat, abych tak řekl, chceme číst řetězec
"1 2 3" a je-li to vypadá, jako by to číslo tam,
co říkáte, sscanf udělat, je dát to číslo, 1 2 3, v této proměnné n pro mě.
Proč tedy, dělal jsem to stejně?
Jaká je role také říká, sscanf, můžete také získat postavu zde.
[Student řečeno, nesrozumitelné] >> Není - desetinná čárka by mohlo fungovat.
Pojďme si myslí, že se na chvíli zamyslel. Co ještě?
[Student, nesrozumitelné] >> Tak, dobrá myšlenka, mohlo by to být znak NULL.
Je to ve skutečnosti není, je v tomto případě. Jo? [Student, nesrozumitelným]
>> >> ASCII. Nebo, dovolte mi, abych zobecnit ještě dále.
% C je jen pro kontrolu chyb.
Nechceme tam být znak po čísle,
ale co to mi umožňuje udělat, je následující:
Ukazuje se, že sscanf, kromě ukládání hodnot v N a C, v tomto příkladu zde,
co to také dělá, je, že vrací počet proměnných je kladen hodnoty palců
Takže pokud jste zadat pouze v 1 2 3, pak pouze% d bude odpovídat
a jen n je uložena s hodnotou, jako je 1 2 3 a nic dostane dát do c;
c zůstává odpadky hodnotu, abych tak řekl.
Garbage, protože je to nikdy nebyla inicializována jako nějakou hodnotu.
Takže v tomto případě, sscanf vrátí 1, protože jsem naplněn jeden z těch ukazatelů,
v tom případě, skvělé. Mám int, tak jsem uvolnit linku uvolnit paměť
že GetString skutečně přidělené, a pak jsem se vrátit n.
Else, pokud jste někdy nad tím, kde to zopakovat tvrzení pochází, pochází přímo odsud.
Pokud naopak, píšu v 1 2 3 foo,
jen nějaký náhodný sled textu, sscanf se uvidí,
ooh, číslo, ooh, číslo, ooh, číslo, ooh - f.
A to bude dát 1 2 3 v n.
Je to dám F v C, a pak se vrátit 2.
Takže máme, jen pomocí základní definici chování scanf je,
velmi jednoduchý způsob - dobře, komplex na první pohled, ale na konci dne,
poměrně jednoduchý mechanismus, jak říct, je tam int, a pokud ano, je to, že jediná věc, kterou jsem našel?
A bílý prostor je zde záměrně. Pokud budete číst dokumentaci k sscanf,
to vám řekne, že pokud jsou kousek bílého místa na začátku nebo na konci,
sscanf příliš umožní uživateli, z jakéhokoliv důvodu, hit mezerník 1 2 3, a to bude legitimní.
To nebude křičet na uživatele jen proto, že narazí na mezerník na začátku nebo na konci,
což je jen o málo více uživatelsky příjemný.
>> Jakékoliv dotazy, pak na GetInts? Jo?
[Student otázka, nesrozumitelným]
>> Dobrá otázka. Co když jste právě zadali v char, jako je f, a stiskněte klávesu Enter
aniž by psaní 1 2 3; co si myslíte, že chování této řádek kódu by pak?
Takže sscanf může zahrnovat, že také proto, že v tomto případě,
to nebude vyplňovat n nebo C; to bude místo vrátit 0.
V tom případě, já jsem také chytí, že scénář, neboť předpokládaná hodnota chci je 1.
Chci jen 1 a jen 1 věc být vyplněny. Dobrá otázka. Ostatní?
>> Dobře, tak ať to není projít všechny funkce v zde,
ale ten, který se zdá být, snad, zbývající podíl
je GetString, protože se ukázalo, že GetFloat, GetInt,
GetDouble, GetLongLong všechny Punt spoustu jejich funkčnosti na GetString.
Takže pojďme se podívat na to, jak on je realizován zde.
Tohle vypadá trochu složitější, ale používá stejné základy
že jsme začali mluvit o minulý týden. Takže v GetString,
který nebere argument, podle prázdnoty tady,
a vrátí řetězec, takže jsem se prohlašuje, že řetězec s názvem vyrovnávací paměť.
Já opravdu nevím, co že se to využít k ještě, ale uvidíme.
Vypadá to kapacity, ve výchozím nastavení, 0, není zcela jistý, kde to bude.
Nejste si jisti, co se n to bude být použity pro ještě.
Ale teď je to už trochu zajímavější, tak v souladu 243,
prohlašujeme int c, to je něco jako hloupé detailu.
Char je 8 bitů, a 8 bitů lze uložit, kolik různých hodnot?
256. Problém je, že pokud chcete mít 256 různých znaků ASCII,
které jsou, pokud si myslíte, zpět, a to není něco, co pamatovat.
Ale pokud si myslíte, že zpět do té velké ASCII tabulky jsme měli před několika týdny,
bylo v tomto případě, 128 nebo 256 znaků ASCII.
Použili jsme všechny vzory 0 a 1 se děje.
To je problém, pokud chcete být schopni odhalit chyby.
Protože pokud jste již používáte 256 hodnot pro své postavy,
jste opravdu plánovat dopředu, protože teď nemáte způsob, jak říkat,
"To není legitimní charakter, to je nějaký chybný zpráva."
Takže to, co se svět skutečně je, že používají následující největší hodnotu,
něco jako int, takže máte šílený počet bitů,
32 pro 4 miliardy možných hodnot, takže můžete jednoduše skončit s použitím,
v podstatě, 257 z nich, 1, který má nějaký zvláštní význam jako chyba.
>> Tak uvidíme, jak to funguje. V souladu 246, mám velkou while
že volá fgetc; f znamená soubor, getc, a pak se stdin.
Ukázalo se, že to je jen přesnější způsob, jak říct "čte vstup z klávesnice."
Standardní vstupní prostředky klávesnice, standardní výkon znamená obrazovku,
a standardní chyba, kterou uvidíme v PSet 4, se rozumí obrazovku,
ale zvláštní část obrazovky tak, aby to není sjednocen
s aktuálním výkonem, který jste chtěli vytisknout, ale o tom více v budoucnu.
Takže fgetc jen znamená číst jeden znak z klávesnice, a uložte ho tam, kde?
Uložte jej v C, a potom zkontrolujte, takže jsem jen pomocí nějaké logické spojky zde,
ujistěte se, že není rovno \ n, takže uživatel stiskněte Enter.
Chceme zastavit v tomto bodě, konec smyčky, a také chceme ověřit
pro speciální konstanty, EOF, která, pokud víte, nebo hádat - co to znamená?
Konec souboru. Takže tohle je nesmyslné, protože když píšu na klávesnici,
je to opravdu žádný soubor se na tomto,
ale to je jen trochu generický termín použitý znamenat
že nic jiného se blíží z lidského prsty. EOF. Konec souboru.
Jak stranou, pokud jste někdy hit ovládací d na klávesnici,
ne, že byste ještě, jste hit ovladač C.
Ale kontrola d zasílá tuto speciální konstantní názvem EOF.
>> Takže teď máme jen nějaké dynamické přidělování paměti.
Takže pokud n + 1> kapacita, teď budu vysvětlovat n.
n je jen, kolik bytů je v současné době ve vyrovnávací paměti,
řetězec, který jste v současné době buduje od uživatele.
Pokud máte více znaků ve vašem vyrovnávací paměti, než budete mít kapacitu vyrovnávací paměti,
intuitivně, co musíme udělat, a pak je přidělit větší kapacitu.
Jdu sbírat nad některými aritmetického zde
a soustředit se pouze na tuto funkci zde.
Víte, co malloc je, nebo alespoň obecně známé.
Hádat, co realloc dělá. [Student odpověď, nesrozumitelným]
Jo >>. A není to úplně přidání paměti, že přerozděluje paměti takto:
Pokud je stále ještě prostor na konci řetězce, aby vám více, že paměť
než původně vám dává, pak budete moci dát další paměť.
Takže stačí uvedení řetězců znaků zády k sobě k sobě dozadu.
Ale pokud to není tento případ, protože jste čekali příliš dlouho
a něco náhodně dostal svalil do paměti tam, ale je tu navíc
paměť tady, to je v pořádku. Realloc bude dělat vše těžkou práci za vás,
přesunout řetězec co jste si přečetli v tak daleko odtud,
dal ji tam, a pak vám ještě trochu dráhu v tomto bodě.
Takže s mávnutím ruky, dovolte mi říci, že to, co dělá GetString
je to začíná s malým pufru, možná 1 jednolůžkový charakteru,
a pokud uživatel zadá do 2 znaky, GetString skončí
volání realloc a říká, "Ooh, 1 znak nebylo dost.
Dejte mi 2 znaky. " Pak, pokud budete číst přes logiky smyčky,
to bude říkat, "Ooh, uživatelskou zadaný do 3 znaky.
Dej mi teď není 2, ale 4 znaky, tak mi dej 8, tak mi dej 16 a 32. "
Skutečnost, že jsem Zdvojnásobení kapacity pokaždé
Znamená to, že vyrovnávací paměť není poroste pomalu.
Bude to růst velmi rychlý, a co by mohlo být výhodou, že?
Proč jsem zdvojnásobení velikosti vyrovnávací paměti, a to i přesto, že uživatel
možná stačí 1 další znak z klávesnice?
[Student odpověď, nesrozumitelné]. >> Co je to?
Přesně tak. Nemusíte pěstovat to, jak často.
A to je jen druh - Jsi zajištění své sázky zde.
Myšlenka je, že nechcete volat realloc hodně, protože to má tendenci být pomalé.
Kdykoliv můžete požádat operační systém pro paměti, jak brzy uvidíte,
v budoucnu problém sadě, má tendenci trvat nějaký čas.
Takže je minimalizovat množství času, i když ztrácíme trochu místa, má tendenci být dobrá věc.
>> Ale pokud budeme číst prostřednictvím závěrečné části GetString zde,
a znovu, pochopení každý řádek zde není tak důležitá i dnes.
Ale všimněte si, že nakonec zavolá malloc znovu, a přiděluje
přesně tak, jak mnoho bajtů jako je třeba pro řetězec
a pak vyhodí voláním zdarma, příliš velké vyrovnávací paměti,
pokud to opravdu dostal dvojnásobek příliš mnohokrát.
Stručně řečeno, je to, jak GetString působí celou tu dobu.
Vše, co to dělá je číst jeden znak v době, znovu a znovu a znovu
a pokaždé, když potřebuje nějaký další paměť, požádá operační systém pro něj voláním realloc.
Nějaké otázky? Dobrá.
>> Útok. Nyní, když chápeme ukazatele, nebo alespoň
jsou stále více obeznámeni s ukazateli,
Pojďme zvážit, jak bude celý svět začne hroutit
pokud nemáte dost bránit sporných uživatelů,
lidé, kteří se snaží proniknout do vašeho systému.
Lidé, kteří se snaží ukrást vaše software a tím obejít nějaký registrační kód
že by jinak mohla psát palců
Podívejte se na tento příklad zde, což je jen C kód
, který má funkci hlavního dole, že vyvolá funkci foo,
a co je kolem, aby foo? [Student] jediný argument.
>> Single argument. Takže argv [1], což znamená, že na první slovo uživatel zadaný
na příkazovém řádku po a.out nebo cokoliv jiného, ​​se nazývá program.
Takže foo, v horní části, má v char *, ale char * je přesně to, co?
String. Tam je nic nového, a že řetězec je libovolně se nazývá bar.
V tomto řádku zde, char c [12], v druhu semi-technické angličtiny, co se tento řádek dělá?
Array of -? Postavy. Dej mi řadu 12 znaků.
Tak bychom mohli nazvat tento vyrovnávací paměti. Je to odborně nazývá c, ale vyrovnávací paměť v programování
jen znamená spoustu místa, které si můžete dát nějaké věci dovnitř
>> Pak konečně, memcpy, jsme to používali dříve.
Ale asi tušíte, co to dělá. Je to kopie paměti.
Co to dělá? No, to zřejmě zkopíruje bar, jeho vstup, do c,
ale pouze do délky pruhu.
Ale je tu chyba tady.
Dobře, takže technicky bychom měli opravdu strlen (bar) x sizeof (char), to je pravda.
Ale v nejhorším případě tady, pojďme předpokládat, že to je - tak, v pořádku.
Pak je tu 2 chyby. Takže sizeof (char), v pořádku, pojďme udělat to trochu širší.
Takže teď je tu stále chyba, která je co?
[Student odpověď, nesrozumitelné] >> Ověřit za co? Dobře, takže bychom měli být kontrola
pro NULL, protože špatné věci se stávají, když ukazatel myši je NULL,
Vzhledem k tomu, které by vás mohly skončit jít tam, a neměli byste nikdy jít na NULL
od dereferencing s operátoru *.
Tak to je dobré, a co jiného děláme? Logicky je to chyba i zde.
[Student odpověď, nesrozumitelným]
Takže >> zkontrolovat, zda argc ≥ 2?
Dobře, tak tam je to 3 chyby v tomto programu zde.
Nejsme kontrolovat, zda uživatel skutečně zadali něco do argv [1], dobré.
Takže to, co je třetí chyba? Jo?
[Student odpověď, nesrozumitelné] >> Good.
Takže jsme prověřili jeden scénář. My implicitně kontrolovat nekopírujte více paměti
než by přesáhnout délku tyče.
Takže pokud řetězec uživatel zadali, je 10 znaků,
to říká, "jen zkopírovat 10 znaků."
A to je v pořádku, ale co v případě, že uživatel napsal ve slově na příkazovém řádku
jako 20 znaků slova, to je, řekl kopírování 20 znaků z baru do čeho?
c, jinak známá jako náš pufru, což znamená, že právě napsal dat
na 8 byte místa, která jste nevlastníte,
a nemáte vlastní je v tom smyslu, že jste nikdy přidělené jim.
Tak tohle je to, co je všeobecně známo jako útok přetečení vyrovnávací paměti,
nebo přetečení vyrovnávací paměti útok, a je to útok v tom smyslu, že v případě, že uživatel
nebo program, který volá své funkce dělá to ve zlém úmyslu,
co se vlastně bude dít dál by mohlo být docela špatné.
>> Pojďme se podívat na tento obrázek zde.
Tento obrázek představuje svůj stack paměti.
A připomněl, že pokaždé, když volání funkce,
získáte tento malý rámeček na zásobníku a pak další a pak další a pak další.
A tak daleko jsme to prostě odebrané nich pryč jako obdélníky
buď tam na tabuli nebo na obrazovce zde.
Ale když se přiblížíte na jednom z těchto obdélníků,
Při volání funkce foo, ukázalo se, že je tu více na zásobníku
uvnitř tohoto rámu a tento obdélník
než jen x a y a a b, stejně jako jsme se mluvit o swapu.
Ukazuje se, že tam jsou některé nižší úrovně podrobnosti,
mezi nimi vrátí adresu.
Tak to dopadá, když hlavní volá foo, hlavní je informovat foo
Jaké hlavní je adresa v paměti počítače.
Vzhledem k tomu, jinak, jakmile foo se provádí provedení, jak je v tomto případě zde,
jakmile se dostanete tuto úzkou složená závorka na konci foo,
Jak se to sakra se foo vědět, kde je ovládání programu má jít?
Ukazuje se, že odpověď na tuto otázku, je v tomto červeném obdélníku zde.
To představuje ukazatel, a to až do počítače k ​​uložení, dočasně,
na tzv. zásobníku je adresa hlavní tak, že jakmile foo udělat provádění,
počítač ví, kde a co řádek v hlavní vrátit do.
Uloženo frame pointer týká podobně to.
Char * bar zde představuje, co?
No, teď to modrá část je zde foo je rám, co je bar?
Dobře, tak bar je jen argument k funkci foo.
>> Takže teď jsme zpátky u známého obrázku.
Je tu další věci, a další rozptýlení na obrazovce
ale to světle modrá část je to, co jsme byli kreslení na tabuli něco jako swap.
To je rámec pro foo a jediná věc v tom teď je bar,
který je tento parametr.
Ale co jiného by měl být v zásobníku, podle tohoto kódu zde?
Char c [12]. Takže bychom měli vidět také 12 čtverců paměti,
přidělené proměnné s názvem c.
A skutečně máme, že na obrazovce.
Samém vrcholu je c [0], a poté autor tohoto schématu
nevadilo čerpání všech čtverců, ale je skutečně 12 tam
protože když se podíváte na pravém dolním rohu, c [11], pokud budete počítat od 0, je 12 takových bytů.
Ale tady je problém: V jakém směru je c roste?
Druh shora dolů, ne? Pokud se začíná na vrcholu a roste až na dno,
nevypadá to, že jsme opustili sami moc dráhu tady vůbec.
Jsme trochu maloval sebe do kouta,
a že c [11] je správná proti baru, který je přímo proti ukazatel zásobníku rámu,
která je přímo proti zpáteční adresu, tam to není místo.
Takže to, co je důsledek, pak, pokud jste zpackat,
a zkuste si přečíst 20 bajtů do 12-byte paměti?
Pokud jsou tyto 8 dalších bytů jít?
Uvnitř všechno ostatní, z nichž některé jsou super důležité.
A to nejdůležitější, potenciálně, je červený rámeček tam, zpáteční adresa.
Protože předpokládám, že jste buď náhodně, nebo adversarially
přepište tyto 4 byty, který ukazatel adresu,
nejen s odpadky, ale s číslem, které se stane představují skutečnou adresu v paměti?
Co je implicaiton, logicky?
[Student odpovědi, nesrozumitelné] >> Přesně tak. Při foo vrátí
a hity, které rovnátka kudrnaté, program bude pokračovat nebude pro návrat na hlavní,
to bude návrat na cokoliv adresa je v tomto červeném poli.
>> Nyní, v případě, že obešly softwaru registraci,
co je adresa, která je momentálně vrátil do funkce je
, které se obvykle volána poté, co jste zaplatili za software a zadali vaše registrační kód?
Dalo by se nějak trik počítače do nebudete tady, ale místo toho, jde tady.
Nebo, pokud jste opravdu chytrý, může protivník skutečně zadejte na klávesnici,
Například, není skutečné slovo, ne 20 znaků, ale předpokládám, on nebo ona
Typy některých znaků, které představují kód?
A to nebude C kód, to bude znaky
které představují kódy binární stroje, 0 a 1 je.
Ale předpokládám, že to dost chytrý, aby to udělal, nějak vložit do GetString řádku
něco, co je v podstatě sestaven kód,
a poslední 4 bajty přepsat návratovou adresu, a jakou adresu to, že vstup dělat?
To ukládá v tomto červeném obdélníku adresu prvního bajtu pufru.
Takže budete muset být opravdu chytrý, a to je hodně pokusů a omylů
pro špatné lidi tam venku, ale pokud můžete zjistit, jak velké je toto buffer,
takové, že v posledních několika bytů na vstupu, které poskytují k programu
stalo, že se rovná adresu začátku vašeho pufru,
můžete to udělat. Pokud řekneme, normálně, ahoj, a \ 0, to je to, co skončí ve vyrovnávací paměti.
Ale pokud jsme chytřejší, a naplníme, že vyrovnávací paměť s tím, co budeme obecně říkat útoku kód,
,,,: Attack, útok, útok, útok, kde je to prostě něco, co dělá něco špatného.
No, co se stane, pokud jste opravdu chytří, můžete udělat toto:
V červeném poli zde je sekvence čísel: 80, CO, 35, 08.
Všimněte si, že odpovídá číslo, které je tady.
Je to v obráceném pořadí, ale o tom až někdy jindy.
Všimněte si, že tato zpáteční adresa byla úmyslně změněn
rovnat adresu sem, není adresa main.
Takže pokud ten špatný je super chytrý, on nebo ona bude zahrnovat v tomto útoku kódu
něco jako, "Smazat všechny soubory uživatele."
Nebo "Kopírovat hesla," nebo "Vytvořit uživatelský účet, který mohu přihlásit do."
Cokoli, a to je i nebezpečí a moc C.
Vzhledem k tomu, že máte přístup k paměti prostřednictvím ukazatele
a můžete tedy napsat cokoliv, co chcete do paměti počítače.
Můžete si vytvořit počítač dělat, co chcete jednoduše tím,
co to skákat kolem uvnitř své vlastní paměti.
A tak, až do dnešního dne, a tak mnoho programů a tolik internetové stránky, které jsou napadené
redukuje na lidi, kteří se výhody této.
A to může zdát jako super-sofistikovaný útok,
ale to není vždy začít takhle.
>> Skutečností je, že to, co špatní lidé obvykle udělat, je,
ať už je to program v příkazovém řádku nebo program, GUI nebo webové stránky,
je prostě začít poskytovat nesmysly.
Zadáte v opravdu velkém slovo do vyhledávacího pole a stiskněte klávesu Enter,
a počkat, jestli se stránky havaruje.
Nebo budete čekat, zda se program projeví nějakou chybovou zprávu.
Protože pokud budete mít štěstí, jak špatný člověk,
a poskytnout nějaké šílené vstup, který havaruje program,
to znamená, že programátor nečekali jste špatné chování
což znamená, že můžete pravděpodobně, s dostatkem úsilí,
dost pokusů a omylů, přijít na to, jak vést přesnější útok.
Tak jako tak součástí zabezpečení není jen vyhnout těmto útokům úplně, ale odhalením
a vlastně se dívat na polena a vidět, co bláznivé vstupy mají lidé zadali do své webové stránky.
Jaké vyhledávací termíny jsou lidi napsali do svých webových stránek v naději, že přetékající nějaký buffer?
A to všechno se scvrkává na jednoduchých základech toho, co je pole,
a co to znamená pro přidělování a využívání paměť?
A ve vztahu k, i, je to.
>> Takže řekněme, podíval uvnitř pevného disku ještě jednou.
Takže si vzpomenete z týden nebo dva před, že při přetahování souborů
s vašimi recycle bin, nebo trash can, co se stane?
[Student] Nothing. Jo >>, absolutně nic. Nakonec, pokud se dostanete nízké
místa na disku, bude systém Windows nebo Mac OS začít mazat soubory pro vás.
Ale pokud přetáhnete něco tam, pak to není vůbec bezpečné.
Všechny vaše spolubydlící, přítel nebo člen rodiny musí udělat, je dvakrát klikněte, a voila.
Je tu všechny útržkovité soubory, které jste se pokusili odstranit.
Takže většina z nás alespoň vím, že máte pravým tlačítkem myši nebo regulace kliknutím
a prázdné popelnice, nebo něco takového.
Ale i pak, že není úplně stačit.
Protože to, co se stane, když máte soubor na pevném disku
že reprezentuje nějaký dokument ve Wordu, nebo nějakou JPEG?
A to představuje pevný disk, a řekněme, že tento kousek zde představuje tento soubor,
a to je složeno z celé spoustu 0 a 1 je.
Co se stane, když se nejen přetáhnout tento soubor do koše nebo Koš,
ale také vyprázdnit?
Seřadit z ničeho. Není to vůbec nic teď.
Teď je to prostě nic, protože málo se něco stane v podobě této tabulky.
Takže tam je nějaký druh databáze nebo tabulky uvnitř paměti počítače
že v podstatě má 1 sloupec pro názvy souborů,
a 1 sloupec pro umístění souboru, kde by to mohlo být zařazení 123, jen náhodné číslo.
Takže bychom mohli mít něco jako x.jpg, a umístění 123.
A co se stane pak, když se vyprázdnit své odpadky?
To zmizí. Ale co nezmizí, je 0 a 1 je.
>> Takže to, co je, a pak, připojení k PSet 4?
No, s PSet 4, jen proto, že jsme omylem smazány
Compact Flash karta, která měla všechny tyhle fotky,
nebo jen proto, že smůla stal poškozen,
neznamená, že 0 a 1 je není tam ještě.
Možná některé z nich jsou ztraceny, protože něco dostal poškozen
v tom smyslu, že některé 0 je stal 1 a 1 letech se stal 0 let.
Špatné věci se může stát, protože buggy software nebo vadný hardware.
Ale mnozí z těch kousků, možná i 100% z nich jsou stále tam,
je to jen, že je počítač nebo fotoaparát neví, kde JPEG 1 začalo
a tam, kde JPEG 2 začal, ale pokud budete, programátor,
Víte, s trochou znalostmi, pokud tyto soubory JPEG jsou nebo jak vypadají,
můžete analyzovat 0 a 1 je a řekl, "Ooh. JPEG. Ooh, JPEG. "
Můžete napsat program s v podstatě jen pro nebo while
, který využívá každý a každý jeden z těchto souborů.
Takže poučení pak, je začít "bezpečně" mazání souborů
pokud byste chtěli, aby se zabránilo to úplně. Ano?
[Student otázka, nesrozumitelným]
Už >> více paměti, než dřív a -
Oh! Dobrá otázka. Tak proč, a pak, po vyprázdnění koše,
se počítač vám říct, že máte více volného místa, než jste dělali předtím?
Stručně řečeno, protože lže. Více technicky, máte více prostoru.
Protože teď jste řekl, můžete si dát další věci, kde tento soubor byl kdysi,
ale to neznamená, že bity jdou pryč,
a že neznamená bity jsou změní všechny 0 je, například, pro ochranu.
Naopak, pokud jste "bezpečně" vymazat soubory, nebo fyzicky zničit zařízení,
to je opravdu jediný způsob, někdy kolem toho.
Tak proč bychom odjet na tomto semi-strašidelné poznámky, a uvidíme se v pondělí.
CS50.TV