[Powered by Google Translate] [НЕДЕЉА 5]
[Давид Ј. Малан, Универзитет Харвард]
[Ово је ЦС50.] [ЦС50.ТВ]
[Жена] Лаже, око шта, ја не знам.
[Човек] Дакле, шта знамо?
[Воман] Тако у 9:15, Реј Сантоиа био на банкомату.
[Човек] Дакле питање је, шта је он радио у 9:16?
[Жена] Пуцање на 9 мм у нечему.
Можда је видео снајперисту.
[Човек] Или је радио са њим.
[Жена] Чекај. Вратите један.
[Човек] Шта видиш?
[♫ ♫ напетом музика]
[Жена] Донесите му лицем нагоре. Пун екран.
[Ман] Његове наочаре. >> Ево одраз.
[♫ ♫ напетом музика]
[Човек] То је бејзбол тим на Нуевита је. То је њихов лого.
[Жена] И он говори да ко носи ту јакну.
>> [Дејвид Малан] Дакле, ово је ЦС50 седмице 5, а данас смо упропасте мало телевизије и филмова за вас.
Дакле, када сте гледали емисију попут овог овде,
и пандури рекли "Да ли чисти да до?" или "Енханце"
нема побољшати у стварном свету.
У ствари, оно што заиста добити је мало нешто овако.
Сам извукао сам једну од особља фотографија из странице.
То је програм који се зове Пхотосхоп. Ово је 1 од 2 Бовденс,
1 од 3 Бовденс заправо, данас, јер смо госпођу Боуден и овде, са Робом и Павла.
Али овде је Роб на екрану, а ако ми увећај тог одсјајем он је увек имао у свом оку,
шта ви заправо видите да оно што видите је оно што добијете.
Ово је "побољшана", тако да "ЦСИ" да га мало погрешно.
Постоји још једна снимак, ако можемо изабрати на "ЦСИ" само мало дуже.
Ово је један леп израз за убудуће изговори ако желите да
звук техничке са пријатељима када је, заиста, ви кажете апсолутно ништа.
>> [Човек] Недељама сам истраживао таксиста Убица убиства
са одређеним морбидне фасцинације.
[Воман # 1] Ово је у реалном времену.
[Воман # 2] Ја ћу направити ГУИ интерфејс помоћу Висуал Басиц, види да ли могу да пратим ИП адресу.
>> [Малан] Дакле звук ван синхронизације са стране, стварајући ГУИ интерфејс помоћу Висуал Басиц
да пратите ИП адресе је потпуна бесмислица.
Ових дана не би користили Висуал Басиц,
нема потребе за ГУИ и ИП адреса била технички исправна термин.
Па пази за то, а један од мојих омиљених:
Ова је мало тајанствени, зато што је потребно да знате други језик.
Постоји језик зове Објецтиве-Ц, који је надскуп Ц.
Што значи да је Ц плус неке додатне функције, међу њима објектно оријентисане програмске.
И то је језик који је Аппле иОС популаризовао за програмирање.
И тако ево снимак из другог емисији Све у свему, од "Нумберс"
да, ако стварно погледате пажљиво на ТиВо и паузе у правом тренутку,
видећете да је оно што гледаш није баш оно што се описује.
И дозволите ми да покушам другачији аудио конектор овде и видим да ми не можемо
задржи звук у синхронизацији овај пут.
Дајем ти "Бројеви".
>> [Ман # 1] То је 32-битни ИПв4 адреса.
[Човек # 2] ИП, то је интернет. >> Приватна мрежа. То је Анита приватна мрежа.
[Малан] Ок. Ово је Објецтиве-Ц, а то је за бојење програм неке клинац,
као што можда може закључити из имена променљиве тамо.
Тако да, онда, био "Бројеви". Зато данас и ове недеље уводимо
мало света форензике и контекст у проблеме.
Данас ће бити скраћени предавање јер има посебан догађај овде
након тога, па ћемо завирити, а зафркавати и студенте и родитеље слично данас
са неким стварима које су на хоризонту.
Међу њима, од понедељка, имаћете још неколико другова.
ЕДКС, Харвард и МИТс нови онлине иницијатива за отворене цоурсеваре
и више, лансира на кампусу харвардском у понедељак.
Што значи да долазе понедељак ћете имати - као последњег пребројавања,
86.000 додатних школски другови ће пратити уз ЦС50 је предавања
и секције и сцреенсхотс и проблем сетова.
И као део тога, ви ћете постати чланови оснивачке класе
ЦС50 и сада ЦС50к.
>> Као део тога, сада схватају да ће бити неких упсидес као добро.
Да бисте добили спреман за ово, за масовно броја ученика,
Довољно је рећи да, иако имамо 108 поздрав и ЦАС,
Није баш најбољи студент / наставник однос када смо погодили 80.000 остале студенте.
Дакле, ми не идемо да се класирање толико проблем поставља ручно.
Дакле, уведен ове седмице у проблему скупа ће бити ЦС50 хотела,
која ће бити командне линије унутар апарата
да ћете добити када га ажурирати касније овог викенда,
а ви ћете моћи да покренете команду, проверите 50,
на сопствену псет, а ви ћете добити неке повратне информације о томе да ли ваш програм
исправна или неисправна у складу са различитим спецификацијама дизајна које смо дали.
Тако више о томе и проблем скуп спецификација и
су ЦС50к школски другови ће користити ово као добро.
>> Дакле, проблем сет 4 је све о форензике.
И овај комад инспирисан неким реалним стварима,
где, када сам био на постдипломским студијама сам интерниран за време са
у Миддлесек Цоунти је Окружно јавно тужилаштво ради форензичку посао
са својим оловом форензичким истражитеља, и шта то износи
је, мислим да сам поменуо протеклих неколико недељу, је маса државне полиције или других
доћи, они ће отпасти ствари као што су хард дискови и ЦД и флопи дискова
и слично, а онда је циљ канцеларије форензике је био да се утврди да ли
било или није доказ неке врсте.
Ово је специјални истраге јединица, тако да је било бело-оковратника криминала,
било је више забрињава врста злочина,
ишта укључује неку врсту дигиталних медија, испада да није тако много људи
напишу емаил каже "Ја сам то урадио."
Дакле, врло често ове форензика претраге нису појавили све то много воћа,
али понекад би људи пишу такве мејлове.
Дакле, понекад су напори награђени.
>> Али да доведе до ове судску псет ћемо представити у псет 4 бита графике.
Тако да вероватно узети те ствари здраво за готово, ЈПЕГ, ГИФ и као ових дана,
али ако заиста мисле о томе, слика, баш као Робов лице,
може бити моделиран као низ тачака, или пиксела.
Сада, у случају лица Робов, ту је све врсте боја,
и ми смо почели да видите појединачне тачке, отхервиде познате као пиксела,
када смо почели да Зоом ин
Али, ако смо поједноставили свету мало, и само да кажем да ово овде је Роб
у црно и бело, добро, да представљају црно-беле, можемо да користимо бинарни.
А ако ћемо користити бинарни, 1 или 0, можемо изразити ту исту слику
од насмејаног лица Робов са овом обрасцу битова: 11000011 представља
бела, црвена, црна, бела, сива, црна, бела бела.
И тако то није велики скок, онда да почнемо да разговарамо о шареним фотографијама.
Ствари које би видети на Фацебоок-у или узети са дигиталним фотоапаратом,
али, наравно, када је реч о бојама, морате више бита.
И сасвим уобичајене у свету фотографије је да се користе не 1-битну боју,
јер то сугерише, али 24-битне боје, где ви у ствари добијате милионе боја.
Дакле, као иу случају када смо зумирао Робов оку,
то је било који број од милиона различитих шареним могућности.
>> Тако ћемо увести ово проблем сету 4 као иу објашњења,
која ће бити данас у 3:30 уместо уобичајеног 2:30 због предавања у петак овде.
Али видео ће бити онлајн, као и обично, сутра.
Такође ћемо вас упознати са другом формату.
Дакле, ово је намерно требало да изгледа застрашујуће на први поглед,
али то је само нека документација за Ц струцт.
Испада да је Мицрософт, пре неколико година, помогао популаризује овај формат,
зове битмап формат, БМП и то је супер једноставан,
шарене графички формат који је коришћен за дуже време
а понекад и даље за тапете на десктоп.
Ако помислим на Виндовс КСП и брежуљке и плавог неба,
то је обично БМП или битмап слика, а битмапа
су забава за нас, јер они имају мало више комплексност.
То није баш тако једноставно као овај матрице од 0 и 1-а;
уместо тога, имате ствари као заглавље на почетку фајла.
Другим речима, унутар бмп фајл. Се гомила 0 и 1 а,
али постоје неки додатни 0 и 1 је тамо.
И испоставило се да је оно што смо вероватно узели здраво за готово годинама,
Формати попут доц или.. клс или МП3. или МП4.,
без обзира на формати које сте упознати са.
Па, шта то уопште значи бити формат?
Јер на крају крајева, све ове фајлове које користимо имају само 0 и 1 да
а можда и оне 0 и 1 је представљају, б, ц, преко АСЦИИ или слично,
али до краја дана, то је само 0 и 1 а.
>> Дакле, људи само повремено одлучују да измисле нови формат датотеке
где стандардизује шта ће обрасци бита заправо значи.
И у овом случају овде су људи који је пројектовао битмап формат
рекао је да је на првом бајта у битмап датотеке, као што је означено офсет 0, тамо,
тамо ће бити неки загонетно назван променљива зове бфТипе,
која само стоји на битмап датотеке типа; који тип битмап фајла је ово.
Можете закључити, можда, из другог реда који офсет 2, бајт број 2,
има образац 0 и 1 да то представља шта?
Величина нечега, и то иде даље од тамо.
Дакле, у сету проблема 4, бићете ходали кроз неке од тих ствари.
>> Нећемо завршити брине о свима њима, али приметите да почне да се занимљиво
око линије или бите 54, ргбтБлуе, зелена и црвена.
Ако сте икада чули акроним РГБ, црвена зелена плава, ово је референца на то.
Пошто се испоставило да могу да сликам све боје дуге
са неким комбинацији црвене и плаве и зелене.
И, у ствари, родитељи у соби могу сетити неких од најранијих пројектора.
Ових дана, само да видите 1 јарко светло долази из објектива.
Али да се вратимо у дан, имали сте црвени сочива, плаву сочиво и зелено сочиво
и заједно су усмерене на екрану и формирао шарене слике.
И често средње школе и гимназије би имали те објективе
све-тако-мало накриво, тако да су били нека врста виде дупле или троструке слике,
али то је идеја. Имали сте црвено и зелено и плаво светло премазивали слику.
А тај исти принцип се користи у рачунарима.
>> Дакле, међу изазова, онда за вас у проблему сет 4
ће бити неколико ствари: једна је да се заиста променили величину слике.
Да узмемо у обрасцу 0 и 1 а,
схвати који комади 0 и 1 је представљају оно у структури овако,
и онда схватим како да понове пикселе: Црвени, блуз, Зелени
унутра, тако да када слика изгледа овако почетку може изгледати овако, уместо после тога.
Међу осталим изазовима, такође, ће бити да ћете бити предат
форензички слика стварне датотеке са дигиталног фотоапарата
и на тој камери, некада давно, били гомила фотографија.
Проблем је, ми смо случајно избрисана или је слика оштећена некако.
Лоше ствари се дешавају са дигиталним камерама, тако да смо брзо копира све од 0 и 1 је
офф ту картицу за вас, чувају их све у 1 великом фајлу, и онда ћемо их предати вама
у проблему сет 4, тако да можете написати програм у Ц са којима се опорави
свих тих ЈПЕГ, идеално.
И испоставило се да су ЈПЕГ, иако су донекле сложене формату,
они су много сложенији од овог насмејано лице овде.
Испада да сваки ЈПЕГ почиње са истим обрасцима 0 и 1 а.
Дакле, користећи вхиле петљу или за петље или слично,
можете прелазили преко свега 0 и 1 је у овом форензичке слику
и сваки пут кад видим посебан образац који је дефинисан у спецификацији је проблем сет а,
можете претпоставити, "Ох, овде је, са врло великом вероватноћом,
почетак ЈПЕГ, 'и чим вам исти образац,
неки број бајтова или килобајтима или мегабајтима касније,
можете претпоставити, "Оох! Овде је други ЈПЕГ фотографија сам после првог.
Дозволите ми да престану да читају тај први фајл, почнем да пишем овај нови. "
А излаз вашег програма за псет 4 ће бити чак 50 ЈПЕГ.
А ако то није 50 ЈПЕГ, имате мало петље.
Ако имате неограничен број ЈПЕГ, имате бесконачну петља.
Тако да ће, такође, бити веома чест случај.
То је оно што је на хоризонту.
>> Квиз 0, иза нас. Схватите, по мом е-маил, да увек има људи
који су обоје срећни, некако неутрално, и тужно око квиза 0 пута.
И молим те немој се допре до мене, глава поздрав, Замила, ваш сопствени ТФ
или један од ЦАС да знате ако желите да разговарају о томе како су ствари ишле.
>> Тако да импресионира родитеље овде у соби,
шта је ЦС50 библиотека? Добар посао.
Шта је ЦС50 библиотека? Да? [Студентски одговори, неразумљив]
>> Добро, добро. Дакле, то је претходно написану сет кода који смо, особље, написао
пружамо вама, да обезбеди неке заједничке могућности.
Ствари бих донеси ми низ; донеси ми једну инт, све функције које су овде наведене.
Почевши од сада, почнемо да се заиста узме ове точкове обуке искључен.
Тако ћемо почети да се одузме "ниску" од тебе,
који је, опозив, био само синоним за оно што стварни тип података? цхар *.
Дакле, за родитеље, то је вероватно - то је добро, тако да цхар ћемо почети да видимо
на екрану све више као уклонимо "жицу" из нашег речника,
бар када је у питању заправо писања кода.
Слично томе, ми ћемо престати користећи неке од ових функција толико,
јер наши програми ће добити софистициранија
него само пишу програме који седе тамо са одзивник трепери,
чекајући корисника да куцате нешто унутра
Добићете своје инпуте од другде.
На пример, добићете их од низа битова на локалном хард диску.
Уместо тога ћете их у будућности са мрежном везом, негде неки сајт.
Дакле, хајде да одлепите овом слоју за први пут, и повуците ЦС50 апарат
а овај фајл се зове ЦС50.х, који сте били оштри, укључујући недељама.
>> Али, хајде да видимо шта заправо је унутар тога.
Дакле, на врху фајла у плавом је само гомила коментарима,
Информације о гаранцији и лиценцирање. То је нека врста заједничког парадигме
у софтверу, јер је много софтвера ових дана је оно што се зове "опен соурце"
што значи да је неко написао код
и учинио га слободно доступни, не само да ради и да се користи,
али заправо чита и мења и интегришу у свој рад.
Дакле, то је оно што сам користио, опен соурце софтвер,
иако у веома малом облику.
Ако сам доле помицати прошлости коментарима, мада ћемо почети да видимо још неке познате ствари.
Дакле, приметите на врху овде, да ЦС50.х датотека садржи гомилу хеадер фајлова.
Сада, већина од њих нисмо видели раније, али једно је
упознати, која од њих смо видели, мада кратко, тако далеко?
Да, стандардне библиотеке. Стдлиб.х има маллоц,
па када смо почели да разговарамо о динамичким меморијским средстава,
којима ћемо се вратити на следећу недељу, као и ми почели укључујући тог фајла.
Испоставило се да воид и истинито и лажно заправо не постоји у Ц, сама по себи,
уколико сте укључили овај фајл овде.
Тако смо, за неколико недеља, била укључујући стандардне боол.х
тако да можете користити појам боол, тачно или нетачно.
Без тога, морали бисте да сортирате лажних томе и користи инт
и само произвољно претпоставити да је лажно 0 и 1 је истина.
>> Сада, ако ми доле помицати даље, овде је наша дефиниција ниске.
Испоставило се, као што смо рекли раније, да тамо где је то * је не битно.
Можете чак и да имамо простора за све.
Ми, овај семестар, су га промовише, јер то би јасно да * има везе са типом.
Али схвати, као уобичајено, ако не и мало више заједнички, да га стави тамо
али функционално је иста ствар.
Али сада, када смо прочитали доле даље, хајде да погледамо рецимо, ГетИнт,
јер смо користили да је, можда, пре свега овом семестру.
И овде је ГетИнт. То је шта?
Ово је прототип. Тако често, ми смо ставили прототипове на врховима наших ц датотеке.,
али такође можете ставити прототипова у хеадер фајловима, Х фајлове.,
као овај овде, тако да када пишете неке функције
да желите да други људи могли да користе, што је управо случај са ЦС50 библиотеци,
Ви не само да спроведе своје функције у нешто попут ЦС50.ц,
такође ставио прототипова није на врху тог фајла, али на врху заглавља датотеке,
онда заглавље датотеке је оно пријатељи и колеге су,
оштрим укључе у сопственом коду.
Дакле, све ово време сте били укључујући и све ове прототипове
ефективно на врху датотеке, али начин на овај нагли укључују механизам
који у суштини копија и пасте овај фајл на свој.
Сада, овде је неке прилично детаљна документација.
>> Ми смо прилично узети здраво за готово да ГетИнт добија инт,
али се испоставило да је то неки кутак случајевима, зар не?
Шта ако корисник упише у броју који је сувише велик?
Куинтиллион, да једноставно не може да стане унутар једног инт?
Шта је очекивано понашање? Па, у идеалном случају, то је предвидљив.
Дакле, у овом случају, ако сте заиста прочитали ситним словима,
видећете да ако линија не може да се чита, тај повратак ИНТ_МАКС.
Никада нисмо причали о овоме, али на основу његове капитализације,
шта је то, вероватно?
То је константна, тако да је то нека посебна константа која је вероватно прогласила
у једној од тих заглавља датотека које је горе високо у датотеци,
и ИНТ_МАКС је вероватно нешто као, отприлике, 2 милијарде евра.
Идеја је да због тога треба да се некако означи да је нешто кренуло наопако,
ми, да, има 4 милијарде бројева на располагању,
негативан 2 милијарде до 2 милијарде евра, дати или узети.
Па, оно што је заједничко у програмирању је само украсти један од тих бројева.
Можда 0, можда 2 милијарде, можда негативно 2 милијарде.
Дакле, трошите један од ваших могућих вредности, тако да можете да се посвете свету
да ако нешто крене наопако, ја ћу вратити овај супер велику вредност.
Али ви не желите да куцате нешто корисник шифровану као "2, 3, 4 ..."
од заиста великог броја, где си уместо тога генерализовати као константа.
Па стварно, ако сте као анални протеклих неколико недеља,
кад год зовем ГетИнт, требало је проверити са ако стању.
Да ли корисник тип у ИНТ_МАКС, или тачније,
урадио ГетИнт ПОВРАТАК ИНТ_МАКС? Јер, ако јесте,
То заправо значи да нису откуцајте га, нешто је пошло наопако у овом случају.
Дакле, ово је оно што се обично назива "сентинел" вредности, који само значи посебан.
>> Па, хајде да се сада окрену у на ц фајлове..
Тхе Ц Фајл је постојала у апарату за неко време,
и, у ствари, апарат има то компајлираних за вас
у тој ствари смо назвали "објекат код"
али то једноставно није битно за вас, где то је зато што је систем зна,
у овом случају, где је, апарат.
Али хајде идите доле сада ГетИнт, и видети како ГетИнт је радила сво ово време.
Дакле, овде имамо сличне коментаре пре.
Дозволите ми да увећате само део кода,
и шта имамо за ГетИнт је следећи.
Она не узима улаз и враћа инт, док (истина), тако да имамо намерно бесконачну петљу
али, вероватно, ми ћемо разбити од овога, некако, или да се врате из овога.
Дакле, хајде да видимо како ово функционише. Па, изгледа да се користе ГетСтринг
у овој првој линији унутар петље, 166.
Ово је сада добра пракса, јер под којим околностима
могао ГетСтринг врати овај посебан кључних речи, нулл?
Ако нешто крене наопако. Шта може да крене наопако када зовете тако нешто ГетСтринг?
Да? [Студентски одговор, неразумљив] >> Да. Можда маллоц не успе.
Негде испод хаубе ГетСтринг зове маллоц,
које додељује меморију, што омогућава компјутерски продавницу
све знакове да корисник укуцава у тастатури.
И претпоставимо да корисник има много слободног времена
и откуцали више, на пример, од 2 милијарде знакова.
Више знакова него што рачунар има чак РАМ-а.
Па, ГетСтринг мора бити у стању да значи да са вама,
чак и ако је ово супер, супер неуобичајено кутак случај.
Она мора да се некако могли да средим ово, па ГетСтринг,
ако се вратимо и чита своју документацију, не, у ствари, повратак НУЛЛ.
Сада, ако ГетСтринг не враћајући НУЛЛ, ГетИнт ће успети
по повратку ИНТ_МАКС, баш као Сентинел.
Ово су само људске конвенције. Једини начин да би знали да је ово случај
је читајући документацију.
Па хајде идите доле где Инт заправо ГотИнт.
>> Дакле, ако сам дођите мало даље, у складу 170. имамо коментар изнад ових редова.
Тако смо изјављујем, у 172, инт н и цхар Ц, а затим тај нови функција
које неки од вас су наишао раније, али ссцанф.
То је скраћеница за гудачки скенирања ф.
Другим речима, ми дају ниску и ја ћу га скенирати за делове информација од интереса.
Дакле, шта то значи? Па, претпоставимо да куцам у, буквално, 1 2 3 на тастатури,
и онда притисните ентер. Који је тип података 1 2 3 када вратио ГетСтринг?
Очигледно је ниска, зар не? Имам низ, па 1 2 3 је заиста "1 2 3"
са \ 0 на крају. То није инт.
То није број. Изгледа као број, али то није стварно.
Дакле, шта ГетИнт треба да урадим? Она мора да скенира ту ниску лево-десно,
1 2 3 \ 0, и некако претворити га у стварном цео број.
Сада можете да схватите како да то урадите.
Ако помислим на псет 2, ви вероватно имаш мало пријатно
са Цезаром или Вигенере тако да можете да прелазите преко низ,
можете да конвертујете знакова да Интс са трзалице. То је много посла.
Зашто не позовете функцију као ссцанф који ради за тебе?
Дакле ссцанф очекује аргумент, у овом слуцају се зове линија, која је ниска.
Онда спецификовати у наводницима, врло сличан принтф,
Шта сте очекивали да видите у овом низу?
Оно што ја овде говорим, ја очекујем да видим децимални број и можда карактер.
И ми ћемо видети зашто је то случај у само једном тренутку.
Испоставило се да је овај запис је сада подсећа на ствари
почели смо да причамо о пре нешто више од недељу дана.
>> Шта је и н и ц и раде за нас овде? [Студентски одговори, неразумљив]
>> Да. То ми даје адресу н и адресу ц.
Дакле, зашто је то важно? Па, знаш да је са функције у Ц
увек можете да се вратите вредност или никакву вредност уопште.
Можете да врати инт, стринг, флоат, цхар, шта год.
Или можете да се вратите празнину, али само да се максимално врати 1 ствар.
Али, овде желимо да ме врати ссцанф мозда инт, децимални број,
и знак, а ја ћу објаснити зашто је знак за тренутак.
Дакле, можете ефикасно желе да се врате ф 2 ствари, то једноставно није могуће у Ц.
Дакле, можете да радите око тога проласком у 2 адресе,
јер чим предате Функција 2 адресе, шта могу да функционишу са њима?
То може писати на те адресе. Можете да користите операцију * и "иди тамо" на сваки од тих адреса.
То је врста овог бацкдоор механизма, али је веома уобичајено за промену вредности променљивих
на више од само 1 место, у овом случају 2.
Сада, приметите сам проверу за == ТО1, а затим враћа н ако се то, у ствари, процењују на истина.
Дакле, шта се дешава? Па, технички, ми заиста желимо да се деси у ГетИнт је ово.
Ми желимо да анализирамо, да тако кажемо, ми желимо да чита стринг
"1 2 3" и ако изгледа као да је број тамо,
шта ми говориш ссцанф да урадите је да се тај број, 1 2 3, у овом варијабилном н за мене.
Зашто, онда, да ли морам и ово?
Каква је улога, такође говори ссцанф, можда ћете овде добити карактер.
[Студентски говорећи, неразумљив] >> Не - децимална тачка може да функционише.
Идемо сматрају да размисли за тренутак. Шта друго?
[Студент, неразумљив] >> Дакле, добра мисао, то може бити НУЛЛ карактер.
То заправо није, у овом случају. Да? [Студент, неразумљив]
>> >> АСЦИИ. Или, да генерализујемо још даље.
Тхе% ц је само за еррор-цхецкинг.
Ми тамо не желе да буду знак после броја,
али шта то ми омогућава да урадите је следеће:
Испада да ссцанф, поред чувања вредности у н и ц, у овом примеру овде,
шта је то такође нема је то враћа број променљивих ставила вредности за
Дакле, ако само откуцате 1 2 3, онда само% д ће да одговара
и само н добија складишти у вредности као 1 2 3 и ништа не стави у ц;
ц остаје смеће вредност, да тако кажем.
Смеће јер никада није иницијализована као неку вредност.
Дакле, у том случају, ссцанф даје 1, јер сам један од тих насељена показивача,
у ком случају, сјајно. Имам инт, па сам ослободити линију да бисте ослободили меморију
да ГетСтринг заиста издваја, а онда сам се врати н.
Иначе, ако сте се икада запитали где да поновите изјава долази, долази из овде.
Ако, с друге стране, ја сам укуцати 1 2 3 фоо,
само неки случајни редослед текста, ссцанф ће да види,
оох, број, оох, број, оох, број, оох - ф.
А то ће ставити 1 2 3 у н.
То ће ставити Ф у Ц, а затим се вратите 2.
Тако смо, користећи само основну дефиницију понашања сцанф а,
врло једноставан начин - па, комплекс на први поглед, али на крају дана,
прилично једноставан механизам да се каже, постоји инт, и ако је тако, да је једина ствар коју сам нашао?
А бели простор овде је намерна. Ако сте прочитали документацију за ссцанф,
то вам говори да ако укључите комад белог простора на почетку или на крају,
ссцанф ће такође омогућавају кориснику, из било ког разлога, да се удари размак 1 2 3, а то ће бити легитимна.
То неће викати на корисника, само зато што је погодио размакницу на почетку или на крају,
што је само мало више разумљив.
>> Сва питања, затим, на ГетИнтс? Да?
[Студентски питање, неразумљив]
>> Добро питање. Шта ако сте управо уписали у знак, попут Ф, и притисните ентер
без икаквог куцања 1 2 3, шта мислите понашање ове линије кода би онда било?
Дакле ссцанф може да покрије превише, јер у том случају,
то неће попунити Н или Ц; то ће уместо врате 0.
У том случају, ја слушам тај сценарио, јер је очекивана вредност желим је 1.
Желим само 1, а само 1 ствар да се попуни. Добро питање. Остали?
>> Добро, хајде да не идемо кроз све функције у овде,
али онај који изгледа као да се, можда, преостали интерес
је ГетСтринг јер испада да ГетФлоат, ГетИнт,
ГетДоубле, ГетЛонгЛонг све пунта доста њихове функционалности за ГетСтринг.
Па хајде да погледамо како се овде спроводи.
Ово изгледа мало комплекс, али он користи исте основе
да смо почели да причају о прошлој седмици. Дакле, у ГетСтринг,
која не узима аргумент по празнини овде,
и враћа стринг, тако да сам прогласио низ зове бафер.
Ја стварно не знам шта да ће да се користи за још, али ћемо видети.
Изгледа као капацитет је, по дефаулту, 0, не сасвим сигуран где ово иде.
Нисте сигурни шта н ће да се користи за још.
Али сада је све мало више интересантно, па је у складу 243,
изјављујемо инт ц, ово је врста глупог детаљ.
Цхар је 8 бита, а 8 битова може да ускладишти колико различите вредности?
256. Проблем је, ако желите да имате 256 различитих АСЦИИ знакове,
које постоје, ако размишљам, а то није нешто што се памти.
Али ако помислим на те велике АСЦИИ табели смо имали недеља пре,
били тамо, у том случају, 128 или 256 АСЦИИ знакова.
Ми смо користили све обрасце 0 и 1 је горе.
То је проблем ако желите да будете у стању да детектује грешку.
Јер ако већ користите 256 вредности за своје ликове,
ниси стварно планирају унапред, јер сада нема начина да каже,
"Ово није легит лик, то је нека погрешна порука."
Дакле, оно што је свет ради, они користе следећу највећу вредност,
нешто као инт, тако да имате лудог број битова,
32 за 4 милијарде могућих вредности, тако да можете једноставно завршити коришћење,
суштини, 257 од њих, 1 који има неку посебну значење као грешке.
>> Дакле, хајде да видимо како ово функционише. У складу 246, имам велику вхиле петљу
који се зове фгетц ф значење фајл, гетц, а затим стдин.
Испоставило се да је ово само још прецизнији начин да се каже "чита улаз са тастатуре."
Стандардни улаз значи тастатура, стандардни излаз значи екран,
и стандардна грешка, која ћемо видети у псет 4, значи екран,
али посебан део екрана, тако да то није спојени
са стварним излаз који сте намеравали да штампају, али више о томе у будућности.
Дакле фгетц само значи прочитао један карактер са тастатуре, и чувајте га где?
Чувајте га у Ц, а затим проверите, тако да сам само ја овде користи неке Боолеан везника,
проверите да се то не деси једнака \ н, па је корисник ударио ентер.
Ми желимо да зауставимо у том тренутку, крај петље, а такође желите да проверите
за специјалне константа ЕОФ, који, ако знате или погодите - шта то станд фор?
Крај датотеке. Дакле, ово је врста бесмислена, јер ако ја куцам на тастатури,
Стварно нема датотека укључени у ово,
али ово је само нека врста генеричке термин користи да означи
да ништа друго не долази из прстију цовека. ЕОФ. Крај датотеке.
Као на страну, ако сте икада погодио контролу д на тастатури,
не да би тек треба, ти си ударио контролу ц.
Али контрола д шаље ову посебну стално зове ЕОФ.
>> Дакле, сада имамо само мало динамичку алокацију меморије.
Дакле, ако је н + 1> капацитет, сада ћу објаснити н.
н се само колико бајтова су тренутно у бафер,
стринг који тренутно гради од корисника.
Ако имате више знакова у свом баферу него што имају капацитет у бафер,
интуитивно, оно што треба да урадите је издвојити више капацитета.
Ја ћу да прелистам преко неке од аритметике овде
и фокусирати се само на ову функцију овде.
Знаш шта маллоц, или бар генерално познато.
Погоди шта реаллоц ради. [Студентски одговор, неразумљив]
>> Да. И није то баш и додао меморију, он поново додељује меморију како следи:
Ако још увек има места на крају стринга да вам дају више од тог сећања
него што је то првобитно вам даје, онда ћете добити ту додатну меморију.
Дакле, можете само стављање жице знакове бацк то бацк враћа се назад.
Али ако то није случај, јер си чекао предуго
и нешто случајно добио плоппед у меморији тамо, али ту је ектра
меморија овде доле, то је у реду. Реаллоц ће учинити све тешке подизање за вас,
померите ниску сте прочитали у тако далеко одавде,
спусти га тамо, и онда вам дати још неке писте у том тренутку.
Тако је и са таласом руке, дозволите ми да кажем да је оно што ради ГетСтринг
је то почиње са малом бафер, можда 1 сингл карактера,
а ако корисник упише у 2 карактера, ГетСтринг завршава
називајући реаллоц и каже, 'Ох, 1 лик није било довољно.
Дај ми 2 карактера. ' Онда, ако читате логици петље,
то ће рећи, "Оох, кориснику откуцан у 3 карактера.
Дај ми сада не 2, али 4 карактера, онда ми дај 8, онда дај ми 16 и 32 ".
Чињеница да сам удвостручити капацитете сваки пут
значи да бафер неће да полако расте.
То ће расти супер брзо, и шта може да буде предност тога?
Зашто сам удвостручује величину бафера, иако корисник
Можда само треба 1 додатни карактер са тастатуре?
[Студентски одговор, неразумљив]. >> Шта је то?
Управо тако. Не морате да расте тако често.
А ово је само врста - ти си хеџинг овде своје опкладе.
Идеја је да не желите да позовете реаллоц много, јер има тенденцију да буде спора.
Сваки пут када питате оперативни систем за меморију, као што ћете ускоро видети
у будућем проблем сету, она тежи да потраје.
Дакле, смањење тог времена, чак и ако губите неки простор, тежи да буде добра ствар.
>> Али ако читамо кроз завршном делу ГетСтринг овде,
и опет, разумевање овде сваки једну линију није толико важно данас.
Али приметите да се на крају позива маллоц опет, и додељује
тачно онолико бајтова колико треба за ниску
и онда баца позивајући бесплатан, претерано велики бафер,
ако је заиста добио дупло превише пута.
Укратко, то је како ГетСтринг је радио све ово време.
Све што ради је чита један карактер у време опет и опет и опет
и сваки пут је потребно неко додатно меморију, она пита оперативни систем за њу позивом реаллоц.
Има ли питања? У реду.
>> Напад. Сада када смо разумели смернице, или барем
све су упознати са показивачима,
размотримо како цео свет почиње да се руши
ако не баш одбранити адверсијалног корисника,
људи који покушавају да пијук у вашем систему.
Људи који покушавају да украду ваш софтвер заобилажењем неки регистрациони код
да они иначе ћете морати да откуцате унутра
Узмите овде погледајте на овом примеру, који је само Ц код
који има функцију главног на дну, која позива функцију фоо,
и шта се то пролази на фоо? [Студентски] један аргумент.
>> Један аргумент. Дакле, аргв [1], што значи да прву реч корисник откуцали
у командној линији после а.оут или шта је програм зове.
Дакле фоо, на врху, узима у цхар *, цхар али је само шта?
Стринг. Нема ништа ново овде, а то стринг произвољно се зове трака.
У овој линији овде, цхар ц [12], у врсти полу-техничке енглеском, шта је ова линија ради?
Низ -? Ликови. Дајте ми један низ од 12 знакова.
Тако смо могли назвати ово бафер. Је технички се назива Ц, али бафер у програмирању
само значи гомилу простора који можете ставити неке ствари унутра
>> Онда на крају, мемцпи, нисмо смо користили раније.
Али ви вероватно можете погодити шта ради. Она копира меморију.
Шта то радиш? Па, очигледно копира бар, њен улаз, у ц,
али само до дужине бара.
Али постоји буг овде.
Ок, технички стварно треба да урадите стрлен (бар) к сизеоф (инт), то је тачно.
Али, у најгорем случају овде, хајде да претпоставимо да је то је - тако, у реду.
Затим, ту је 2 бубе. Дакле, сизеоф (инт), у реду, хајде да то мало шире.
Дакле, сада постоји још буба, која је шта?
[Студентски одговор, неразумљив] >> Проверите због чега? Ок, тако да би требало да провере
за нулл, јер лоше ствари се дешавају када показивач НУЛЛ
Зато што сте можда завршити иде тамо, и не би требало никада да се иде на НУЛЛ
тако дереференцинг га са * оператера.
Дакле, то је добро, а шта друго да радимо? Логично има мана овде.
[Студентски одговор, неразумљив]
>> Дакле, проверите да ли је аргц ≥ 2?
Ок, па овде има 3 грешке у овом програму.
Нећемо провере да ли је корисник заиста уписали у чему у аргв [1], добро.
Дакле, шта је трећа буг? Да?
[Студентски одговор, неразумљив] >> Добро.
Тако смо проверили један сценарио. Ми имплицитно проверили не копирајте више меморије
него што би премашити дужину бара.
Дакле, ако је стринг који је корисник откуцао у је 10 знакова,
ово је рекао, 'Само копирајте 10 карактера.'
И то је у реду, али шта ако корисник откуцао у промпту речи на
као 20 карактера речи, ово је, говорећи копирања 20 ликова из бара у шта?
ц, иначе познат као наш бафера, што значи да управо написао податке
до 8 бајтова локацијама које не поседујете,
а ви их не поседују, у смислу да их никад није додељена.
Дакле, то је оно што је опште позната као напад тампон преливања,
или бафер прекорачење напад, а то је напад у смислу да ако је корисник
или програм који је позивањем функције ради ово злонамерно,
шта се заправо дешава следећа може бити веома лоше.
>> Хајде да овде погледам ову слику.
Ова слика представља своју гомилу меморије.
И сећам се да сваки пут када позовете функцију,
ти ово мало рама на стек, а затим још један, а затим још један и онда други.
И тако сада смо некако издвојити њих далеко као правоугаоници
било тамо на табли или на екрану овде.
Али, ако смо увећали на једном од тих правоугаоника,
када позовете функцију фоо, испада да има више на стек
унутар тог оквира и да је правоугаоник
не само к и и и и б, као што смо то говори о свап.
Испоставило се да постоје неки нижи нивои детаља,
међу њима врате адреса.
Тако испада када је главни позива фоо, главни мора да обавести фоо
Које главне адреса је у меморији рачунара.
Јер у супротном, чим фоо врши извршавање, као у овом случају овде,
када стигнете до овог близак коврџаву протезу на крају фоо,
Како дођавола не трла знам где контрола програма треба да иде?
Испоставило се да је одговор на то питање је у том црвеном правоугаонику овде.
Ово представља показивач, и то је до рачунара за складиштење, привремено,
на такозваном стеку адреса главна, тако да чим фоо врши извршавање,
рачунар зна где и шта линија у главни да се вратим.
Сачуване оквир показивач односи слично овоме.
Цхар * бар овде представља шта?
Па, сад ова плава сегмент овде је фоо је оквир, што је бар?
Ок, па бар је само аргумент да фоо функцију.
>> Дакле, сада смо поново на познатом слику.
Има још ствари и више ометања на екрану
али ово светло плави сегмент је оно што смо цртеж на табли за нешто попут замене.
То је оквир за фоо и једина ствар у томе сада налази бар,
што је овај параметар.
Али шта још треба да буде у стеку, према овом коду овде?
Цхар ц [12]. Дакле, ми такође треба видети 12 квадрата меморије,
додељен променљивој зове ц.
И заиста, ми имамо то на екрану.
На самом врху је Ц [0], а затим аутор овог дијаграма
није сметало цртеж све квадрате, али заиста постоје 12 постоје
јер ако погледате на доњем десном, ц [11], ако рачунате од 0, је 12 таквих бајтова.
Али овде је проблем: У ком правцу се ц расте?
Нешто одозго, зар не? Ако почиње на врху и расте до дна,
Не изгледа као да смо себи оставили много писте овде уопште.
Смо некако смо се сликао у углу,
и да је ц [11] је у праву против бара, што је право против показивача стека оквира,
што је право уза повратну адресу, нема више места.
Дакле, шта је импликација, онда, ако се зајебеш,
а ви покушајте да читате 20 бајтова у 12-бајтова бафера?
Где су ти 8 додатних бајтова отићи?
Унутра све остало, од којих неке је супер важно.
И најважнија ствар, потенцијално, је црвени оквир постоји, повратна адреса.
Зато претпостављам да си случајно или адверсариалли
заменити оне 4 бајта, који поентер адреса,
не само са смећем, али са бројем који се дешава да представља стварну адресу у меморији?
Шта је имплицаитон, логично?
[Студентски одговори, неразумљив] >> Тачно. Када се врати фоо
и хитови који коврџаве браце, програм ће наставити да се не врати на главни,
да ће да се врате све што је адреса у тој црвеној кутији.
>> Сада, у случају заобилажење софтвера регистрације,
шта је адреса која је се вратио се функција
које се обично добија назвао након што сте платили за софтвер и уноси свој регистрациони код?
Могли сортирате трик рачунар у не иде овде, али уместо тога, догађа овде.
Или, ако сте заиста паметни, противник заправо може уписати на тастатури,
на пример, не стварна реч, а не 20 знакова, али претпостављам да је он или она
типови у неким ликовима који представљају шифру?
И то неће бити Ц код, то ће бити ликови
који представљају бинарне машине кодове, 0 и 1 а.
Али претпостављам да су довољно паметни да се то уради, да се некако налепити у ГетСтринг одзив
нешто што је у суштини састављена кода,
а последње 4 бајта препише ту повратну адресу, и шта то адреса улаз ради?
Она чува у овом црвеном правоугаонику на адресу првог бајта у бафер.
Дакле, морате бити веома паметан, а то је много покушаја и грешке
за лоше људе тамо, али ако можете да схватите како је то велики бафер,
тако да у последњих неколико бајтова у улаз који сте дали у програм
се деси да буде еквивалент на адресу почетка свог бафера,
можете да урадите ово. Ако кажемо, нормално, здраво, и \ 0, то је оно што завршава у бафер.
Али, ако смо паметнији и пунимо тај бафер са оним што смо уопштено Зваћу код напада,
,,,: Напад, напад, напад, напад, где је то нешто што ради нешто лоше.
Па, шта се дешава ако сте заиста паметни, можете да урадите ово:
У црвеном пољу овде је низ бројева: 80, ЦО, 35, 08.
Приметимо да је одговара броју који је овде.
То је у обрнутом редоследу, али у том неком другом приликом.
Обратите пажњу да је ово повратак адреса је намерно промењен
на једнаку адресу овде, а не адреса главног.
Дакле, ако је лош момак је супер паметан, он или она ће укључити у том нападу код
нешто као, 'Делете све фајлове корисника. "
Или 'Копирајте лозинки,' или 'Направи кориснички налог да могу да се пријавите на ".
Све на све, а то је и опасност и моћ Ц.
Зато имате приступ меморији преко показивача
и стога може писати шта год желите у меморију рачунара.
Можете направити компјутерски ништа једноставно желите од
пошто је то поскакивање унутар сопствене меморије.
И тако, на овај дан, па су многи програми и толико вебсајтови који су компромитовани
своде на људе који искористе ово.
И ово може изгледати као супер-софистицираном нападу,
али не увек почињу на тај начин.
>> Реалност је да је оно лоше ће људи обично урадите је,
да ли је програм на командној линији или ГУИ програм или сајт,
је само почети да пружа глупости.
Куцате у заиста великом речи у поље за претрагу и притисните ентер,
и чекам да видим да ли су сајт сруши.
Или чекате да видите да ли програм манифестује неку поруку о грешци.
Јер ако се посреци, као негативац,
и обезбедити неки луди улаз који разбије програм,
то значи да програмер није предвидео свој лоше понашање
што значи да је вероватно да, уз довољно труда,
Довољно суђења и грешке, да схватим како да воде прецизније напад.
Дакле, колико део безбедности није само избегавање сасвим ове нападе, али их је откривање
и заправо гледа логове и види шта луди улаза имамо људе откуцане на свој веб сајт.
Шта термини за претрагу су људи уписали у ваш сајт у нади да ће неко прелива бафер?
И ово све се своди на просту основама онога што је низ,
и шта то значи за доделу и коришћење меморије?
И у вези са тим, такође, је ово.
>> Дакле, хајде да само поглед унутар чврстог диска опет.
Дакле, ви се сећате од пре недељу или две да када превучете фајлове
да је корпа рецицле или канта за смеће, шта се дешава?
[Студентски] Ништа. >> Да, апсолутно ништа. На крају, ако наиђете низак
простор на диску, Виндовс или Мац ОС ће почети брисање фајлова за вас.
Али ако вучете нешто тамо, онда уопште није сигурно.
Сва ваша члан роомате, пријатељ или породица треба да урадите је дупли клик, и воила.
Ту је све површно датотеке које сте покушали да избришете.
Дакле, већина нас барем знате да морате да десним тастером или контролише клик
и празан ђубре, или нешто слично.
Али чак и тада, баш не уради трик.
Јер оно што се дешава када имате фајл на вашем хард диску
који представља неку реч документ или неку ЈПЕГ?
И то представља ваш хард диск, и хајде да кажем ово сливер овде представља тај фајл,
и то чине гомилу 0 и 1 а.
Шта се дешава када не само да превучете тај фајл на Трасхцан или отпатке,
али га испразнити?
Некако ништа. Није сад апсолутно ништа.
Сада је то само ништа, јер мало нешто деси у виду ове табеле.
Дакле, постоји нека врста базе података или табели унутар меморије рачунара
који у суштини има 1 колону за датотеке имена,
и 1 колона за локацију датотеке, где ово може бити локација 123, само случајни број.
Дакле, можда ћемо имати нешто слично к.јпг и локацију 123.
И шта се онда дешава, када испразните смеће?
То иде даље. Али, оно што не иде далеко је 0 и 1 а.
>> Па шта је, онда, веза псет 4?
Па, са псет 4, само зато што смо случајно смо избрисани
Цомпацт Фласх картица која је имала све од ових фотографија,
или само зато што тако лоше среће постао корумпиран,
не значи да је 0 и 1 да не увек ту.
Можда неке од њих су изгубили зато што нешто добио оштећен
у смислу да су неки постали 0 је 1 и 1 је постао 0 а.
Лоше ствари се може десити због бугги софтвера или хардвера неисправни.
Али, многи од тих битова, можда чак и 100% њих су и даље ту,
то је само да се рачунар или камера не зна где ЈПЕГ 1 почело
и где ЈПЕГ 2 почео, али ако ви, програмер,
Знам, са мало памет, где су ЈПЕГ су или шта су они изгледају,
можете да анализирате је 0 и 1 и рећи: 'Ох. ЈПЕГ. Оох, ЈПЕГ. '
Можете да напишете програм са суштини само за или вхиле петље
да опоравља сваки један од тих фајлова.
Дакле, поука је онда за почетак "сигурно" брисање фајлова
ако желите да избегнете ово заједно. Да?
[Студентски питање, неразумљив]
>> Сазнати више меморије него си урадио раније -
Ох! Добро питање. Па зашто, онда, након пражњења отпада,
Да ли ваш рачунар да вам кажем да имате више слободног простора него што сте урадили раније?
У суштини, јер лаже. Више технички, имате више простора.
Зато сада сте рекли, можете ставити и друге ствари где је фајл некад био,
али то не значи да су битови су одлазила,
и то не значи да су битови се мењају све 0 је, на пример, за заштиту.
Насупрот томе, ако сте "сигурно" брисање фајлова, или физички уништити уређај,
то је стварно једини начин, понекад, око тога.
Па зашто не одемо на том полу-застрашујући напомену, а ми ћемо вас видети у понедељак.
ЦС50.ТВ