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