[Powered by Google Translate] [VIIKKO 5]
[David J. Malan, Harvardin yliopisto]
[Tämä on CS50.] [CS50.TV]
[Nainen] Hän valehtelee, mitä, en tiedä.
[Mies] Mitä siis tiedämme?
[Nainen] että 9:15, Ray Santoya oli ATM.
[Mies] Joten kysymys on, mitä hän teki klo 09:16?
[Nainen] Shooting 9 mm jotain.
Ehkä hän näki ampuja.
[Mies] Tai hän oli työskennellyt hänen kanssaan.
[Nainen] Odota. Mene taaksepäin.
[Mies] Mitä näet?
[♫ Suspenseful musiikkia ♫]
[Nainen] Tuo hänen kasvonsa ylöspäin. Koko näyttö.
[Man] Hänen lasit. >> On heijastus.
[♫ Suspenseful musiikkia ♫]
[Mies] Tuo Nuevita n baseball-joukkue. Se on heidän logo.
[Nainen] Ja hän puhuu kuka on päällään se takki.
>> [David Malan] Eli tämä on CS50 viikolla 5, ja tänään pilata hieman televisio ja elokuva sinulle.
Joten kun olet katsomassa näyttää kuin tämä tässä,
ja kytät sanoa "Voitteko siivota?" tai "Paranna"
ei lisätä reaalimaailmassa.
Itse asiassa, mitä todella saada on vähän jotain tällaista.
Olen revitä yksi henkilöstön valokuvat sivulta.
Tämä on ohjelma nimeltä Photoshop. Tämä on 1 2 Bowdens,
1 3 Bowdens oikeastaan ​​tänään, koska meillä on rouva Bowden täällä hyvin, Rob ja Paul.
Mutta tässä on Rob ruudulla, ja jos me zoomata että kimaltaa hän on aina ollut hänen silmiinsä,
mitä itse nähdä, että mitä näet on mitä saat.
Tämä on "tehostettu", joten "CSI" on se vähän väärin.
On yksi toinen leike, jos voimme kiusata "CSI" vain vähän kauemmin.
Tämä on kiva lause lausua vastedes, jos haluat
vankka tekninen ystäviesi kanssa, kun oikeasti, sanot mitään.
>> [Mies] Viikkoja Olen tutkinut Cabby Killer murhat
tietyllä viehtymyksen.
[Nainen # 1] Tämä on reaaliajassa.
[Nainen # 2] Tulen luoda graafinen käyttöliittymä Visual Basic, katso jos voin seurata IP-osoitteen.
>> [Malan] Eli ääni epätahtiin syrjään, luoda graafinen käyttöliittymä Visual Basic
seurata IP-osoite on täyttä hölynpölyä.
Nykyään et käytä Visual Basic,
ei ole tarvetta GUI, ja IP-osoite oli teknisesti tarkka termi.
Joten pidä silmällä näitä, ja yksi suosikeistani:
Tämä yksi on hieman vaikeaselkoinen, koska sinun täytyy tietää eri kieltä.
On kielellä kutsutaan Objective-C, joka on pääjoukko C
Mikä tarkoittaa se C plus joitakin lisäominaisuuksia, joiden joukossa olio-ohjelmointi.
Ja tämä on kieli, että Apple on suosituksi iOS ohjelmointia.
Ja niin tässä leikkeen eri näyttelyssä kokonaan, mistä "Numbers"
että jos todella katsot tarkkaan teidän TiVo ja tauko oikealla hetkellä,
näet, että mitä he etsivät at ei ole aivan mitä ollaan kuvattu.
Ja haluan kokeilla erilaisia ​​ääniliitäntä tänne ja katso jos voimme olla
Pidä audio sync tällä kertaa.
Annan teille "Numbers".
>> [Man # 1] Se on 32-bittinen IPv4-osoite.
[Man # 2] IP, se on internet. >> Yksityinen verkko. Se on Anita yksityisen verkon.
[Malan] Okei. Tämä on Objective-C, ja se on noin lastenhuoneeseen väritys ohjelma,
kuten voitte ehkä päätellä muuttujan nimi siellä.
Niin, että silloin oli "Numbers". Joten tänään ja tällä viikolla esittelemme
hieman maailman Forensics ja asiayhteydestä ongelmien vuoksi.
Tänään on lyhennetty luento, koska siellä on erityinen tapahtuma täällä
myöhemmin, joten me kurkistaa, ja kammata sekä opiskelijoiden ja heidän vanhemmilleen tänään
joitakin asioita, jotka ovat näköpiirissä.
Niistä, kuten maanantaina, sinulla on muutama enemmän luokkatoverit.
EDX, Harvardin ja MITs uusia online-aloite avoimen kurssimateriaalin
ja enemmän, on käynnisti Harvardin kampuksella maanantaina.
Mikä tarkoittaa tulevat maanantai sinulla on - kuten viime count,
86000 ylimääräisiä luokkatoverit seuraan yhdessä CS50 luennot
ja osat ja walkthroughs ja ongelma sarjaa.
Ja osana tätä, sinun tulee jäseniä avajais luokan
CS50 ja nyt CS50x.
>> Osana tätä nyt, ymmärtävät, että on jonkin verran upsides samoin.
Saada valmis tähän, sillä valtava määrä opiskelijoita,
on riittävää todeta, että vaikka meillä on 108 TF ja CAS,
ei aivan paras oppilas / opettaja-suhde, kun osuimme 80000 muuta opiskelijaa.
Eli emme aio olla luokittelu niin monta ongelmaa asettaa manuaalisesti.
Joten esitteli tällä viikolla Harjoitus on CS50 Tarkista,
joka tulee olemaan komentorivi sisällä laitteen
että saat kun päivittää myöhemmin tänä viikonloppuna,
ja voit ajaa komennon, tarkista 50,
oman PSET, ja saat palautetta siitä, onko ohjelma
oikea tai väärä mukaan eri eritelmät, jotka olemme antaneet.
Joten lisää tästä ja ongelma asettaa erittely ja
CS50x luokkatoverit tulee käyttämään tätä samoin.
>> Joten ongelma setti 4 on kyse Forensics.
Ja tämä pala on inspiroinut joitakin tosielämän tavaraa,
jolloin kun olin tutkijakoulussa, olen internoitiin jonkin aikaa
Middlesex County District syyttäjänvirasto tekee oikeuslääketieteen työtä
niiden lyijyä oikeuslääketieteen tutkija, ja mitä tämä oli
on mielestäni mainitsin muutaman viikon ohi, on Mass valtion poliisille tai muille
tulisivat, he pudota pois asioita, kuten kiintolevyjen ja CD-levyjen ja levykkeiden
ja vastaavat, ja sitten tavoitteena Forensics toimisto oli selvittää
oli tai ei ollut näyttöä jonkinlaisia.
Tämä oli Special Investigations yksikkö, joten se oli valkokaulusrikollisuuden,
se oli enemmän huolestuttavia tavallaan rikoksia,
mitään mukana jonkinlainen digitaalisen median, osoittautuu, että ei, että monet ihmiset
kirjoittaa sähköpostia sanomalla "Minä tein sen."
Niin usein nämä Forensics haut eivät nosta kovin paljon hedelmää,
mutta joskus ihmiset kirjoittavat tällaisia ​​sähköposteja.
Joten joskus ponnistelut palkittiin.
>> Mutta johtaa jopa tämän oikeuslääketieteen PSET, me voidaan ottaa käyttöön vuonna PSET 4 hieman grafiikkaa.
Joten luultavasti ottaa nämä asiat itsestäänselvyytenä, JPEG, GIF ja kuten näinä päivinä,
mutta jos todella miettiä sitä, kuva, aivan kuten Rob kasvot,
voitaisiin mallintaa sekvenssin pisteitä, tai pikseliä.
Nyt, kun on kyse Rob kasvot, siellä on kaikenlaisia ​​värejä,
ja aloimme nähdä yksittäisiä pisteitä, otherwide kutsutaan pikseliä,
Kun aloimme Lähennä
Mutta jos me yksinkertaistaa maailmaa hieman, ja sanoa, että tämä tässä on Rob
musta ja valkoinen, hyvin edustamaan mustavalkoinen voimme vain käyttää binääri.
Ja jos aiomme käyttää binääri, 1 tai 0, voimme ilmaista tämän saman kuvan
Rob on hymyilevät kasvot tämän kuvion bittien: 11000011 edustaa
valkoinen, valkoinen, musta, musta, musta, musta, valkoinen valkoinen.
Ja niin se ei ole valtava harppaus, sitten alkaa puhua värikkäitä valokuvia.
Asiat, jotka näkisitte Facebookissa tai ottaa digitaalikameralla,
mutta varmasti, kun se tulee väriä, tarvitset enemmän bittejä.
Ja varsin yleisiä maailmassa valokuvat on käyttää ei 1-bittiset värit,
koska tämä viittaa siihen, mutta 24-bittiset värit, jossa voit itse saada miljoonia värejä.
Joten kuten kun zoomataan Rob silmään,
, joka oli mikä tahansa määrä miljoonia erilaisia ​​värikkäitä mahdollisuuksia.
>> Joten me esitellä tämän ongelman setti 4 sekä esittely,
joka on tänään klo 3:30 sijasta tavallista 2:30 koska perjantain luento täällä.
Mutta video on verkossa, kuten tavallista, huomenna.
Otamme myös esitellä sinut toiseen tiedostomuotoon.
Joten tämä on tietoisesti tarkoitus tarkastella uhkaava aluksi,
mutta tämä on vain joitakin asiakirjoja C struct.
On käynyt ilmi, että Microsoftin, vuosia sitten, auttoi kansantajuistaa tähän muotoon,
kutsutaan bitmap tiedostomuoto, BMP, ja tämä oli super-yksinkertainen,
värikäs graafinen tiedostomuoto, jota käytettiin jo jonkin aikaa
ja joskus vielä tapetteja pöydälle.
Jos luulet takaisin Windows XP ja mäkiä ja sininen taivas,
että oli tyypillisesti BMP, tai bitmap kuva, ja bittikarttoja
ovat hauskoja meille, koska heillä on hieman enemmän monimutkaisuutta.
Se ei ole aivan niin yksinkertaista kuin tämä ruudukko 0: n ja 1: n;
sijaan, sinulla asioita, kuten otsikon alussa tiedoston.
Eli toisin sanoen, sisällä. Bmp tiedosto on koko joukko 0: n ja 1: n,
mutta siellä on joitakin ylimääräisiä 0: n ja 1: n siellä.
Ja näyttää siltä, ​​että mitä olemme ehkä itsestäänselvyytenä vuosia,
tiedostomuotoja kuten. doc tai. xls tai. mp3-tai. mp4,
mitä tiedostomuotoja että olet perehtynyt.
No, mitä se edes tarkoittaa olla tiedostomuotoon?
Koska lopussa päivä, kaikki nämä tiedostot käytämme juuri 0: n ja 1: n
ja ehkä ne 0: n ja 1: n edustavat a, b, c, ASCII-tai vastaava,
vaan loppujen lopuksi, se on vain 0: n ja 1: n.
>> Joten ihmiset vain satunnaisesti päättää keksiä uusi tiedostomuoto
jossa he standardoida mitä malleja bittien todella tarkoittaa.
Ja tässä tapauksessa tänne, ihmiset, jotka on suunniteltu bitmap tiedostomuoto
sanoi, että aivan ensimmäinen tavu bittikarttatiedostoa, kuten merkitään offset 0, siellä,
siellä tulee olemaan joitakin arvoituksellisesti nimetty muuttuja nimeltä bfType,
joka vain seisoo varten bittikartta tyyppi, millaista bittikartta on.
Voit päätellä, ehkä, toisen rivin, että offset-2, tavu numero 2,
on kuvio 0: n ja 1: n, joka edustaa mitä?
Koko jotain, ja se menee sieltä.
Joten ongelma setti 4, voit kävellä läpi joitakin näistä asioista.
>> Emme lopulta välittänyt niitä kaikkia, mutta huomaa se alkaa saada mielenkiintoisia
noin viiva tai tavu 54, rgbtBlue, vihreä ja punainen.
Jos olet koskaan kuullut lyhenne RGB, punainen vihreä sininen, tämä on viittaus siihen.
Koska se osoittautuu voit maalata kaikki sateenkaaren värit
joidenkin yhdistelmä punainen ja sininen ja vihreä.
Ja itse asiassa, vanhemmat huoneessa saattaa muistaa joitakin pian projektorit.
Nykyään juuri nähdä 1 kirkkaan valon tulevan ulos linssin.
Mutta takaisin päivän, sinulla oli punainen linssi, sininen linssi ja vihreä linssi
ja yhdessä ne pyritään näytön ja muodostunut värikäs kuva.
Ja melko usein keski kouluissa ja lukioissa olisi nuo linssit
yhä niin hieman vinossa, joten olimme tavallaan nähdä kaksin-tai kolminkertainen kuvia,
mutta se oli ajatus. Sinulla oli punainen ja vihreä ja sininen valo maalaus kuvaa.
Ja että samaa periaatetta käytetään tietokoneita.
>> Joten joukossa haasteita, niin sinulle ongelma asettaa 4
tulevat olemaan muutamia asioita, yksi on todella muuttaa kuvan.
Ryhtyä rakenteessa 0: n ja 1: n,
selvittää, mitkä paloina 0: n ja 1: n edustavat mitä rakenteessa näin,
ja sitten selvittää, miten kopioida pikseleitä: punaiset, siniset, vihreät
sisällä niin, että kun kuva näyttää tältä aluksi voisi näyttää tältä sijaan jälkeen.
Niistä muita haasteita myös tulee olemaan, että voit luovutettava
rikosteknisen kuvan todellisen tiedoston digitaalikamerasta
ja että kamera, Olipa kerran, oli koko joukko kuvia.
Ongelmana on, me vahingossa poistettu tai on ollut kuvan vioittunut jotenkin.
Bad Things Happen digitaalikameroissa, ja niin me nopeasti kopioida kaikki 0: n ja 1: n
pois tuosta kortin sinulle, tallentanut ne kaikki 1 iso tiedosto, ja sitten me ojentaa ne sinulle
ongelmatilanteissa asetettu 4, jotta voit kirjoittaa ohjelman C, joka palauttaa
kaikki nämä JPEG, mieluiten.
Ja käy ilmi, että JPEG, vaikka ne ovat jonkin verran kompleksin-tiedoston muodossa,
ne ovat paljon monimutkaisempia kuin tämä hymyilevät kasvot täällä.
On käynyt ilmi, että jokainen JPEG alkaa saman malleja 0: n ja 1: n.
Joten käyttäen while-silmukka tai on silmukka tai vastaava,
voit toistaa kaikkia 0: n ja 1: n tässä oikeuslääketieteen kuva
ja joka kerta näet erityinen kuvio, joka on määritelty ongelma setin erittely,
Voit olettaa, "Oh, tässä on, hyvin suurella todennäköisyydellä,
alku JPEG ", ja heti kun löytää sama kuvio,
jotkut tavujen tai kilotavua tai megatavua myöhemmin
Voit olettaa, "Ooh! Tässä on toinen JPEG, kuvan otin ensimmäisen jälkeen.
Saanen lopettaa lukemisen että ensimmäistä tiedostoa, kirjoita tämä uusi. "
Ja tuotoksen teidän ohjelman PSET 4 tulee olemaan jopa 50 JPEG.
Ja jos se ei ole 50 JPEG, sinulla on vähän silmukan.
Jos sinulla on ääretön määrä JPEG, sinulla on ääretön silmukka.
Niin sekin on melko yhteinen asia.
Se mitä on näköpiirissä.
>> Quiz 0, takanamme. Toteuta kohti minun email, että aina on olemassa ihmisiä
jotka molemmat ovat iloisia, tavallaan neutraalia, ja surullinen noin tietovisa 0 kertaa.
Ja älä tavoittaa minua, pää TF, Zamyla, oma TF
tai yksi varmenteiden että tiedät, jos haluat keskustella siitä, miten asiat menivät.
>> Joten vaikutuksen vanhemmille tässä huoneessa,
Mikä on CS50 kirjastoon? Hyvää työtä.
Mikä CS50 kirjastoon? Niin? [Student vastauksia, käsittämättömällä]
>> Okei, hyvä. Joten se prewritten joukko koodin että me, henkilöstö, kirjoitti,
tarjoamme sinulle, antaa joitakin yhteisiä toimintoja.
Juttuja saada minut string; ymmärtäkö minua int, kaikki toiminnot, jotka on lueteltu tässä.
Alkaa nyt, alamme todella nämä apupyörät pois.
Joten aiomme aloittaa viedä "merkkijono" teiltä,
joka muistuttaa, oli vain synonyymi mitä todellinen tietotyypin? char *.
Joten vanhemmat, joka oli luultavasti - se on hyvä, niin char * alamme nähdä
ruudulla sitäkin kun me poistaa "merkkijono" sanastosta,
ainakin kun se tulee todella kirjoittaa koodia.
Samoin me lopeta jotkut näistä toimii paljon,
koska meidän ohjelmat menevät entistä kehittyneempiä
eikä vain kirjoittaa ohjelmia, jotka istuvat siellä nopeasti vilkkuva,
odottaa käyttäjä kirjoittaa jotain sisään
Saatte tuotantopanoksia muualta.
Esimerkiksi, saat ne sarjan bittiä paikalliselle kiintolevylle.
Sinä sen sijaan saada heidät tulevaisuudessa verkkoyhteyden, jotkut verkkosivuilla jonnekin.
Joten Taitat tämän kerroksen ensimmäisen kerran, ja vedä ylös CS50 laitteen
ja tämä tiedosto nimeltä CS50.h, jonka olet ollut teräviä lukien viikkoja.
>> Mutta katsotaanpa itse nähdä mitä on sisällä tämän.
Joten alkuun tiedoston sininen on vain koko joukko huomautuksia,
takuutietoja ja lisensointi. Tämä on eräänlainen yhteinen paradigman
ohjelmisto, koska paljon ohjelmistoja näinä päivinä on mitä kutsutaan "open source"
mikä tarkoittaa, että joku on kirjoittanut koodin
ja teki sitä vapaasti saatavilla, eikä vain juosta ja käyttää,
mutta itse lukea ja muuttaa ja integroida omaan työhön.
Niin, että mitä olet käyttänyt, avoimen lähdekoodin ohjelmistoja,
vaikkakin hyvin pienikokoinen.
Jos minä selaa ohi kommentit kuitenkin aloitamme nähdä joitakin tuttuja asioita.
Joten huomaa huipulla tässä, että CS50.h tiedosto sisältää koko joukko header-tiedostot.
Nyt useimmat näistä emme ole ennen nähneet, mutta yksi on
tuttu, mitkä näistä olemme nähneet, vaikkakin lyhyesti, tähän mennessä?
Joo, standardi kirjastot. Stdlib.h on malloc,
joten kun aloimme puhua dynaamisen muistin jakamista,
jonka tulemme takaisin ensi viikolla samoin, aloitimme mukaan lukien tiedoston.
On käynyt ilmi, että bool ja tosi ja epätosi eivät todellisuudessa olemassa C, sinänsä,
ellet sisällyttää tämän tiedoston täällä.
Joten olemme, viikkoja, on myös vakio bool.h
jotta voit käyttää käsitettä bool, tosi tai epätosi.
Ilman tätä, sinun pitäisi lajitella väärennettyjä ja käyttää int
ja vain mielivaltaisesti olettaa, että 0 on epätosi ja 1 on tosi.
>> Nyt, jos me selaa edelleen, tässä on meidän määritelmä merkkijono.
On käynyt ilmi, kuten olemme sanoneet, että jos tämä * ei ei väliä.
Voit jopa tilaa ympäri.
Me, tämä lukukausi, on edistää sitä tässä tehdä selväksi, että * liittyy tyypin.
Mutta ymmärtää, yhtä yleistä, jos ei hieman yleisempää, on laittaa se sinne
mutta toiminnallisesti se on sama asia.
Mutta nyt, kun luemme alas entisestään, katsotaanpa katsomaan sanoa, GetInt,
koska käytimme että ehkä ennen muuta tällä lukukaudella.
Ja tässä on GetInt. Tämä on mitä?
Tämä on prototyyppi. Niin usein olemme tehneet prototyyppien yläosien meidän. C-tiedostoja,
mutta voit myös laittaa prototyyppejä header-tiedostoja,. h-tiedostot,
kuten tämä tässä, niin että kun kirjoittaa joitakin toimintoja
että haluat muut ihmiset voivat käyttää, joka on täsmälleen tapauksessa CS50 kirjasto,
et vain toteuttaa omia toimintoja jotain CS50.c,
voit myös laittaa prototyyppejä ei yläreunassa tiedoston, mutta yläosassa otsikkotiedoston,
Silloin header tiedosto on mitä ystävät ja kollegat ovat
terävällä sisällyttää omiin koodin.
Joten kaikki tällä kertaa olet lukien kaikki nämä prototyypit
tehokkaasti yläreunassa tiedoston, mutta tapa tämän terävät ovat mekanismi
että lähinnä kopioita ja pastat tämä tiedosto omaan.
Nyt, tässä on joitakin melko yksityiskohtaisia ​​asiakirjoja.
>> Olemme melko itsestään selvänä, että GetInt saa int-
mutta se osoittautuu siellä jossakin nurkassa tapauksissa, eikö?
Entä jos käyttäjä tyypit numero, joka on aivan liian iso?
Quintillion, joka vain ei sovi sisällä int?
Mikä on odotettu käytös? No, ihannetapauksessa se on ennustettavissa.
Eli tässä tapauksessa, jos olet itse lukenut sakon tulostaa,
näet, että jos rataa ei voi lukea, tämä palaa INT_MAX.
Emme ole koskaan puhuneet tästä, mutta perustuen arvo,
Mikä on se, luultavasti?
Se on jatkuvaa, joten se on joitakin erityisiä vakio, joka on luultavasti ilmoitettu
yksi niistä header tiedostot on jopa suurempi tiedosto,
ja INT_MAX on luultavasti jotain, noin 2 miljardia.
Ajatuksena on, että koska meidän jotenkin merkiksi, että jotain meni pieleen,
me, kyllä, on 4000000000 numerot käytössämme,
Negatiivinen 2 mrd. jopa 2 miljardia, antaa tai ottaa.
No, mikä on yleinen ohjelmointi on sinun varastaa vain yksi näistä numeroista.
Ehkä 0, ehkä 2 miljardia ehkä negatiivinen 2000000000.
Joten viettää joku mahdollisista arvoista, jotta voit sitoutua maailmalle
että jos jokin menee pieleen, palaan tämän super-iso arvo.
Mutta et halua käyttäjän kirjoittaa jotain kryptisiä kuten "2, 3, 4 ..."
todella iso numero, jossa voit yleistää sen sijaan jatkuvasti.
Siis todella, jos olisit on anaali viime viikkoina,
milloin soitat GetInt, sinun olisi pitänyt tarkistaa kanssa jos ehto.
Onko käyttäjä tyyppiä INT_MAX, tai tarkemmin sanottuna,
teki GetInt paluu INT_MAX? Koska jos se ei,
että oikeastaan ​​tarkoittaa, että he eivät kirjoita sitä, jokin meni pieleen tässä asiassa.
Joten tämä on mitä yleisesti kutsutaan "Sentinel"-arvo, joka tarkoittaa vain sitä erityistä.
>> No, nyt käännöksen. C-tiedostoja.
C tiedosto on olemassa laitetta jonkin aikaa,
ja itse asiassa, laite on se käännetty sinulle
tuohon juttu kutsuimme "kohdekoodilla"
mutta se vain ei ole väliä missä se on, koska järjestelmä tietää,
Tässä tapauksessa, jos se on, laite.
Mutta katsotaanpa selaa nyt GetInt, ja miten GetInt on työskennellyt koko ajan.
Joten tässä meillä on samankaltaisia ​​kommentteja ennen.
Saanen suurentaa vain koodin osan,
ja mitä meillä on GetInt on seuraava.
Siinä ei tulo ja se palauttaa int, while (true), joten meillä on tahallinen loputon silmukka
mutta oletettavasti me eroon tästä jotenkin, tai palaa tämän.
Joten miten tämä toimii. No, me näyttävät käyttävän GetString
Tässä ensimmäinen rivi silmukan sisällä, 166.
Tämä on nyt hyvä käytäntö, koska, missä olosuhteissa
voisi GetString palata tähän erityiseen avainsanan, NULL?
Jos jokin menee pieleen. Mikä voisi mennä pieleen, kun soitat jotain GetString?
Niin? [Student vastaus, käsittämätön] >> Joo. Joten ehkä malloc epäonnistuu.
Jossain alla huppu GetString kutsuu malloc,
joka varaa muistia, jonka avulla tietokone tallentaa
kaikki merkkejä käyttäjä tyypit tulee näppäimistö.
Ja olettaa käyttäjän oli paljon vapaa-aikaa
ja kirjoitetaan enemmän, esimerkiksi yli 2000000000 merkkiä.
Enemmän merkkejä kuin tietokoneessa on jopa RAM.
No, GetString on pystyttävä merkiksi siitä, että teille,
vaikka tämä on super, super harvinaista kulma tapauksessa.
Se on jotenkin kyettävä käsittelemään sitä, ja niin GetString,
jos menemme takaisin ja lukea sen dokumentointi, ei itse asiassa palauttavat NULL.
Nyt jos GetString epäonnistuu palauttamalla NULL, GetInt on menossa epäonnistua
palauttamalla INT_MAX, kuten sentinel.
Nämä ovat vain ihmisen yleissopimukset. Ainoa tapa tietäisit näin on
on lukemalla dokumentaation.
Joten selaa missä int on todella GotInt.
>> Joten jos selaa hieman pidemmälle, linjassa 170 meillä kommentin yläpuolella näitä rivejä.
Niinpä me julistamme, vuonna 172, int n ja nieriää c ja sitten tämä uusi toiminto
jonka jotkut teistä ovat törmänneet aiemmin, mutta sscanf.
Tämä tarkoittaa merkkijonoa skannauksen F.
Toisin sanoen, anna minulle merkkijono, ja aion tarkistaa sen palaset kiinnostavia tietoja.
Joten mitä se tarkoittaa? No, oletetaan, että minä kirjoita, kirjaimellisesti, 1 2 3 on näppäimistö,
ja paina sitten Enter. Mikä on tietotyyppi 1 2 3 kun palauttamat GetString?
Se on tietysti merkkijono, eikö? Sain merkkijonon, joten 1 2 3 on todella "1 2 3"
kanssa \ 0 lopussa se. Tämä ei ole int.
Se ei ole numero. Se näyttää useita, mutta se ei ole oikeastaan.
Joten mitä GetInt pitää tehdä? Se on skannata, että merkkijono vasemmalta oikealle,
1 2 3 \ 0, ja jotenkin muuntaa sen todellinen kokonaisluku.
Nyt voit selvittää, miten tehdä tämä.
Jos muistelen PSET 2, sinulla luultavasti sai vähän mukava
Caesarin tai vigenere joten voit toistaa yli merkkijono,
voit muuntaa merkkiä ja ints kanssa poimia. Tuo paljon työtä.
Miksi ei kutsua toimivat kuten sscanf joka tekee sen puolestasi?
Joten sscanf odottaa argumentti, tässä tapauksessa kutsutaan linja, joka on merkkijono.
Voit sitten määrittää, lainausmerkeissä, hyvin samankaltainen printf,
mitä odottaa tältä merkkijono?
Sanon tässä on, odotan nähdä desimaaliluvun ja ehkä luonne.
Ja näemme, miksi näin on vain hetken.
Osoittautuu, että tämä merkintätapa on nyt muistuttaa tavaraa
aloimme puhua hieman yli viikko sitten.
>> Mikä on & n ja & C tekee meille täällä? [Student vastauksia, käsittämättömällä]
>> Joo. Se antaa minulle osoite n ja osoite c.
Nyt, miksi se on tärkeää? No, te tiedätte, että toimii C
voit aina palauttaa arvon tai lainkaan arvoa.
Voit palauttaa int, string, float, char riippumatta.
Tai voit palata mitätön, mutta voit vain palauttaa 1 asia maksimaalisesti.
Mutta tässä me haluamme sscanf palauttaa minulle ehkä int, desimaaliluku,
ja myös char, ja selitän miksi nieriää hetki.
Joten te tehokkaasti haluat f palata 2 asiaa, se vain ei ole mahdollista C.
Joten voit kiertää ajamalla 2 osoitteet,
sillä heti kun ojentaa toiminto 2 osoitteita, mitä tämä tehtävä tehdä niille?
Se voi kirjoittaa osoitteet. Voit käyttää * toiminnan ja "mene sinne" jokaiseen näistä osoitteista.
Se on tavallaan tämän takaoven mekanismi, mutta hyvin yleistä muuttamalla muuttujien arvot
enemmän kuin vain 1 paikka, tässä tapauksessa 2.
Nyt, huomaa olen tarkistanut == TO1 ja palaavat sitten n jos ei, itse asiassa, arvioi todellista.
Joten mitä on tekeillä? No, teknisesti, kaikki me todella haluamme tapahtua GetInt on tässä.
Haluamme jäsentää, niin sanoakseni, haluamme lukea merkkijono
"1 2 3", ja jos se näyttää siellä useita siellä,
mitä me kerromme sscanf tehdä, on laittaa se numero, 1 2 3, tässä muuttuja n minulle.
Miksi sitten minun tarvinnut tämän lisäksi?
Mikä on rooli myös sanoa, sscanf, saatat myös saada merkin tänne.
[Student ottaen käsittämätön] >> Ei - desimaalipilkun voisi toimia.
Katsotaanpa katsonut, että mietti hetken. Mitä muuta?
[Student, käsittämätön] >> Niin, hyvä ajatus, se voisi olla NULL merkki.
Se on oikeastaan ​​ole tässä tapauksessa. Niin? [Student, käsittämättömällä]
>> >> ASCII. Tai haluan yleistää entisestään.
% C on vain virheiden tarkkailun.
Me emme halua olla merkki numeron jälkeen,
mutta mitä tämä antaa minulle mahdollisuuden tehdä seuraavalla:
On käynyt ilmi, että sscanf lisäksi tallentamiseksi arvot n ja c, tässä esimerkissä täällä,
Mitä se tekee on se palauttaa muuttujien määrä sen laittaa arvot tuumaa
Joten jos vain kirjoitat 1 2 3, sitten vain% d on menossa vastaamaan
ja vain n saa tallennetaan arvo kuin 1 2 3 eikä mitään saa laittaa C;
c pysyy roskat arvo, niin sanoakseni.
Garbage koska se ei ole koskaan alustettu jotain arvoa.
Niin siinä tapauksessa, sscanf palauttaa 1, koska olen asutuilla yksi niistä osoittimia,
jolloin, hienoa. Olen int, joten vapauttaa linjan vapauttaa muistia
että GetString todellisuudessa varattu, ja sitten palaan n..
Else, jos koskaan miettinyt minne se yrittää lausunto tulee, tulee täällä.
Jos sitä vastoin I kirjoita 1 2 3 foo-
vain joitakin satunnainen sekvenssi tekstiä, sscanf on menossa nähdä,
ooh, numero, ooh, numero, ooh, numero, ooh - f.
Ja se tulee laittaa 1 2 3 N.
Se tulee laittaa F c, ja palata sitten 2.
Joten meillä on vain käyttää perusmääritelmää scanf käyttäytymistä,
hyvin yksinkertaisella tavalla - hyvin monimutkaisia ​​ensi silmäyksellä, mutta loppujen lopuksi,
melko yksinkertainen mekanismi sanoa, onko int, ja jos niin on, että ainoa asia, löysin?
Ja valkoinen tila tässä on tahallista. Jos luet asiakirjat sscanf,
se kertoo teille, että jos kuuluu pala valkoista tilaa alussa tai lopussa
sscanf liian avulla käyttäjä jostain syystä osuma VÄLINÄPPÄIN 1 2 3, ja se on laillista.
Se ei huuda käyttäjä vain koska ne osuvat välilyöntiä alussa tai lopussa
joka on vain hieman käyttäjäystävällinen.
>> Kaikki kysymykset, sitten on GetInts? Niin?
[Student kysymys, käsittämättömällä]
>> Hyvä kysymys. Mitä jos vain kirjoittanut char, kuten F ja paina enter
ilman koskaan kirjoittamalla 1 2 3; mitä mieltä olette käytöksen koodirivin olisi sitten?
Joten sscanf voi kattaa sekin, koska tällöin,
se ei tule täyttämään n tai C, se tulee sen sijaan palauttaa 0.
Jolloin, olen myös kiinni siitä, että skenaario, koska odotusarvo haluan on 1.
Haluan vain 1, ja vain 1 asia täytetään. Hyvä kysymys. Muut?
>> Selvä, joten älkäämme käydä läpi kaikki toiminnot tänne,
mutta joka näyttää olevan, ehkä, jäljellä oleva
on GetString koska näyttää siltä, ​​että GetFloat, GetInt,
GetDouble, GetLongLong kaikki punt paljon niiden toiminnallisuutta GetString.
Joten katsomaan kuinka hän on toteutettu täällä.
Tämä näyttää hieman monimutkainen, mutta se käyttää samoja perusteita
että aloimme puhua viime viikolla. Joten GetString,
jossa ei väitettä kohti void tänne,
ja se palauttaa merkkijonon, niin minä julistan merkkijono kutsutaan puskurin.
En todellakaan tiedä, mitä se tulee käyttää, mutta me näemme.
Näyttää kapasiteetti on oletuksena, 0, ole aivan varma mihin tämä on menossa.
Etkö ole varma mitä n tulee käyttää vielä.
Mutta nyt se alkaa hieman mielenkiintoisemman, joten linja 243,
me julistamme int c, tämä on eräänlainen tyhmä yksityiskohta.
Char on 8 bittiä, ja 8 bittiä voi tallentaa miten monta eri arvoja?
256. Ongelma on, jos haluat olla 256 eri ASCII-merkkiä,
joista, jos luulet takaisin, ja tämä ei ole jotain muistaa.
Mutta jos muistelen että iso ASCII kaavio meillä oli viikko sitten,
oli, että tässä tapauksessa, 128 tai 256 ASCII-merkkiä.
Käytimme kaikki kuviot 0: n ja 1: n ylös.
Tämä on ongelma, jos haluat pystyä havaitsemaan virhettä.
Koska jos käytät jo 256 arvoja hahmosi,
et ole oikeasti suunnitella tulevaisuutta, koska nyt sinulla ei ole tapa sanoa,
"Tämä ei ole legit hahmo, tämä on noin virheellinen viesti."
Joten mitä maailma tekee on, ne käyttävät seuraavaksi suurin arvo,
jotain int niin että sinulla on hullu määrä bittejä,
32 4000000000 mahdolliset arvot, jotta voit päätyä käyttämään,
olennaisesti, 257 niistä, joista 1 on joitakin erityisiä merkitys kuin virhe.
>> Joten miten tämä toimii. Linjassa 246, minulla on tämä iso, kun silmukka
että soittaa fgetc f merkitys tiedoston, getc, ja sitten stdin.
Paljastui, että tämä on vain tarkempi tapa sanoa "luetaan panosta näppäimistö".
Vakiosyöttökapasiteetti tarkoittaa näppäimistö, vakiotulosteeseen tarkoittaa näytön,
ja keskivirhe, joka nähdään vuonna PSET 4, tarkoittaa näytön,
mutta erityinen osa näytön niin, että se ei conflated
todellisia ulostulo todellakin tarkoitus tulostaa, mutta siitä lisää tulevaisuudessa.
Joten fgetc tarkoittaa vain lukea yhden merkin päässä näppäimistön, ja tallentaa sen minne?
Säilytä se C, ja tarkista sitten, joten olen vain käyttäen joitakin boolean konjunktiot täällä,
tarkista, että se ei ole sama \ n, joten käyttäjä on enteriä.
Haluamme lopettaa tässä vaiheessa, pää silmukan, ja haluamme myös tarkistaa
varten erityinen vakio EOF, joka jos tiedät tai arvailla - mitä se tarkoittaa?
End of file. Joten tämä on tavallaan järjetöntä, koska jos olen kirjoittamalla klo näppäimistön,
siellä oikeastaan ​​mitään tiedostoa mukana tässä,
mutta tämä on vain eräänlainen yleinen termi tarkoittamaan
että mikään muu on peräisin ihmisen sormet. EOF. End of file.
Sivuhuomautuksena, jos olet joskus lyönyt ohjaus D näppäimistön,
ole, että sinulla olisi vielä, olet osuma ohjaus c.
Mutta ohjaus d lähettää tätä erityistä vakio nimeltään EOF.
>> Eli nyt meillä on vain muutamia dynaaminen muistin jakamista.
Joten jos n + 1> kapasiteettia, nyt selitän n.
n on, kuinka monta tavua on tällä hetkellä puskuriin,
merkkijonon olet parhaillaan rakentaa käyttäjältä.
Jos sinulla on enemmän merkkejä omassa puskurissa kuin sinulla kapasiteettia puskuriin,
intuitiivisesti, mitä meidän täytyy tehdä niin on jakaa enemmän kapasiteettia.
Aion silmäillä joitakin aritmeettinen täällä
ja keskittyä vain tätä toimintoa täällä.
Tiedätkö mitä malloc on, tai ainakin yleisesti tuttu.
Ota arvaus mitä realloc tekee. [Student vastaus, käsittämättömällä]
>> Joo. Ja se ei ole aivan lisäämällä muistia, se allokoi muistia seuraavasti:
Jos siellä on vielä tilaa lopussa merkkijonon antaa sinulle enemmän että muistia
kuin se alun perin antaa sinulle, niin saat että lisämuistia.
Joten voit vain laittaa jouset hahmot takaisin takaisin takaisin takaisin.
Mutta jos se ei ole, koska odotti liian kauan
ja jotain random sai plopped muistiin siellä, mutta siellä on ylimääräistä
muistin tänne, se on okei. Realloc aikoo tehdä kaiken raskaan työn puolestasi,
siirrä merkkijono olet lukenut näin kaukana täältä,
laittaa sen sinne, ja sitten antaa sinulle lisää kiitotien tässä vaiheessa.
Joten aallon käden, haluan sanoa, että mitä GetString tekee
on se alkaa pieni puskuri, ehkä 1 yhden merkin,
ja jos käyttäjä on 2 merkkiä, GetString päätyy
soittamalla realloc ja sanoo, "Ooh, 1 merkki ei ollut tarpeeksi.
Anna minulle 2 merkkiä. " Sitten jos luet logiikan silmukan,
se tulee sanoa, "Ooh, käyttäjän kirjoittanut 3 merkkiä.
Antakaa nyt olla 2, mutta 4 merkkiä, niin anna minulle 8, niin anna minulle 16 ja 32 ".
Se, että olen kaksinkertaistaa kapasiteetin kerta
tarkoittaa, että puskuri ei tule kasvaa hitaasti.
Se tulee kasvamaan erittäin nopeasti, ja mikä voisi olla hyötyä siitä?
Miksi olen koko kaksinkertaistui puskurin, vaikka käyttäjä
voi vain tarvita 1 ylimääräinen merkin näppäimistöllä?
[Student vastaus, käsittämätön]. >> Mikä tuo on?
Aivan. Sinun ei tarvitse kasvattaa sitä niin usein.
Ja tämä on juuri sellainen - Sinä suojaus vedot täältä.
Ajatuksena on, että et halua soittaa realloc paljon, koska se on yleensä hidasta.
Aina kysyä käyttöjärjestelmä muistia, niin saat pian nähdä
tulevaan ongelmaan asetettu, se yleensä kestää jonkin aikaa.
Joten minimointi että aikaa, vaikka tuhlaat tilaa, yleensä hyvä asia.
>> Mutta jos luemme läpi loppuosa GetString täällä,
ja taas, ymmärtäminen jokainen rivi tässä ei ole niin tärkeää tänään.
Mutta huomaa, että se lopulta kutsuu malloc uudelleen, ja se varaa
täsmälleen yhtä monta tavua kuin se tarvitsee merkkijono
ja sitten heittää pois soittamalla ilmaiseksi, liian iso puskuri,
jos se todellakin voittamaan kaksinkertaistui liian monta kertaa.
Lyhyesti sanottuna, se miten GetString on työskennellyt koko ajan.
Kaikki se luetaan yksi merkki kerrallaan uudestaan ​​ja uudestaan ​​ja uudestaan
ja joka kerta se tarvitsee lisämuistia, se kysyy käyttöjärjestelmä sen soittamalla realloc.
Kysyttävää? Selvä.
>> Hyökkäys. Nyt ymmärrämme osoittimia, tai ainakin
ovat yhä paremmin perillä osoittimia,
Tarkastellaan miten koko maailma alkaa romahtaa
jos et ole aivan puolustautua kontradiktorisessa käyttäjiä,
ihmiset, jotka yrittävät murtautua järjestelmään.
Ihmiset, jotka yrittävät varastaa ohjelmiston kiertämällä jotkut rekisteröintikoodin
että niillä muutoin olisi kirjoittaa tuumaa
Katsokaa tätä esimerkkiä täällä, mikä on vain C-koodia
että on toiminto tärkein alareunassa, joka kutsuu toiminnon foo
ja mitä se ohimennen foo? [Opiskelija] yksittäisenä argumenttina.
>> Yksi argumentti. Joten argv [1], mikä tarkoittaa, että ensimmäinen sana käyttäjä kirjoittaa
komentoriviltä jälkeen a.out tai mikä ohjelma on nimeltään.
Joten foo, huipulla, vie char *, mutta char * on juuri mitä?
String. Ei mitään uutta täällä, ja että merkkijono on mielivaltaisesti kutsutaan bar.
Tällä rivillä täällä, char c [12], eräänlainen semi-teknisiä Englanti, mitä tämä rivi tekee?
Array -? Merkkiä. Anna minulle joukko 12 merkkiä.
Joten voisimme kutsua tätä puskuria. Se on teknisesti kutsutaan C, mutta puskuri ohjelmointi
tarkoittaa vain nippu tilaa, voit laittaa kamaa sisään
>> Sitten lopuksi, memcpy, olemme ei käytetty ennen.
Mutta voit varmaan arvata mitä se tekee. Se kopioi muistia.
Mitä se tekee? No, se ilmeisesti kopioi baari, sen panos, tulee c,
mutta vain pituuden baarissa.
Mutta on bugi täällä.
Okei, joten teknisesti meidän pitäisi todella tehdä strlen (bar) x sizeof (char), se on oikein.
Mutta pahimmassa tapauksessa tässä oletetaan, että that's - niin, okei.
Sitten on 2 bugeja. Joten sizeof (char), okei, tehkäämme tästä hieman laajemmin.
Joten nyt on vielä bugi, joka on mitä?
[Student vastaus, käsittämätön] >> Tarkista mitä? Okei, joten meidän pitäisi tarkistaa
for null, koska pahoja asioita tapahtuu, kun osoitin on NULL,
Koska saatat päätyä sinne, ja sinun ei pitäisi koskaan aio NULL
by dereferencing se * operaattorin.
Joten se on hyvä, ja mitä muuta me teemme? Loogisesti siellä virhe tässäkin.
[Student vastaus, käsittämättömällä]
>> Joten tarkista jos argc ≥ 2?
Okei, joten siellä on 3 bugeja tästä ohjelmasta.
Emme tarkistaa, jos käyttäjä itse kirjoittanut mitään argv [1], hyvä.
Joten mitä kolmas bugi? Niin?
[Student vastaus, käsittämätön] >> Hyvä.
Niinpä pyysimme yhden skenaarion. Meillä epäsuorasti tarkastetaan älä kopioi enemmän muistia
kuin ylittäisi pituus baarissa.
Joten jos merkkijono käyttäjä kirjoitettu on 10 merkkiä pitkä,
Tämä sanoo, "vain kopioi 10 merkkiä."
Ja se on okei, mutta entä jos käyttäjä kirjoitettu sana kehotteeseen
kuin 20 merkkiä sana, tämä on, sanoo kopio 20 merkkiä siitä baarin, mitä?
C, joka tunnetaan myös meidän puskuri, mikä tarkoittaa juuri kirjoitti dataa
8 tavu paikkoihin että et omista,
ja et omista niitä siinä mielessä, että et koskaan varattu niille.
Joten tämä on mitä yleisesti kutsutaan puskurin ylivuoto hyökkäys,
tai puskurin ylivuoto hyökkäys, ja se on hyökkäys siinä mielessä, että jos käyttäjä
tai ohjelma, joka soittaa omia toiminto tekee tämän vihamielisesti,
Mitä oikeastaan ​​tapahtuu seuraavaksi voisi olla melko huono.
>> Katsotaanpa katsomaan tätä kuvaa täällä.
Tämä kuva edustaa pinon muistin.
Ja muistaa, että joka kerta kun soittaa toiminto,
saat tästä vähän kehyksessä pino ja sitten toinen ja sitten toinen ja sitten toinen.
Ja toistaiseksi olemme vain eräänlainen otetun poiskaan suorakulmioina
joko siellä aluksella tai ruudulla täällä.
Mutta jos me zoomata yksi niistä suorakulmioita,
Kun soitat funktion foo, käy ilmi, että siellä on enemmän pinoon
sisällä, että kehyksen ja että suorakulmion
kuin vain x ja y ja a ja b, niin kuin emme puhu swap.
On käynyt ilmi, että jotkut alemman tason yksityiskohdat,
joukossa palautusosoite.
Joten se kääntyy pois, kun tärkeimmät kutsuu foo, tärkein on ilmoitettava foo
mitä tärkein osoite on tietokoneen muistiin.
Koska muuten, niin pian kuin foo tehdään suorittamalla, kuten tässä tapauksessa tässä,
Kun saavutat tämän lähellä kihara ahdin lopussa foo-
Miten hitossa se foo tietää, missä valvonta ohjelman on tarkoitus mennä?
On käynyt ilmi, että vastaus tähän kysymykseen on, että punainen suorakulmion täällä.
Tämä merkitsee osoittimen, ja se on jopa tietokone tallentaa väliaikaisesti
on ns pino osoite tärkeimmistä niin, että niin pian kuin foo on tehty täytäntöönpanovaltion,
tietokone tietää missä ja mitä linjaa pääasiassa palata.
Tallennetaan kehyksen osoitin liittyy samalla tämän.
Char * bar täällä edustaa mitä?
No, nyt tämä sininen segmentti tässä foo runkoon, mikä on baari?
Okei, joten baari on vain argumentti foo toimintoa.
>> Joten nyt olemme takaisin tutun kuvan.
On enemmän tavaraa ja lisää häiriötekijöitä ruudulla
mutta tämä vaaleansininen segmentti on mitä olemme piirtämällä taululle jotain kuten swap.
Se on kehys foo ja ainoa asia siinä nyt on baari,
joka on tämän parametrin.
Mutta mitä muuta pitäisi olla pinon mukaan tämä koodi täällä?
Char c [12]. Joten meidän pitäisi myös nähdä 12 ruutua muistia,
kohdennettu muuttuja nimeltä c.
Ja todellakin meillä on, että ruudulla.
Hyvin alkuun on c [0] ja sitten kirjoittanut tämän kaavion
ei vaivaudu piirustus kaikki neliöt mutta todellakin 12 siellä
sillä jos tarkastellaan oikeassa alakulmassa, c [11], jos lasketaan 0, on 12 tällaista tavua.
Mutta tässä on ongelma: mihin suuntaan c kasvaa?
Järjestä ylhäältä alas, eikö? Jos se alkaa ylhäältä ja kasvaa pohjaan,
ei näytä siltä että lähdimme itse paljon kiitotien täällä ollenkaan.
Olemme tavallaan maalannut itsemme nurkkaan,
ja että c [11] on oikeassa vastaan ​​bar, mikä on oikea vastaan ​​pinokehys osoitin,
joka on oikeassa suhteessa palautusosoite; siellä ole enää tilaa.
Joten mitä vaikutuksia, niin, jos mokaat,
ja yrität lukea 20 tavua 12-tavun puskuri?
Missä ovat ne 8 lisätavujen menossa?
Sisällä kaikki muu, joista osa on erittäin tärkeää.
Ja tärkeintä, mahdollisesti, on punainen laatikko siellä palautusosoite.
Koska Oletetaan, että olet joko vahingossa tai adversarially
korvata ne 4 tavua, että osoitin osoite,
ei vain roskat, mutta numero sattuu edustamaan todellisia osoite muistiin?
Mikä implicaiton loogisesti?
[Student vastauksia, käsittämätön] >> Aivan. Kun foo palauttaa
ja osumia että kihara ahdin, ohjelma tulee etenemään ei palata päävalikkoon,
se tulee palauttaa mihin tahansa osoitteeseen on se punainen laatikko.
>> Nyt, kun on kyse kiertää ohjelmiston rekisteröinnin
Mikä on osoite, joka on palautetaan on funktion
että normaalisti saa kutsutaan, kun olet maksanut ohjelmiston ja syötetään rekisteröintikoodi?
Voisit tavallaan temppu tietokoneen aio täällä, mutta sen sijaan menee täällä.
Tai, jos olet todella fiksu, vastustaja voi todella kirjoittaa on näppäimistö,
Esimerkiksi, ei todellista sanaa, ei 20 merkkiä, mutta kai hän
tyyppejä jotkut merkit edustavat koodia?
Ja se ei tule olemaan C-koodia, se tulee olemaan merkit
jotka edustavat binääri kone koodit, 0: n ja 1: n.
Mutta oletetaan he tarpeeksi fiksu tehdä, että jotenkin liitä GetString nopeasti
jotain, joka on oleellisesti käännetty koodi,
ja viimeinen 4 tavua ylikirjoittaa että palautusosoite, ja mihin osoitteeseen tuo panos tehdä?
Se tallentaa tämän punainen suorakulmio osoite ensimmäisen tavun puskuria.
Joten sinun täytyy olla todella fiksu, ja tämä on paljon ja erehdyksen
huono ihmiset siellä, mutta jos voit selvittää, kuinka suuri tämä puskuri on,
sellainen, että viime tavua tulo että annat ohjelman
sattuvat olemaan vastaava osoite alkamisen puskuria,
voit tehdä tämän. Jos sanomme, normaalisti, hei, ja \ 0, sitähän päätyy puskuriin.
Mutta jos olemme viisaampi, ja täytämme sen puskuri mitä me yleisesti kutsua hyökkäys koodia,
,,,: Attack, hyökkäys, hyökkäys, hyökkäys, jossa tämä on vain jotain, joka tekee jotain pahaa.
No, mitä tapahtuu, jos olet todella fiksu, saatat tehdä:
Punaisella laatikko tässä järjestyksessä numerot: 80, CO, 35, 08.
Huomaa, että vastaava määrä, joka on täällä.
Se on käänteisessä järjestyksessä, mutta siitä lisää joku toinen kerta.
Huomaa, että tämä paluu osoite on tarkoituksellisesti muutettu
on yhtä osoitetta tänne, ei osoitetta tärkein.
Joten jos pahis on super älykäs, hän aikoo sisällyttää kyseisen hyökkäyksen koodi
jotain, "Poista kaikki käyttäjän tiedostot."
Tai "Kopioi salasanat" tai "Luo käyttäjätili voin kirjautua."
Yhtään mitään, ja tämä on sekä vaaran ja voiman C.
Koska sinulla on pääsy muistiin kautta osoittimia
Voit siis kirjoittaa mitä haluat osaksi tietokoneen muistiin.
Voit tehdä tietokoneella tehdä mitä haluat yksinkertaisesti
Ottaa se hyppää noin omassa muistia.
Ja niin, tähän päivään, niin monia ohjelmia ja niin monia sivustoja, jotka ovat vaarassa
pohjimmiltaan ihmiset hyödyntää tätä.
Ja tämä saattaa tuntua erittäin hienostunut hyökkäys,
mutta se ei aina käynnisty niin.
>> Tosiasia on, että mitä pahaa ihmiset yleensä tehdä, on,
onko se ohjelma komentoriviltä tai GUI ohjelmaa tai verkkosivuilla,
on juuri alkaa tarjota hölynpölyä.
Kirjoitat todella iso sana hakukenttään ja paina enter
ja odotat nähdä, jos sivusto kaatuu.
Tai voit odottaa, jos ohjelma näkyy jonkin virheilmoituksen.
Koska jos olet onnekas, koska pahis,
ja annat joitakin hullu panos että kaatuu ohjelma
tämä tarkoittaa ohjelmoija ei ennakoida huono käytös
mikä tarkoittaa, että voit luultavasti tarpeeksi vaivaa,
tarpeeksi ja erehdyksen, selvittää, miten käydä tarkemmin hyökkäys.
Niin paljon osa turvallisuutta ei ole vain välttää nämä hyökkäykset kokonaan, mutta havaittuaan ne
ja itse katsot lokit ja nähdä, mitä hulluja tulot ovat ihmisiä kirjoitetaan sivuston.
Mitä hakutermejä on ihmisiä kirjoitetaan sivuston toiveita täynnä joidenkin puskuri?
Ja tämä kaikki pohjimmiltaan yksinkertainen perusasiat mitä array,
ja mitä se tarkoittaa kohdentaa ja käyttää muistia?
Ja siihen liittyen myös tämä.
>> Joten vain vilkaista sisällä kiintolevyn jälleen.
Joten te muistamme viikko tai kaksi sitten, että kun vedät tiedostoja
teidän roskakoriin tai roskakoriin, mitä tapahtuu?
[Student] Nothing. >> Joo, mitään. Lopulta jos suoritat matala
levytilaa, Windows tai Mac OS alkaa poistaa tiedostoja sinulle.
Mutta jos vedät jotain siellä, niin se ei ole ollenkaan turvallista.
Kaikki roomate, ystävä tai perheenjäsen tarvitsee vain kaksoisnapsauta, ja voila.
Siellä on kaikki summittainen tiedostot yritit poistaa.
Niinpä useimmat meistä ainakin tietää, että olet oikealla painikkeella tai Ctrl-osoittamalla
ja tyhjennä roskakori, tai jotain.
Mutta silloinkin, että ei oikein tepsiä.
Sillä mitä tapahtuu, kun olet tiedoston kiintolevylle
joka edustaa jotkut Word-asiakirjan tai joidenkin JPEG?
Ja tämä edustaa kiintolevyn, ja sanokaamme tämä suikale täällä edustaa tiedoston,
ja se koostuu koko joukko 0: n ja 1: n.
Mitä tapahtuu, kun ei vain vedä että tiedoston roskakoriin tai roskakoriin,
mutta myös tyhjentää sen?
Tavallaan mitään. Se ei ole mitään nyt.
Nyt se on vain mitään, koska vähän jotain tapahtuu muodossa tämän taulukon.
Joten siellä jonkinlainen tietokantaan tai taulukkoon sisällä tietokoneen muistiin
että pohjimmiltaan on 1 sarake tiedostoja nimiä,
ja 1 sarakkeen tiedoston sijainti, jossa tämä voi olla paikalla 123, vain satunnaisluku.
Joten meillä voisi olla jotain x.jpg, ja sijainti 123.
Ja mitä tapahtuu sitten, kun tyhjentää roskakorin?
Se menee pois. Mutta mitä ei mene pois on 0: n ja 1: n.
>> Joten mitä sitten yhteys PSET 4?
No, PSET 4, vain koska olemme vahingossa poistetaan
compact flash-kortti, joka oli kaikki nämä kuvat,
tai vain koska se huono tuuri tuli vioittunut,
ei tarkoita, että 0: n ja 1: n ei vielä ole.
Ehkä muutama heistä menetetään, koska jotain todella vioittunut
siinä mielessä, että jotkin 0: n tuli 1: n ja 1: n tuli 0: n.
Pahoja asioita voi tapahtua, koska viallisista ohjelmistojen tai viallinen laitteisto.
Mutta monet näistä bittiä, ehkä jopa 100% heistä ovat edelleen olemassa,
se on vain, että tietokone tai kamera ei tiedä, missä JPEG 1 alkoi
ja jos JPEG 2 aloitettu, mutta jos, ohjelmoija,
tietää, ja vähän taju, kun nämä JPEG ovat tai mitä he näyttävät,
voit analysoida 0: n ja 1: n ja sanoa, "Ooh. JPEG. Ooh, JPEG. "
Voit kirjoittaa ohjelman lähinnä vain varten tai kun silmukka
että toipuu jokainen näistä tiedostoista.
Joten oppitunnin jälkeen, on aloittaa "turvallisesti" pyyhkien tiedostot
Jos haluat välttää kokonaan. Kyllä?
[Student kysymys, käsittämättömällä]
>> On enemmän muistia kuin teit ennen -
Oh! Hyvä kysymys. Miksi sitten tyhjennyksen jälkeen roskakoriin,
Onko tietokoneesi kertoa, että sinulla on enemmän tilaa kuin teit ennen?
Pähkinänkuoressa, koska se valehtelee. Teknisesti, sinulla on enemmän tilaa.
Koska nyt olet sanonut, voit laittaa muita juttuja, jos tiedoston kerran oli,
mutta se ei tarkoita bitit ovat menossa pois,
ja se ei tarkoita bitit ovat muuttaneet kaikki 0: n, esimerkiksi turvallisuussyistä.
Sitä vastoin, jos "turvallisesti" poistaa tiedostoja, tai fyysisesti tuhota laite,
todella on ainoa tapa, joskus noin että.
Joten miksi emme jätä tähän osittain pelottava note, ja näemme sinut maanantaina.
CS50.TV