[Powered by Google Translate] [TÝŽDEŇ 5]
[David J. Malan, Harvard University]
[To je CS50.] [CS50.TV]
[Žena] Klame, o tom, čo, ja neviem.
[Muž] Tak čo vieme?
[Žena] To v 9:15, Ray Santoya bol pri bankomate.
[Muž] Takže otázka je, čo sa robí v 9:16?
[Žena] Streľba 9 mm na niečo.
Možno videl ostreľovača.
[Muž] Alebo bol s ním pracovať.
[Žena] počkaj. Vráťte sa jeden.
[Muž] Čo vidíš?
[♫ napínavý music ♫]
[Žena] Prineste mu lícom nahor. Celá obrazovka.
[Man] Jeho okuliare. >> Tam to odraz.
[♫ napínavý music ♫]
[Muž] To je ten Nuevita je baseballový tím. To je ich logo.
[Žena] A hovorí na toho, kto má na sebe tú bundu.
>> [David Malan] Tak, toto je CS50 týždeň 5, a dnes sme zničiť trochu o televíziu a film pre vás.
Takže zakaždým, keď sledujete reláciu, ako je tento tu,
a policajti hovoria "Môžete vyčistiť, že sa deje?" alebo "vylepšenia,"
nie je zvýšiť v reálnom svete.
V skutočnosti to, čo naozaj dostanete, je trochu niečo ako toto.
Ja som vytiahol jeden z pracovníkov fotografií z stránke.
Toto je program s názvom Photoshop. To je 1 z 2 Bowdeny,
Pre 1 z 3 Bowdeny vlastne, dnes, pretože máme pani bowden aj tu, s Robom a Pavla.
Ale tu je Rob na obrazovke, a ak sa zoom na uvedenom lesk vždy mal v očiach,
to, čo skutočne vidieť, že to, čo vidíte, je to, čo dostanete.
Toto je "lepšia," takže "CSI" si to trochu zle.
Je tu ešte jedna klip, ak si môžeme vybrať na "CSI" len trochu dlhšie.
Tento je pekný výraz vysloviť ďalej, ak chcete
riadne technické so svojimi priateľmi, keď naozaj, hovoríš vôbec nič.
>> [Muž] Celé týždne som vyšetroval taxikár Killer vraždy
s určitou morbídne fascináciou.
[Žena # 1] To je v reálnom čase.
[Woman # 2] Budem vytvoriť grafické užívateľské rozhranie pomocou jazyka Visual Basic, uvidíme, či môžete sledovať IP adresy.
>> [Malan] Tak audio out of sync stranou, vytváranie GUI rozhraní pomocou jazyka Visual Basic
sledovať IP adresy je úplný nezmysel.
V týchto dňoch by ste sa použiť Visual Basic,
nie je potreba GUI, a IP adresa bola technicky presný termín.
Takže dávať pozor na to, a jeden z mojich obľúbených:
Toto je trochu tajomný, pretože musíte vedieť, iný jazyk.
Tam je jazyk tzv Objective-C, ktorý je nadmnožinou C.
Čo znamená, že je C plus niektoré ďalšie funkcie, medzi nimi objektovo orientované programovanie.
A to je jazyk, ktorý Apple popularizoval pre programovanie iOS.
A tak tu je klip z iného prehliadky dohromady, z "čísla,"
, Že ak skutočne pozriete pozorne na TiVo a pauzy v pravú chvíľu,
uvidíte, že to, čo hľadajú na nie je to, čo je popisované.
A skúsim iný audio konektor sem a uvidíme, či nemôžeme
udržať zvuk v synchronizáciu tentoraz.
Dávam ti "čísla."
>> [Man # 1] Je to 32-bit IPv4 adresy.
[Man # 2] IP, to je Internet. >> Private siete. Je to Anita je privátna sieť.
[Malan] Dobre. To je Objective-C, a to je pre niektoré detský sfarbenie programu,
ako môžete snáď odvodiť z názvu premennej tam.
Tak, že potom bol "Čísla." Takže dnes a tento týždeň sme sa predstaviť
trochu zo sveta forenznej a kontext v problematike preto.
Dnes bude skrátený prednáška, pretože tam je zvláštne udalosť tu
potom, takže budeme sa pozrieť, a dráždiť obaja študentov aj ich rodičia dnes
s niektorými z vecí, ktoré sú na obzore.
Medzi nimi, v pondelok, budete mať niekoľko ďalších spolužiakov.
EDX, Harvard a MIT nových on-line iniciatíva pre otvorený výukový
a viac, je spustenie na akademickej pôde Harvarde v pondelok.
Čo znamená, že príde pondelok sa bude mať - ako posledný počtu,
86000 ďalší spolužiaci budú sledovať spolu s prednáškami CS50 tieto
a oddiely a návody a problém súpravy.
A ako súčasť tohto, stanete sa členmi inauguračnej triedy
CS50 a teraz CS50x.
>> V rámci tohto, teraz si uvedomiť, že dôjde k určitým upsides rovnako.
Ak chcete získať pripravený na to, pre masívne počet študentov,
stačí povedať, že aj keď máme 108 TFS a CAS,
nie je úplne najlepší študent / učiteľ pomer, akonáhle sa dostaneme 80.000 ďalšími študentmi.
Takže my nebudeme sa triedenie toľko problém nastavuje ručne.
Takže predstavil tento týždeň v problémovej sady budú CS50 Check,
ktorý bude príkazového riadku v zariadení
že budete mať po aktualizácii neskôr tento víkend,
a budete môcť spustiť príkaz, skontrolovať 50,
na vlastné PSet, a dostanete nejakú spätnú väzbu o tom, či je váš program
správne alebo nesprávne podľa rôznych konštrukčných špecifikácií, ktoré sme stanovili.
Takže o tom viac a problém set špecifikácie a
sa CS50x spolužiaci budú používať to rovnako.
>> Takže problém set 4 je všetko o kriminalistike.
A tento kúsok bol inšpirovaný nejakým reálnom živote veci,
pričom, keď som bol v postgraduálnom štúdiu, som internovaný na chvíľu sa
na Middlesex County je okresné zastupiteľstvo robí forenznej prácu
s ich hlavnou forenznú vyšetrovateľ, a čo to robil
je, myslím, že som sa zmienil niektoré poznatky týždeň minulosť, je Mass Štátna polícia alebo iných
by prísť, by odídu veci ako pevné disky a CD a diskety
a podobne, a potom sa cieľom forenznej obdobie bolo zistiť, či
tam bol alebo nebol dôkaz nejakého druhu.
To bolo zvláštne Oddelenie pre vyšetrovanie, tak to bolo úradnícky zločin,
to bolo viac znepokojujúce druh trestnej činnosti,
nič zahŕňajúce nejaký digitálnych médií, ukazuje sa, že nie, že mnoho ľudí
napísať e-mail, "som to urobil."
Takže často sú tieto forenznej vyhľadávania neobjavil všade toľko ovocia,
ale niekedy ľudia by písať také e-maily.
Takže niekedy snaha bola odmenená.
>> Ale viesť až k tomuto forenznú PSet, budeme zavádzať na PSet 4 bit grafiky.
Takže pravdepodobne vziať tieto veci ako samozrejmosť, JPEG, GIF a ako v týchto dňoch,
ale ak si naozaj myslíte, že o tom, obraz, podobne ako tvár Rob,
môže byť modelovaný ako sled bodiek, alebo pixeloch.
Teraz, v prípade tváre Robertov, je tu všetky druhy farieb,
a začali sme vidieť jednotlivé body, otherwide známe ako obrazové body,
akonáhle sme začali pre priblíženie
Ale ak budeme zjednodušovať svet o trochu, a jednoducho povedať, že toto je Rob
v čiernej a bielej, dobre, k reprezentácii čiernej a bielej sa môžeme len použiť binárne.
A ak budeme používať binárne, 1 alebo 0, môžeme vyjadriť rovnaký obrázok
usmievavá tvár Robertov s týmto vzorom bitov: 11000011 predstavuje
biela, biela, čierna, čierna, čierna, čierna, biela.
A tak to nie je obrovský skok, potom začať hovoriť o farebných fotografiách.
Veci, ktoré by ste vidieť na Facebooku, alebo sa s digitálnym fotoaparátom,
ale iste, pokiaľ ide o farby, budete potrebovať viac bitov.
A celkom bežné vo svete fotografií je použiť nie 1-bitové farby,
, Pretože to naznačuje, ale 24-bitové farby, kam vlastne získať milióny farieb.
Tak ako v prípade, keď sme sa priblížili na oko Rob,
, Ktorý bol ľubovoľný počet miliónov rôznych farebných možností.
>> Takže budeme zavádzať to v probléme sade 4 rovnako ako v návode,
ktorá bude dnes v 03:30 namiesto obvyklých 02:30, pretože prednášky piatkovom tu.
Ale video bude on-line, ako zvyčajne, zajtra.
Budeme tiež predstaví vám do iného formátu.
Tak to je zámerne chcel pozrieť zastrašujúce na prvý,
ale to je len nejaká dokumentácia pre struct C.
Ukazuje sa, že Microsoft pred rokmi, pomohol popularizovať tento formát,
volal bitmapový formát súboru, BMP, a to super-jednoduchý,
farebné grafické formát súboru, ktorý bol použitý na nejakú dobu
a niekedy ešte pre tapety na stolné počítače.
Ak si myslíte, že späť na systém Windows XP a pahorkatiny a modrú oblohu,
to bolo typicky BMP, alebo bitmapový obraz, a bitmapy
sú zábavné pre nás, pretože majú trochu väčšiu komplexnosť.
Nie je to tak jednoduché, ako tento mriežky 0 a 1 je;
miesto, máte veci ako hlavičky na začiatku súboru.
Takže inými slovami, vo vnútri. Súbor BMP je celá partia 0 a 1 je,
ale tam je nejaký ďalší 0 a 1 je tam.
A ukázalo sa, že to, čo sme pravdepodobne zaujatý za samozrejmosť rokov,
formáty súborov, ako. doc alebo. xls alebo. mp3 alebo. mp4,
bez ohľadu na formáty súborov, ktoré ste zvyknutí.
No, čo to vôbec znamená byť formát súboru?
Vzhľadom k tomu, na konci dňa, všetky tieto súbory používame mať len 0 a 1 je
a možno ti 0 a 1 reprezentujú, b, c, a to prostredníctvom ASCII alebo podobne,
ale až do konca dňa, je to len 0 a 1 je.
>> Takže ľudia len občas rozhodnú vymyslieť nový formát súborov
kde štandardizovať čo vzory bitov bude skutočne znamenať.
A v tomto prípade tu, že ľudia, ktorí navrhli bitmapový formát súboru
povedal, že pri prvom bajtu v rastrového súboru, ako ich označil offset 0, tam,
tam to bude nejaký nezrozumiteľné názvy premenné volal bfType,
ktorý práve skratka pre bitmapový typ súboru, aký typ rastrového súboru je.
Môžete usudzovať, snáď, z druhej série, ktorá ofsetovou 2, byte číslo 2,
má vzor 0 a 1 je, že predstavuje to, čo?
Veľkosť niečo, a pokračuje odtiaľ.
Takže problém sade 4, budete prešiel niektoré z týchto vecí.
>> Nebudeme skončiť starať o všetky z nich, ale všimnete, že začína byť zaujímavé
okolo riadku alebo bytového 54, rgbtBlue, zelenej a červenej.
Ak ste niekedy počuli skratku RGB, červená zelená modrá, to je odkaz na to.
Vzhľadom k tomu, že ukáže, že môžete maľovať všetky farby dúhy
s nejakou kombináciu červenej a modrej a zelenej.
A v skutočnosti, môže rodičia v izbe pripomenúť niektoré z prvých projektorov.
V týchto dňoch, stačí vidieť 1 jasné svetlo vychádzajúce z objektívu.
Ale späť v deň, ste mali červené šošovky, modré šošovky, a zelené šošovky
a spoločne sa snažili na obrazovku a tvoril farebné fotografie.
A docela často strednej školy a vysokej školy by mala tie šošovky
niekedy-tak-trochu nakrivo, takže si trochu vidieť dvojité alebo trojité obrázkov,
ale že bol nápad. Vy ste mali červené a zelené a modré svetlo maľovanie obrazu.
A to rovnaký princíp je použitý v počítačoch.
>> Takže medzi problémy, potom pre vás v problému nastavenia 4
sa bude pár vecí, jeden je skutočne zmeniť veľkosť obrazu.
Ak chcete vo vzore 0 a 1 je,
zistiť, ktoré kúsky 0 a 1 reprezentujú to, čo do štruktúry ako je tento,
a potom zistiť, ako sa replikovať pixelov: Reds, blues, Zelení
vnútri tak, že keď obraz vyzerá to spočiatku môže vyzerať toto miesto po tom.
Medzi ďalšie problémy, príliš, bude, že budete odovzdaná
forenznú obraz skutočného súboru z digitálneho fotoaparátu
a na tomto fotoaparáte, kedysi, boli celá partia fotografií.
Problém je, že sme omylom vymazané alebo mal obraz poškodený nejako.
Zlé veci sa stávajú s digitálnymi fotoaparátmi, a tak sme sa rýchlo kopírovať všetky 0 a 1 je
vypnutie tejto karte pre vás, zachránil všetko v 1 veľkom súbore, a potom budeme odovzdávať je na vás
v problému nastaviť 4 tak, že môžete napísať program v C, s ktorými sa späť
všetkých týchto JPEG, ideálne.
A ukázalo sa, že JPEG, aj keď sú trochu zložité formáte,
sú oveľa zložitejšie, než tento usmievavá tvár tu.
Ukazuje sa, že každá JPEG začína rovnakými vzormi 0 a 1 je.
Takže pomocou slučky while alebo pre sláčiky alebo podobné,
môžete určiť iteráciou cez všetky 0 a 1 je v tomto súdnom obrázok
a zakaždým, keď vidíte špeciálny vzor, ​​ktorý je definovaný v problému sete špecifikácie,
môžete predpokladať, "Oh, tu je, s veľmi vysokou pravdepodobnosťou,
začiatok vo formáte JPEG, "a akonáhle zistíte, že rovnaký vzor,
niektoré počet bajtov alebo kilobajtov alebo megabajtovou neskôr,
môžete predpokladať, "Ooh! Tu je druhý JPEG, fotka som sa po prvej.
Dovoľte mi, aby som prestať čítať, že prvý súbor, začnite písať tento nový. "
A výstup programu pre PSet 4 bude toľko ako 50 JPEG.
A ak to nie je 50 JPEG záberov, budete mať trochu slučky.
Ak máte nekonečný počet JPEG, máte nekonečnú slučku.
Takže, aj bude celkom bežný prípad.
To je to, čo je na obzore.
>> Kvíz 0, za nami. Uvedomte si, na môj e-mail, že vždy je tu ľudí
ktorí sú obaja šťastní, tak nejako neutrálne a smutný okolo kvíz 0 hranie.
A prosím, dostať sa ku mne, hlavové TFS, Zamyla, vlastné TF
alebo jeden z úradov, ktoré budete vedieť, či by ste chceli diskutovať o tom, ako to šlo.
>> Takže zapôsobiť na rodičov tu v izbe,
čo je CS50 knižnica? Dobrá práce.
Čo je to CS50 knižnica? Jo? [Študent odpovede, nezrozumiteľným]
>> Dobre, dobre. Takže je to prewritten súbor kódu, ktorý sme, personál, napísal,
vám poskytneme, aby niektoré spoločné funkcie.
Veci ako sa mi reťazec, získate mi int, všetky funkcie, ktoré sú tu uvedené.
Od teraz, začneme skutočne brať tieto vzdelávacie kolesá off.
Takže budeme začať odniesť "reťazec" od vás,
ktoré pripomínajú, bol len synonymom pre aký skutočný dátový typ? char *.
Takže pre rodičov, to bolo asi - to je dobré, tak char * začneme vidieť
na obrazovke o to viac, ako sme odstrániť "reťazec" z nášho slovníka,
aspoň pokiaľ ide o skutočnosti písania kódu.
Podobne, budeme prestať používať niektoré z týchto funkcií rovnako,
pretože naše programy sa dostať sofistikovanejšie
skôr než len písať programy, ktoré sedí tam s riadku bliká,
čaká na užívateľa niečo písať palcov
Získate vaše vstupy odinakiaľ.
Napríklad, budete si ich z radu bitov na lokálny pevný disk.
Budete miesto si v budúcnosti od sieťového pripojenia, niektoré webové stránky niekde.
Takže poďme Zlúpnite tejto vrstvy prvýkrát, a zdvihnite CS50 spotrebiče
a tento súbor s názvom CS50.h, ktoré ste boli ostré vrátane týždňov.
>> Ale poďme skutočne vidieť, čo je vo vnútri toho.
Takže začiatok súboru v modrej farbe je len celá partia komentárov,
Informácie o záruke a licencovania. To je druh spoločného paradigmy
v softvéri, pretože veľa softvér v týchto dňoch je to, čo sa nazýva "open source",
čo znamená, že niekto napísal kód
a robil to voľne k dispozícii, a to nielen spustiť a používať,
ale v skutočnosti čítať a meniť a integrovať do svojej vlastnej práce.
Takže to je to, čo ste doteraz používali, open source softvér,
aj keď vo veľmi malom formulára.
Keby som posunúť dole okolo pripomienky, keď začneme sa pozrieť na nejaké ďalšie známe veci.
Takže všimnete hore tu, že súbor CS50.h obsahuje veľa hlavičkových súborov.
Teraz, väčšina z nich sme nevideli, ale jeden je
oboznámení, ktoré z nich sme videli, hoci krátko, tak ďaleko?
Jo, štandardné knižnice. Stdlib.h má malloc,
takže akonáhle sme začali hovoriť o dynamické prideľovanie pamäti,
ktoré sa vrátime na budúci týždeň, rovnako, sme začali vrátane tohto súboru.
Ukazuje sa, že bool a pravdivé a falošné robiť nie vlastne existovať v C, samo o sebe,
ak tento súbor zahrnúť tu.
Tak sme celé týždne, bola vrátane štandardnej bool.h
takže môžete použiť pojem bool, true alebo false.
Bez toho, mali by ste sa trochu falošné neho a použiť int
a len svojvoľne predpokladať, že 0 je false a 1 je pravda.
>> Teraz, keď sme prejdite dole ďalej, tu je naša definícia reťazca.
Ukázalo sa, ako sme povedali skôr, že ak to * je naozaj nezáleží.
Môžete dokonca mať priestor všade okolo.
My, tento semester, boli propagovať ju, pretože to, aby bolo jasné, že * má čo do činenia s typom.
Ale uvedomiť, rovnako ako časté, ak nie o niečo bežnejšie, je to tam
ale funkčne je to to isté.
Ale teraz, keď sme si stanoví ďalšie, poďme sa pozrieť na, povedzme, GetInt,
pretože sme použili, že možno skôr, ako čokoľvek iného tento semester.
A tu je GetInt. To je to, čo?
To je prototypom. Tak často, dali sme prototypy na vrcholky našich. C súbory,
ale môžete tiež dať prototypy v hlavičkových súboroch,. H súbory,
ako je tento tu, takže keď píšete niektoré funkcie
že chcete, aby ostatní ľudia mohli používať, čo je presne ten prípad s CS50 knižnice,
môžete nielen realizovať svoje funkcie v niečo ako CS50.c,
si tiež dať prototypov nie je v hornej časti tohto súboru, ale v hornej časti hlavičky súboru,
potom, že hlavičkový súbor je to, čo priatelia a kolegovia patrí,
s ostrými patrí vo svojom vlastnom kódu.
Takže celú tú dobu ste boli, vrátane všetkých týchto prototypov
účinne na začiatok súboru, ale prostredníctvom tohto ostrý zahŕňajú mechanizmus
že v podstate kópia a pasty tento súbor do svojej vlastnej.
Nuž, tu je niekoľko pomerne podrobná dokumentácia.
>> Sme skoro za samozrejmé, že GetInt dostane int,
ale to dopadá, že je nejaké rohové prípadoch, že jo?
Čo keď používateľ zadá do položky, ktorá je príliš veľké?
Quintillion, že jednoducho nemôže vojsť z int?
Čo je to očakávané správanie? No, v ideálnom prípade, je to predvídateľné.
Takže v tomto prípade, ak si skutočne prečítať drobným písmom,
uvidíte, že v prípade, že linka nemôže byť prečítať, vráti INT_MAX.
Nikdy sme o tom hovorili, ale na základe jeho kapitalizácie,
čo to je, asi?
Je to konštantný, tak je to nejaký špeciálny konštanta, ktorá je pravdepodobne vyhlásená za
v jednom z tých hlavičkových súborov, ktoré sa nachádza v vyššie v súbore,
a INT_MAX je asi niečo ako, hrubo, 2 miliardy.
Myšlienka je, že preto, že musíme nejako znamenať, že niečo sa pokazilo,
sme, áno, majú 4000000000 čísla máme k dispozícii,
negatívny 2000000000 až na 2 miliardy, dávať alebo brať.
No, to, čo je bežné v programovaní je budete kradnúť len jeden z tých čísel.
Možno 0, možno 2 miliardy, možno negatívne 2000000000.
Takže budete tráviť jeden z vašich možných hodnôt, takže môžete zaviazať k svetu
že keď sa niečo pokazí, budem vráťte tento super-veľké hodnoty.
Ale nechcete užívateľ zadaním niečo mystické, ako "2, 3, 4 ..."
z naozaj veľkého počtu, kde sa zovšeobecniť miesto ako konštanta.
Takže naozaj, ak ste boli anal v posledných niekoľkých týždňoch,
kedykoľvek zavoláte GetInt, mali by ste byť kontrola s IF podmienka.
Bolo typ užívateľa v INT_MAX, alebo viac špecificky,
urobil GetInt vrátiť INT_MAX? Pretože keby to urobil,
to vlastne znamená, že ani písať to, niečo sa pokazilo v tomto prípade.
Tak toto je to, čo je všeobecne známe ako "Sentinel" hodnotou, čo vyžaduje zvláštne.
>> No, poďme sa teraz v na. C súbory.
Súbor C existuje v zariadení nejakú dobu,
a, v skutočnosti, prístroj má to predkompilované pre vás
do tej veci sme nazvali "objektový kód,"
ale to jednoducho nie je jedno, kde to je, pretože systém vie,
v tomto prípade, ak je, zariadenie.
Ale poďme prejdite teraz GetInt, a uvidíte, ako GetInt pôsobí celú tú dobu.
Takže tu máme podobné poznámky z obdobia pred.
Dovoľte mi, aby som priblížiť len na kóde časti,
a to, čo máme na GetInt je nasledujúce.
To trvá žiadny vstup a vracia hodnotu typu int, while (true), takže máme úmyselné nekonečnú slučku
ale zrejme budeme vypuknúť to nejako, alebo sa vrátiť v rámci tohto.
Tak uvidíme, ako to funguje. No, zdá sa, že používate GetString
V tomto prvom riadku vnútri slučky, 166.
To je teraz dobré praxe, pretože za akých podmienok
by GetString vrátiť túto špeciálnu kľúčové slovo, NULL?
Ak sa niečo pokazí. Čo sa môže pokaziť, keď budete volať niečo ako GetString?
Jo? [Študent odpoveď, nezrozumiteľné] >> Jo. Takže možno malloc zlyhá.
Niekde pod kapotou GetString volá malloc,
ktoré prideľuje pamäť, čo umožňuje obchod s počítačmi
všetky znaky, ktoré užívateľ zadá do klávesnice.
A predpokladám, že užívateľ mal veľa voľného času
a napísal viac, napríklad, ako 2000000000 znakov.
Viac znakov, ako v počítači, má dokonca aj RAM.
No, GetString musí byť schopný znamenať, že na vás,
aj keď je to super, super neobvyklé rohový prípad.
Má sa nejako byť schopný zvládnuť, a tak GetString,
ak by sme sa vrátiť a prečítať si jeho dokumentáciu, sa v skutočnosti, vráti NULL.
Teraz, keď GetString zlyhá vrátením NULL, GetInt bude zlyhanie
vrátením INT_MAX, rovnako ako hliadka.
To sú len ľudské konvencie. Jediný spôsob, ako by sa, že toto je prípad
je tým, čítanie dokumentácie.
Tak poďme prejdite na miesto, kde int je vlastne GotInt.
>> Takže ak som posunúť nadol o kúsok ďalej, v súlade 170 máme komentár nad týmito riadkami.
Takže my deklarujeme, v 172, int n a char c, a potom sa toto nové funkcie
ktoré niektorí z vás narazil predtým, ale sscanf.
To je skratka pre reťazce f skenovanie.
Inými slovami, daj mi reťazec a budem testovať to na kusy informácií záujmu.
Takže čo to znamená? No, predpokladám, že som typ v doslova, 1 2 3 na klávesnici,
a potom stlačte kláves Enter. Aký je dátový typ 1 2 3 keď sa vrátil od GetString?
Je to samozrejme string, nie? Mám reťazec, takže 1 2 3 je naozaj "1 2 3"
s \ 0 na jej konci. To nie je int.
To nie je číslo. Vyzerá to ako číslo, ale nie je to vlastne.
Takže to, čo sa GetInt urobiť? To má skenovať, že reťazec zľava doprava,
1 2 3 \ 0, a nejako previesť na skutočné číslo.
Teraz môžete zistiť, ako to urobiť.
Ak si myslíte, že späť do PSet 2, budete pravdepodobne sa trochu pohodlné
s Caesarom alebo Vigenère, takže si môžete určiť iteráciou cez reťazec,
môžete previesť znaky na ints s výberom. To je veľa práce.
Prečo nie volať funkciu ako sscanf, ktorý robí to pre vás?
Takže sscanf očakáva argument, v tomto prípade nazýva linka, ktorá je reťazec.
Tie potom zadať v úvodzovkách, veľmi podobný printf,
čo očakávať, že v tomto reťazci?
Čo tu hovorím je, že som očakávať, že desatinné číslo a možno aj charakter.
A uvidíme, prečo tomu tak je za chvíľu.
Ukazuje sa, že tento záznam je teraz pripomína vecí
sme začali hovoriť o niečo viac než pred týždňom.
>> Čo je a n a a c robí pre nás? [Študent odpovede, nezrozumiteľným]
Jo >>. Je to, že mi dal adresu n a adresu c
A teraz, prečo je to tak dôležité? No, viete, že s funkciou v C
môžete vždy vrátiť hodnotu, alebo žiadnu hodnotu.
Môžete sa vrátiť int, je reťazec, float, char, čokoľvek.
Alebo sa môžete vrátiť void, ale môžete vrátiť iba 1 vec maximálne.
Ale tu chceme sscanf vrátiť mi možno int, desatinné číslo,
a tiež char, a ja ti to vysvetlím, prečo char za chvíľu.
Takže ste skutočne chcete f vrátiť 2 veci, to jednoducho nie je možné v C.
Takže si môžete obísť, že odovzdaním 2 adresy,
pretože akonáhle podáš funkciu, 2 adresy, čo môže táto funkcia s nimi robiť?
To môže napísať na tieto adresy. Môžete použiť * operácie a "tam", aby každý z týchto adries.
Je to niečo tohto backdoor mechanizmu, ale veľmi bežné pre zmenu hodnôt premenných
vo viac ako len 1 miesto, v tomto prípade 2.
Teraz si všimnite, som kontrola == HK1, a potom sa vracať n prípade, že sa v skutočnosti, vyhodnotí na true.
Tak čo sa deje? No, technicky vzaté, všetko, čo sme naozaj chceme, aby sa stalo v GetInt je tento.
Chceme analyzovať, aby som tak povedal, chceme čítať reťazec
"1 2 3" a ak je to vyzerá, ako by to číslo tam,
čo hovoríte, sscanf urobiť, je dať to číslo, 1 2 3, v tejto premennej n pre mňa.
Prečo teda, robil som to rovnako?
Aká je úloha tiež hovorí, sscanf, môžete tiež získať postavu tu.
[Študent povedané, nezrozumiteľné] >> Nie je - desatinná čiarka by mohlo fungovať.
Poďme si myslia, že sa na chvíľu zamyslel. Čo ešte?
[Študent, nezrozumiteľné] >> Tak, dobrá myšlienka, mohlo by to byť znak NULL.
Je to v skutočnosti nie je, je v tomto prípade. Jo? [Študent, nezrozumiteľným]
>> >> ASCII. Alebo, dovoľte mi, aby som upresniť ešte ďalej.
Znak% c je len pre kontrolu chýb.
Nechceme tam byť znak po čísle,
ale čo to mi umožňuje urobiť, je nasledovné:
Ukazuje sa, že sscanf, okrem ukladanie hodnôt v N a C, v tomto príklade tu,
čo to tiež robí, je, že vracia počet premenných je kladený hodnoty palcov
Takže ak ste zadať iba v 1 2 3, potom len% d bude zodpovedať
a len n je uložená s hodnotou, ako je 1 2 3 a nič dostane dať do c;
c zostáva odpadky hodnotu, aby som tak povedal.
Garbage, pretože je to nikdy nebola inicializovaná ako nejakú hodnotu.
Takže v tomto prípade, sscanf vráti 1, pretože som naplnený jeden z tých ukazovateľov,
v tom prípade, skvelé. Mám int, tak som uvoľniť linku uvoľniť pamäť
že GetString skutočne pridelené, a potom som sa vrátiť n
Else, ak ste niekedy nad tým, kde to zopakovať tvrdenie pochádza, pochádza priamo odtiaľto.
Ak naopak, píšem v 1 2 3 foo,
len nejaký náhodný sled textu, sscanf sa uvidí,
ooh, číslo, ooh, číslo, ooh, číslo, ooh - f
A to bude dať 1 2 3 v n
Je to dám F v C, a potom sa vrátiť 2.
Takže máme, len pomocou základnej definícii správanie scanf je,
veľmi jednoduchý spôsob - dobre, komplex na prvý pohľad, ale na konci dňa,
pomerne jednoduché mechanizmus hovorí, je tam int, a ak áno, je, že jediná vec, ktorú som našiel?
A biely priestor je tu zámerne. Ak budete čítať dokumentáciu k sscanf,
to vám povie, že ak sú kúsok bieleho miesta na začiatku alebo na konci,
sscanf príliš umožní užívateľovi, z akéhokoľvek dôvodu, hit medzerník 1 2 3, a to bude legitímne.
To nebude kričať na užívateľa len preto, že narazia na medzerník na začiatku alebo na konci,
čo je len o málo viac užívateľsky príjemný.
>> Akékoľvek otázky, potom na GetInts? Jo?
[Študent otázka, nezrozumiteľným]
>> Dobrá otázka. Čo keď ste práve zadali v char, ako je f, a stlačte klávesu Enter
bez písania 1 2 3; čo si myslíte, že správanie tejto riadok kódu by potom?
Takže sscanf môže zahŕňať, že aj preto, že v tomto prípade,
to nebude vypĺňať n alebo C; to bude miesto vrátiť 0.
V tom prípade, ja som tiež chytí, že scenár, pretože predpokladaná hodnota chcem je 1.
Chcem len 1 a len 1 vec byť vyplnené. Dobrá otázka. Ostatné?
>> Dobre, tak nech to nie je prejsť všetky funkcie v tu,
ale ten, ktorý sa zdá byť, snáď, zostávajúci podiel
je GetString, pretože sa ukázalo, že GetFloat, GetInt,
GetDouble, GetLongLong všetky Punt veľa ich funkčnosti pre GetString.
Takže poďme sa pozrieť na to, ako on je realizovaný tu.
Tohle vyzerá trochu zložitejšie, ale používa rovnaké základy
že sme začali hovoriť o minulý týždeň. Takže v GetString,
ktorý neberie argument, podľa prázdnoty tu,
a vráti reťazec, takže som sa prehlasuje, že reťazec s názvom vyrovnávacia pamäť.
Ja naozaj neviem, čo že sa to využiť na ešte, ale uvidíme.
Vyzerá to kapacity, v predvolenom nastavení, 0, nie je celkom istý, kde to bude.
Nie ste si istí, čo sa n to bude byť použité pre ešte.
Ale teraz je to už trochu zaujímavejšie, tak v súlade 243,
prehlasujeme int c, to je niečo ako hlúpe detailu.
Char je 8 bitov, a 8 bitov možno uložiť, koľko rôznych hodnôt?
256. Problém je, že ak chcete mať 256 rôznych znakov ASCII,
ktoré sú, ak si myslíte, späť, a to nie je niečo, čo pamätať.
Ale ak si myslíte, že späť do tej veľkej ASCII tabuľky sme mali pred niekoľkými týždňami,
bolo v tomto prípade, 128 alebo 256 znakov ASCII.
Použili sme všetky vzory 0 a 1 sa deje.
To je problém, ak chcete byť schopní odhaliť chyby.
Pretože ak ste už používate 256 hodnôt pre svoje postavy,
ste naozaj plánovať dopredu, pretože teraz nemáte spôsob, ako hovoriť,
"To nie je legitímny charakter, to je nejaký chybný správa."
Takže to, čo sa svet skutočne je, že používajú nasledujúce najväčšiu hodnotu,
niečo ako int, takže máte šialený počet bitov,
32 pre 4 miliardy možných hodnôt, takže môžete jednoducho skončiť s použitím,
v podstate, 257 z nich, 1, ktorý má nejaký zvláštny význam ako chyba.
>> Tak uvidíme, ako to funguje. V súlade 246, mám veľkú while
že volá fgetc; f znamená súbor, getc, a potom sa stdin.
Ukázalo sa, že to je len presnejšie spôsob, ako povedať "číta vstup z klávesnice."
Štandardná vstupná prostriedky klávesnica, štandardný výkon znamená obrazovku,
a štandardná chyba, ktorú uvidíme v PSet 4, sa rozumie obrazovku,
ale osobitná časť obrazovky tak, aby to nie je zjednotený
s aktuálnym výkonom, ktorý ste chceli vytlačiť, ale o tom viac v budúcnosti.
Takže fgetc len znamená čítať jeden znak z klávesnice, a uložte ho tam, kde?
Uložte ho v C, a potom skontrolujte, takže som len pomocou nejaké logické spojky tu,
uistite sa, že nie je rovné \ n, takže užívateľ stlačte Enter.
Chceme zastaviť v tomto bode, koniec slučky, a tiež chceme overiť
pre špeciálne konštanty, EOF, ktorá, ak viete, alebo hádať - čo to znamená?
Koniec súboru. Takže toto je nezmyselné, pretože keď píšem na klávesnici,
je to naozaj žiadny súbor sa na tomto,
ale to je len trochu generický termín použitý znamenať
že nič iné sa blíži z ľudského prsty. EOF. Koniec súboru.
Ako stranou, ak ste niekedy hit ovládacie d na klávesnici,
nie, že by ste ešte, ste hit ovládač C.
Ale kontrola d zasiela túto špeciálnu konštantný názvom EOF.
>> Takže teraz máme len nejaké dynamické prideľovanie pamäte.
Takže ak n + 1> kapacita, teraz budem vysvetľovať n
n je len, koľko bytov je v súčasnej dobe vo vyrovnávacej pamäti,
reťazec, ktorý ste v súčasnej dobe buduje od užívateľa.
Ak máte viac znakov vo vašom vyrovnávacej pamäte, než budete mať kapacitu vyrovnávacej pamäte,
intuitívne, čo musíme urobiť, a potom je prideliť väčšiu kapacitu.
Idem zbierať nad niektorými aritmetického tu
a sústrediť sa iba na túto funkciu tu.
Viete, čo malloc je, alebo aspoň všeobecne známe.
Hádať, čo realloc robí. [Študent odpoveď, nezrozumiteľným]
Jo >>. A nie je to úplne pridanie pamäti, že prerozdeľuje pamäti takto:
Ak je ešte stále priestor na konci reťazca, aby vám viac, že ​​pamäť
ako pôvodne vám dáva, potom budete môcť dať ďalšie pamäť.
Takže stačí uvedenie reťazcov znakov chrbtom k sebe, aby sa chrbtom k sebe.
Ale ak to nie je tento prípad, pretože ste čakali príliš dlho
a niečo náhodne dostal zvalil do pamäte tam, ale je tu navyše
pamäť tu, to je v poriadku. Realloc bude robiť všetko ťažkú ​​prácu za vás,
presunúť reťazec čo ste si prečítali v tak ďaleko odtiaľ,
dal ju tam, a potom vám ešte trochu dráhu v tomto bode.
Takže s mávnutím ruky, dovoľte mi povedať, že to, čo robí GetString
je to začína s malým pufru, možno 1 jednoposteľová charakteru,
a pokiaľ užívateľ zadá do 2 znaky, GetString skončí
volanie realloc a hovorí, "Ooh, 1 znak nebolo dosť.
Dajte mi 2 znaky. " Potom, ak budete čítať cez logiky slučky,
to bude hovoriť, "Ooh, používateľskú zadaný do 3 znaky.
Daj mi teraz nie je 2, ale 4 znaky, tak mi daj 8, tak mi daj 16 a 32. "
Skutočnosť, že som Zdvojnásobenie kapacity zakaždým
Znamená to, že vyrovnávacia pamäť nie je porastie pomaly.
Bude to rast veľmi rýchly, a čo by mohlo byť výhodou, že?
Prečo som zdvojnásobenie veľkosti vyrovnávacej pamäte, a to aj napriek tomu, že užívateľ
možno stačí 1 ďalší znak z klávesnice?
[Študent odpoveď, nezrozumiteľné]. >> Čo je to?
Presne tak. Nemusíte pestovať to, ako často.
A to je len druh - Si zabezpečenie svojej stávky tu.
Myšlienka je, že nechcete volať realloc veľa, pretože to má tendenciu byť pomalé.
Kedykoľvek môžete požiadať operačný systém pre pamäte, ako skoro uvidíte,
v budúcnosti problém sade, má tendenciu trvať nejaký čas.
Takže je minimalizovať množstvo času, aj keď strácame trochu miesta, má tendenciu byť dobrá vec.
>> Ale ak budeme čítať prostredníctvom záverečnej časti GetString tu,
a znova, pochopenie každý riadok tu nie je tak dôležitá aj dnes.
Ale všimnite si, že nakoniec zavolá malloc znova, a prideľuje
presne tak, ako veľa bajtov ako je potrebné pre reťazec
a potom vyhodí volaním zadarmo, príliš veľké vyrovnávacej pamäte,
ak to naozaj dostal dvojnásobok príliš mnohokrát.
Stručne povedané, je to, ako GetString pôsobí celú tú dobu.
Všetko, čo to robí je čítať jeden znak v čase, znova a znova a znova
a zakaždým, keď potrebuje nejaký ďalší pamäť, požiada operačný systém pre neho volaním realloc.
Nejaké otázky? Dobrá.
>> Útok. Teraz, keď chápeme ukazovatele, alebo aspoň
sú stále viac oboznámení s ukazovateľmi,
Poďme zvážiť, ako celý svet začne rúcať
ak nemáte dosť brániť sporných užívateľov,
ľudia, ktorí sa snažia preniknúť do vášho systému.
Ľudia, ktorí sa snažia ukradnúť vaše softvér a tým obísť nejaký registračný kód
že by inak mohla písať palcov
Pozrite sa na tento príklad tu, čo je len C kód
, Ktorý má funkciu hlavného dole, že vyvolá funkciu foo,
a čo je okolo, aby foo? [Študent] jediný argument.
>> Single argument. Takže ArGV [1], čo znamená, že prvé slovo používateľ zadaný
na príkazovom riadku po a.out alebo čokoľvek iné, sa nazýva program.
Takže foo, v hornej časti, má v char *, ale char * je presne to, čo?
String. Tam je nič nové, a že reťazec je ľubovoľne sa nazýva bar.
V tomto riadku tu, char c [12], v druhu semi-technickej angličtiny, čo sa tento riadok robí?
Array of -? Postavy. Daj mi rad 12 znakov.
Tak by sme mohli nazvať tento vyrovnávacej pamäte. Je to odborne nazýva c, ale vyrovnávaciu pamäť v programovaní
len znamená veľa miesta, ktoré si môžete dať nejaké veci dovnútra
>> Potom konečne, memcpy, sme to používali skôr.
Ale asi tušíte, čo to robí. Je to kópia pamäte.
Čo to robí? No, to zrejme skopíruje bar, jeho vstup, do c,
ale len do dĺžky pruhu.
Ale je tu chyba tu.
Dobre, takže technicky by sme mali naozaj strlen (bar) x sizeof (char), to je pravda.
Ale v najhoršom prípade tu, poďme predpokladať, že to je - tak, v poriadku.
Potom je tu 2 chyby. Takže sizeof (char), v poriadku, poďme urobiť to trochu širšie.
Takže teraz je tu stále chyba, ktorá je čo?
[Študent odpoveď, nezrozumiteľné] >> Overiť za čo? Dobre, takže by sme mali byť kontrola
pre NULL, pretože zlé veci sa stávajú, keď ukazovateľ myši je NULL,
Vzhľadom k tomu, ktoré by vás mohli skončiť ísť tam, a nemali by ste nikdy ísť na NULL
od dereferencing s operátoru *.
Tak to je dobré, a čo iného robíme? Logicky je to chyba aj tu.
[Študent odpoveď, nezrozumiteľným]
Takže >> skontrolovať, či argc ≥ 2?
Dobre, tak tam je to 3 chyby v tomto programe tu.
Nie sme skontrolovať, či užívateľ skutočne zadali niečo do ArGV [1], dobré.
Takže to, čo je tretia chyba? Jo?
[Študent odpoveď, nezrozumiteľné] >> Good.
Takže sme preverili jeden scenár. My implicitne kontrolovať nekopírujte viac pamäte
ako by presiahnuť dĺžku tyče.
Takže ak reťazec užívateľ zadali, je 10 znakov,
to hovorí, "len skopírovať 10 znakov."
A to je v poriadku, ale čo v prípade, že užívateľ napísal v slove na príkazovom riadku
ako 20 znakov slová, to je, povedal kopírovanie 20 znakov z baru do čoho?
c, inak známa ako náš pufra, čo znamená, že práve napísal dát
na 8 byte miesta, ktoré ste nevlastníte,
a nemáte vlastný je v tom zmysle, že ste nikdy pridelené im.
Tak toto je to, čo je všeobecne známe ako útok pretečeniu vyrovnávacej pamäte,
alebo pretečeniu vyrovnávacej pamäte útok, a je to útok v tom zmysle, že v prípade, že užívateľ
alebo program, ktorý volá svoje funkcie robí to v zlom úmysle,
čo sa vlastne bude diať ďalej by mohlo byť docela zlé.
>> Poďme sa pozrieť na tento obrázok tu.
Tento obrázok predstavuje svoj stack pamäte.
A pripomenul, že zakaždým, keď volanie funkcie,
získate tento malý rámček na zásobníku a potom ďalšie a potom ďalšie a potom ďalšie.
A tak ďaleko sme to jednoducho odobraté nich preč ako obdĺžniky
buď tam na tabuli alebo na obrazovke tu.
Ale keď sa priblížite na jednom z týchto obdĺžnikov,
Pri volaní funkcie foo, ukázalo sa, že je tu viac na zásobníku
vnútri tohto rámu a tento obdĺžnik
ako len x a y a a b, rovnako ako sme sa hovoriť o swapu.
Ukazuje sa, že tam sú niektoré nižšie úrovne podrobnosti,
medzi nimi vráti adresu.
Tak to dopadá, keď hlavné volá foo, hlavné je informovať foo
Aké hlavné je adresa v pamäti počítača.
Vzhľadom k tomu, inak, akonáhle foo sa vykonáva prevedení, ako je v tomto prípade tu,
akonáhle sa dostanete túto úzku zložená zátvorka na konci foo,
Ako to sakra to foo vedieť, kde je ovládanie programu má ísť?
Ukazuje sa, že odpoveď na túto otázku, je v tomto červenom obdĺžniku tu.
To predstavuje ukazovateľ, a to až do počítača na uloženie, dočasne,
na tzv zásobníka je adresa hlavnej tak, že akonáhle foo urobiť vykonávania,
počítač vie, kde a čo riadok v hlavnom ísť späť.
Uložené frame pointer týka podobne to.
Char * bar tu predstavuje, čo?
No, teraz to modrá časť je tu foo je rám, čo je bar?
Dobre, tak bar je len argument k funkcii foo.
>> Takže teraz sme späť u známeho obrázku.
Je tu ďalšie veci, a ďalšie rozptýlenie na obrazovke
ale to svetlo modrá časť je to, čo sme boli kreslenie na tabuľu niečo ako swap.
To je rámec pre foo a jediná vec v tom teraz je bar,
ktorý je tento parameter.
Ale čo iného by mal byť v zásobníku, podľa tohto kódu tu?
Char c [12]. Takže by sme mali vidieť aj 12 štvorcov pamäti,
pridelené premenné s názvom c
A skutočne máme, že na obrazovke.
Samom vrchole je c [0], a potom autor tejto schémy
nevadilo čerpanie všetkých štvorcov, ale je skutočne 12 tam
pretože keď sa pozriete na pravom dolnom rohu, c [11], ak budete počítať od 0, je 12 takých bytov.
Ale tu je problém: V akom smere je c rastie?
Druh zhora dole, nie? Ak sa začína na vrchole a rastie až na dno,
nevyzerá to, že sme opustili sami moc dráhu tu vôbec.
Sme trochu maľoval seba do kúta,
a že c [11] je správna proti baru, ktorý je priamo proti ukazovateľ zásobníka rámu,
ktorá je priamo proti spiatočnú adresu, tam to nie je miesto.
Takže to, čo je dôsledok, potom, ak ste zpackat,
a skúste si prečítať 20 bajtov do 12-byte pamäti?
Ak sú tieto 8 ďalších bytov ísť?
Vnútri všetko ostatné, z ktorých niektoré sú super dôležité.
A to najdôležitejšie, potenciálne, je červený rámček tam, spiatočná adresa.
Pretože predpokladám, že ste buď náhodne, alebo adversarially
prepíšte tieto 4 byty, ktorý ukazovateľ adresu,
nielen s odpadkami, ale s číslom, ktoré sa stane predstavujú skutočnú adresu v pamäti?
Čo je implicaiton, logicky?
[Študent odpovede, nezrozumiteľné] >> Presne tak. Pri foo vráti
a hity, ktoré rovnátka kučeravé, program bude pokračovať nebude pre návrat na hlavnú,
to bude návrat na čokoľvek adresa je v tomto červenom poli.
>> Teraz, v prípade, že obišli softvéru registráciu,
Aká je adresa, ktorá je momentálne vrátil do funkcie je
, Ktoré sa obvykle volaná potom, čo ste zaplatili za softvér a zadali vaše registračný kód?
Dalo by sa nejako trik počítač do nebudete tu, ale namiesto toho, ide tu.
Alebo, ak ste naozaj šikovný, môže protivník skutočne zadajte na klávesnici,
Napríklad, nie je skutočné slovo, nie 20 znakov, ale predpokladám, on alebo ona
Typy niektorých znakov, ktoré predstavujú kód?
A to nebude C kód, to bude znaky
ktoré predstavujú kódy binárne stroje, 0 a 1 je.
Ale predpokladám, že to dosť šikovný, aby to urobil, nejako vložiť do GetString riadku
niečo, čo je v podstate zostavený kód,
a posledné 4 bajty prepísať návratovú adresu, a akú adresu to, že vstup robiť?
Ukladá v tomto červenom obdĺžniku adresu prvého bajtu vyrovnávacej pamäte.
Takže budete musieť byť naozaj šikovný, a to je veľa pokusov a omylov
pre zlé ľudí tam vonku, ale ak môžete zistiť, aké veľké je toto buffer,
také, že v posledných niekoľkých bytov na vstupe, ktoré poskytujú k programu
stalo, že sa rovná adresu začiatku vášho pufra,
môžete to urobiť. Ak povieme, normálne, ahoj, a \ 0, to je to, čo skončí vo vyrovnávacej pamäti.
Ale ak sme múdrejší, a naplníme, že vyrovnávacia pamäť s tým, čo budeme všeobecne hovoriť útoku kód,
,,,: Attack, útok, útok, útok, kde je to proste niečo, čo robí niečo zlé.
No, čo sa stane, ak ste naozaj chytrí, môžete urobiť toto:
V červenom poli tu je sekvencia čísel: 80, CO, 35, 08.
Všimnite si, že zodpovedá číslo, ktoré je tu.
Je to v obrátenom poradí, ale o tom až niekedy inokedy.
Všimnite si, že táto spiatočná adresa bola úmyselne zmenený
rovnať adresu sem, nie je adresa main.
Takže ak ten zlý je super šikovný, on alebo ona bude zahŕňať v tomto útoku kódu
niečo ako, "Zmazať všetky súbory používateľa."
Alebo "Kopírovať hesla," alebo "Vytvoriť užívateľský účet, ktorý môžem prihlásiť do."
Čokoľvek, a to je aj nebezpečenstvo a moc C.
Vzhľadom k tomu, že máte prístup k pamäti prostredníctvom ukazovateľa
a môžete teda napísať čokoľvek, čo chcete do pamäte počítača.
Môžete si vytvoriť počítač robiť, čo chcete jednoducho tým,
čo to skákať okolo vnútri svojej vlastnej pamäte.
A tak, až do dnešného dňa, a tak veľa programov a toľko internetové stránky, ktoré sú napadnuté
redukuje na ľudí, ktorí sa výhody tejto.
A to môže zdať ako super-sofistikovaný útok,
ale to nie je vždy začať takhle.
>> Skutočnosťou je, že to, čo zlí ľudia zvyčajne urobiť, je,
či už je to program v príkazovom riadku alebo program, GUI alebo webové stránky,
je jednoducho začať poskytovať nezmysly.
Zadáte v naozaj veľkom slovo do vyhľadávacieho poľa a stlačte klávesu Enter,
a počkať, či sa stránky havaruje.
Alebo budete čakať, či sa program prejaví nejakú chybovú správu.
Pretože ak budete mať šťastie, ako zlý chlap,
a poskytnúť nejaké šialené vstup, ktorý havaruje program,
to znamená, že programátor nečakali ste zlé správanie
čo znamená, že môžete pravdepodobne, s dostatkom úsilie,
dosť pokusov a omylov, prísť na to, ako viesť presnejšie útok.
Tak ako tak súčasťou zabezpečenia nie je len vyhnúť týmto útokom úplne, ale zachytí je
a vlastne sa pozerať na polená a vidieť, čo bláznivé vstupy majú ľudia zadali do svojej webovej stránky.
Aké vyhľadávacie termíny sú ľudia napísali do svojich webových stránok v nádeji, že pretekajúca nejaký buffer?
A to všetko sa scvrkáva na jednoduchých základoch toho, čo je pole,
a čo to znamená pre prideľovanie a využívanie pamäť?
A vzťahujúce sa k to taky, je to.
>> Takže povedzme, pozrel vnútri pevného disku ešte raz.
Takže si spomeniete z týždeň alebo dva pred, že pri preťahovaní súborov
s vašimi recycle bin, alebo trash can, čo sa stane?
[Študent] Nothing. Jo >>, absolútne nič. Nakoniec, ak sa dostanete nízke
miesta na disku, bude systém Windows alebo Mac OS začať mazať súbory pre vás.
Ale ak pretiahnete niečo tam, potom to nie je vôbec bezpečné.
Všetky vaše spolubývajúci, priateľ alebo člen rodiny musí urobiť, je dvakrát kliknite, a voila.
Je tu všetky útržkovité súbory, ktoré ste sa pokúsili odstrániť.
Takže väčšina z nás aspoň vedieť, že budete musieť pravým tlačidlom myši alebo ovládať tlačidlom
a prázdne popolnice, alebo niečo také.
Ale aj potom, že nie je úplne stačiť.
Pretože to, čo sa stane, keď máte súbor na pevnom disku
že reprezentuje nejaký dokument vo Worde, alebo nejakú JPEG?
A to predstavuje pevný disk, a povedzme, že tento kúsok tu predstavuje tento súbor,
a to je zložené z celej veľa 0 a 1 je.
Čo sa stane, keď sa nielen pretiahnuť tento súbor do koša alebo Kôš,
ale aj vyprázdniť?
Zoradiť z ničoho. Nie je to vôbec nič teraz.
Teraz je to proste nič, pretože málo sa niečo stane v podobe tejto tabuľky.
Takže tam je nejaký druh databázy alebo tabuľky vnútri pamäti počítača
že v podstate má 1 stĺpec pre názvy súborov,
a 1 stĺpec pre umiestnenie súboru, kde by to mohlo byť zaradenie 123, len náhodné číslo.
Takže by sme mohli mať niečo ako x.jpg, a umiestnenie 123.
A čo sa stane potom, keď sa vyprázdniť svoje odpadky?
To zmizne. Ale čo nezmizne, je 0 a 1 je.
>> Takže to, čo je, a potom, pripojenie k PSet 4?
No, s PSet 4, len preto, že sme omylom zmazané
Compact Flash karta, ktorá mala všetky tieto fotky,
alebo len preto, že smola stal poškodený,
neznamená, že 0 a 1 je nie je tam ešte.
Možno niektoré z nich sú stratené, pretože niečo dostal poškodený
v tom zmysle, že niektoré 0 je stal 1 a 1 rokoch sa stal 0 rokov.
Zlé veci sa môže stať, pretože buggy softvér alebo chybný hardware.
Ale mnohí z tých kúskov, možno aj 100% z nich sú stále tam,
je to len, že počítač alebo fotoaparát nevie, kde JPEG 1 začalo
a tam, kde JPEG 2 začal, ale ak budete, programátor,
Viete, s trochou znalosťami, pokiaľ tieto súbory JPEG sú alebo ako vyzerajú,
môžete analyzovať 0 a 1 je a povedal, "Ooh. JPEG. Ooh, JPEG. "
Môžete napísať program s v podstate len pre alebo while
, Ktorý využíva každý a každý jeden z týchto súborov.
Takže lekcie potom, je začať "bezpečne" mazanie súborov
ak by ste chceli, aby sa zabránilo to úplne. Áno?
[Študent otázka, nezrozumiteľným]
Už >> viac pamäte, než predtým a -
Oh! Dobrá otázka. Tak prečo, a potom, po vyprázdnení koša,
sa počítač vám povedať, že máte viac voľného miesta, ako ste robili predtým?
Stručne povedané, pretože klame. Viac technicky, máte viac priestoru.
Pretože teraz ste povedal, môžete si dať ďalšie veci, kde tento súbor bol kedysi,
ale to neznamená, že bity idú preč,
a že neznamená bity sú zmení všetky 0 je, napríklad, pre ochranu.
Naopak, ak ste "bezpečne" vymazať súbory, alebo fyzicky zničiť zariadenia,
to je naozaj jediný spôsob, niekedy okolo toho.
Tak prečo by sme odísť na tomto semi-strašidelné poznámky, a uvidíme sa v pondelok.
CS50.TV