1 00:00:00,000 --> 00:00:02,760 [Powered by Google Translate] [НЕДЕЉА 5] 2 00:00:02,760 --> 00:00:04,760 [Давид Ј. Малан, Универзитет Харвард] 3 00:00:04,760 --> 00:00:11,990 [Ово је ЦС50.] [ЦС50.ТВ] 4 00:00:11,990 --> 00:00:17,780 [Жена] Лаже, око шта, ја не знам. 5 00:00:17,780 --> 00:00:20,300 [Човек] Дакле, шта знамо? 6 00:00:20,300 --> 00:00:24,120 [Воман] Тако у 9:15, Реј Сантоиа био на банкомату. 7 00:00:24,120 --> 00:00:27,420 [Човек] Дакле питање је, шта је он радио у 9:16? 8 00:00:27,420 --> 00:00:29,980 [Жена] Пуцање на 9 мм у нечему. 9 00:00:29,980 --> 00:00:31,900 Можда је видео снајперисту. 10 00:00:31,900 --> 00:00:34,000 [Човек] Или је радио са њим. 11 00:00:34,000 --> 00:00:36,330 [Жена] Чекај. Вратите један. 12 00:00:36,330 --> 00:00:38,330 [Човек] Шта видиш? 13 00:00:38,330 --> 00:00:44,520 [♫ ♫ напетом музика] 14 00:00:44,520 --> 00:00:48,320 [Жена] Донесите му лицем нагоре. Пун екран. 15 00:00:48,320 --> 00:00:51,230 [Ман] Његове наочаре. >> Ево одраз. 16 00:00:51,230 --> 00:01:00,810 [♫ ♫ напетом музика] 17 00:01:00,810 --> 00:01:03,580 [Човек] То је бејзбол тим на Нуевита је. То је њихов лого. 18 00:01:03,580 --> 00:01:07,790 [Жена] И он говори да ко носи ту јакну. 19 00:01:07,790 --> 00:01:13,730 >> [Дејвид Малан] Дакле, ово је ЦС50 седмице 5, а данас смо упропасте мало телевизије и филмова за вас. 20 00:01:13,730 --> 00:01:16,170 Дакле, када сте гледали емисију попут овог овде, 21 00:01:16,170 --> 00:01:19,910 и пандури рекли "Да ли чисти да до?" или "Енханце" 22 00:01:19,910 --> 00:01:21,900 нема побољшати у стварном свету. 23 00:01:21,900 --> 00:01:25,220 У ствари, оно што заиста добити је мало нешто овако. 24 00:01:25,220 --> 00:01:27,570 Сам извукао сам једну од особља фотографија из странице. 25 00:01:27,570 --> 00:01:30,980 То је програм који се зове Пхотосхоп. Ово је 1 од 2 Бовденс, 26 00:01:30,980 --> 00:01:36,300 1 од 3 Бовденс заправо, данас, јер смо госпођу Боуден и овде, са Робом и Павла. 27 00:01:36,300 --> 00:01:41,950 Али овде је Роб на екрану, а ако ми увећај тог одсјајем он је увек имао у свом оку, 28 00:01:41,950 --> 00:01:47,600 шта ви заправо видите да оно што видите је оно што добијете. 29 00:01:47,600 --> 00:01:51,690 Ово је "побољшана", тако да "ЦСИ" да га мало погрешно. 30 00:01:51,690 --> 00:01:55,190 Постоји још једна снимак, ако можемо изабрати на "ЦСИ" само мало дуже. 31 00:01:55,190 --> 00:01:58,500 Ово је један леп израз за убудуће изговори ако желите да 32 00:01:58,500 --> 00:02:10,280 звук техничке са пријатељима када је, заиста, ви кажете апсолутно ништа. 33 00:02:10,280 --> 00:02:12,970 >> [Човек] Недељама сам истраживао таксиста Убица убиства 34 00:02:12,970 --> 00:02:15,360 са одређеним морбидне фасцинације. 35 00:02:15,360 --> 00:02:17,160 [Воман # 1] Ово је у реалном времену. 36 00:02:17,160 --> 00:02:22,930 [Воман # 2] Ја ћу направити ГУИ интерфејс помоћу Висуал Басиц, види да ли могу да пратим ИП адресу. 37 00:02:22,930 --> 00:02:29,570 >> [Малан] Дакле звук ван синхронизације са стране, стварајући ГУИ интерфејс помоћу Висуал Басиц 38 00:02:29,570 --> 00:02:31,820 да пратите ИП адресе је потпуна бесмислица. 39 00:02:31,820 --> 00:02:33,840 Ових дана не би користили Висуал Басиц, 40 00:02:33,840 --> 00:02:38,920 нема потребе за ГУИ и ИП адреса била технички исправна термин. 41 00:02:38,920 --> 00:02:41,730 Па пази за то, а један од мојих омиљених: 42 00:02:41,730 --> 00:02:45,070 Ова је мало тајанствени, зато што је потребно да знате други језик. 43 00:02:45,070 --> 00:02:47,860 Постоји језик зове Објецтиве-Ц, који је надскуп Ц. 44 00:02:47,860 --> 00:02:51,960 Што значи да је Ц плус неке додатне функције, међу њима објектно оријентисане програмске. 45 00:02:51,960 --> 00:02:55,070 И то је језик који је Аппле иОС популаризовао за програмирање. 46 00:02:55,070 --> 00:02:58,760 И тако ево снимак из другог емисији Све у свему, од "Нумберс" 47 00:02:58,760 --> 00:03:02,450 да, ако стварно погледате пажљиво на ТиВо и паузе у правом тренутку, 48 00:03:02,450 --> 00:03:07,700 видећете да је оно што гледаш није баш оно што се описује. 49 00:03:07,700 --> 00:03:11,170 И дозволите ми да покушам другачији аудио конектор овде и видим да ми не можемо 50 00:03:11,170 --> 00:03:13,780 задржи звук у синхронизацији овај пут. 51 00:03:13,780 --> 00:03:20,530 Дајем ти "Бројеви". 52 00:03:20,530 --> 00:03:23,240 >> [Ман # 1] То је 32-битни ИПв4 адреса. 53 00:03:23,240 --> 00:03:38,930 [Човек # 2] ИП, то је интернет. >> Приватна мрежа. То је Анита приватна мрежа. 54 00:03:38,930 --> 00:03:43,810 [Малан] Ок. Ово је Објецтиве-Ц, а то је за бојење програм неке клинац, 55 00:03:43,810 --> 00:03:51,140 као што можда може закључити из имена променљиве тамо. 56 00:03:51,140 --> 00:03:54,410 Тако да, онда, био "Бројеви". Зато данас и ове недеље уводимо 57 00:03:54,410 --> 00:03:57,740 мало света форензике и контекст у проблеме. 58 00:03:57,740 --> 00:04:00,590 Данас ће бити скраћени предавање јер има посебан догађај овде 59 00:04:00,590 --> 00:04:05,530 након тога, па ћемо завирити, а зафркавати и студенте и родитеље слично данас 60 00:04:05,530 --> 00:04:07,420 са неким стварима које су на хоризонту. 61 00:04:07,420 --> 00:04:12,240 Међу њима, од понедељка, имаћете још неколико другова. 62 00:04:12,240 --> 00:04:16,050 ЕДКС, Харвард и МИТс нови онлине иницијатива за отворене цоурсеваре 63 00:04:16,050 --> 00:04:19,120 и више, лансира на кампусу харвардском у понедељак. 64 00:04:19,120 --> 00:04:21,490 Што значи да долазе понедељак ћете имати - као последњег пребројавања, 65 00:04:21,490 --> 00:04:26,210 86.000 додатних школски другови ће пратити уз ЦС50 је предавања 66 00:04:26,210 --> 00:04:29,170 и секције и сцреенсхотс и проблем сетова. 67 00:04:29,170 --> 00:04:32,350 И као део тога, ви ћете постати чланови оснивачке класе 68 00:04:32,350 --> 00:04:35,090 ЦС50 и сада ЦС50к. 69 00:04:35,090 --> 00:04:39,310 >> Као део тога, сада схватају да ће бити неких упсидес као добро. 70 00:04:39,310 --> 00:04:43,790 Да бисте добили спреман за ово, за масовно броја ученика, 71 00:04:43,790 --> 00:04:47,180 Довољно је рећи да, иако имамо 108 поздрав и ЦАС, 72 00:04:47,180 --> 00:04:50,790 Није баш најбољи студент / наставник однос када смо погодили 80.000 остале студенте. 73 00:04:50,790 --> 00:04:52,850 Дакле, ми не идемо да се класирање толико проблем поставља ручно. 74 00:04:52,850 --> 00:04:55,920 Дакле, уведен ове седмице у проблему скупа ће бити ЦС50 хотела, 75 00:04:55,920 --> 00:04:58,450 која ће бити командне линије унутар апарата 76 00:04:58,450 --> 00:05:01,200 да ћете добити када га ажурирати касније овог викенда, 77 00:05:01,200 --> 00:05:03,200 а ви ћете моћи да покренете команду, проверите 50, 78 00:05:03,200 --> 00:05:06,500 на сопствену псет, а ви ћете добити неке повратне информације о томе да ли ваш програм 79 00:05:06,500 --> 00:05:11,160 исправна или неисправна у складу са различитим спецификацијама дизајна које смо дали. 80 00:05:11,160 --> 00:05:13,580 Тако више о томе и проблем скуп спецификација и 81 00:05:13,580 --> 00:05:17,240 су ЦС50к школски другови ће користити ово као добро. 82 00:05:17,240 --> 00:05:19,230 >> Дакле, проблем сет 4 је све о форензике. 83 00:05:19,230 --> 00:05:21,940 И овај комад инспирисан неким реалним стварима, 84 00:05:21,940 --> 00:05:24,620 где, када сам био на постдипломским студијама сам интерниран за време са 85 00:05:24,620 --> 00:05:28,650 у Миддлесек Цоунти је Окружно јавно тужилаштво ради форензичку посао 86 00:05:28,650 --> 00:05:31,650 са својим оловом форензичким истражитеља, и шта то износи 87 00:05:31,650 --> 00:05:35,260 је, мислим да сам поменуо протеклих неколико недељу, је маса државне полиције или других 88 00:05:35,260 --> 00:05:39,000 доћи, они ће отпасти ствари као што су хард дискови и ЦД и флопи дискова 89 00:05:39,000 --> 00:05:42,340 и слично, а онда је циљ канцеларије форензике је био да се утврди да ли 90 00:05:42,340 --> 00:05:44,600 било или није доказ неке врсте. 91 00:05:44,600 --> 00:05:48,010 Ово је специјални истраге јединица, тако да је било бело-оковратника криминала, 92 00:05:48,010 --> 00:05:52,350 било је више забрињава врста злочина, 93 00:05:52,350 --> 00:05:55,990 ишта укључује неку врсту дигиталних медија, испада да није тако много људи 94 00:05:55,990 --> 00:05:59,370 напишу емаил каже "Ја сам то урадио." 95 00:05:59,370 --> 00:06:03,290 Дакле, врло често ове форензика претраге нису појавили све то много воћа, 96 00:06:03,290 --> 00:06:05,850 али понекад би људи пишу такве мејлове. 97 00:06:05,850 --> 00:06:08,490 Дакле, понекад су напори награђени. 98 00:06:08,490 --> 00:06:14,420 >> Али да доведе до ове судску псет ћемо представити у псет 4 бита графике. 99 00:06:14,420 --> 00:06:18,260 Тако да вероватно узети те ствари здраво за готово, ЈПЕГ, ГИФ и као ових дана, 100 00:06:18,260 --> 00:06:21,640 али ако заиста мисле о томе, слика, баш као Робов лице, 101 00:06:21,640 --> 00:06:24,430 може бити моделиран као низ тачака, или пиксела. 102 00:06:24,430 --> 00:06:26,680 Сада, у случају лица Робов, ту је све врсте боја, 103 00:06:26,680 --> 00:06:29,940 и ми смо почели да видите појединачне тачке, отхервиде познате као пиксела, 104 00:06:29,940 --> 00:06:31,610 када смо почели да Зоом ин 105 00:06:31,610 --> 00:06:35,590 Али, ако смо поједноставили свету мало, и само да кажем да ово овде је Роб 106 00:06:35,590 --> 00:06:40,560 у црно и бело, добро, да представљају црно-беле, можемо да користимо бинарни. 107 00:06:40,560 --> 00:06:44,960 А ако ћемо користити бинарни, 1 или 0, можемо изразити ту исту слику 108 00:06:44,960 --> 00:06:51,970 од насмејаног лица Робов са овом обрасцу битова: 11000011 представља 109 00:06:51,970 --> 00:06:55,160 бела, црвена, црна, бела, сива, црна, бела бела. 110 00:06:55,160 --> 00:06:59,290 И тако то није велики скок, онда да почнемо да разговарамо о шареним фотографијама. 111 00:06:59,290 --> 00:07:01,920 Ствари које би видети на Фацебоок-у или узети са дигиталним фотоапаратом, 112 00:07:01,920 --> 00:07:04,730 али, наравно, када је реч о бојама, морате више бита. 113 00:07:04,730 --> 00:07:08,470 И сасвим уобичајене у свету фотографије је да се користе не 1-битну боју, 114 00:07:08,470 --> 00:07:12,730 јер то сугерише, али 24-битне боје, где ви у ствари добијате милионе боја. 115 00:07:12,730 --> 00:07:15,430 Дакле, као иу случају када смо зумирао Робов оку, 116 00:07:15,430 --> 00:07:19,270 то је било који број од милиона различитих шареним могућности. 117 00:07:19,270 --> 00:07:22,260 >> Тако ћемо увести ово проблем сету 4 као иу објашњења, 118 00:07:22,260 --> 00:07:27,050 која ће бити данас у 3:30 уместо уобичајеног 2:30 због предавања у петак овде. 119 00:07:27,050 --> 00:07:29,930 Али видео ће бити онлајн, као и обично, сутра. 120 00:07:29,930 --> 00:07:31,880 Такође ћемо вас упознати са другом формату. 121 00:07:31,880 --> 00:07:34,150 Дакле, ово је намерно требало да изгледа застрашујуће на први поглед, 122 00:07:34,150 --> 00:07:38,980 али то је само нека документација за Ц струцт. 123 00:07:38,980 --> 00:07:42,280 Испада да је Мицрософт, пре неколико година, помогао популаризује овај формат, 124 00:07:42,280 --> 00:07:46,630 зове битмап формат, БМП и то је супер једноставан, 125 00:07:46,630 --> 00:07:50,390 шарене графички формат који је коришћен за дуже време 126 00:07:50,390 --> 00:07:53,640 а понекад и даље за тапете на десктоп. 127 00:07:53,640 --> 00:07:57,410 Ако помислим на Виндовс КСП и брежуљке и плавог неба, 128 00:07:57,410 --> 00:08:00,660 то је обично БМП или битмап слика, а битмапа 129 00:08:00,660 --> 00:08:03,340 су забава за нас, јер они имају мало више комплексност. 130 00:08:03,340 --> 00:08:05,640 То није баш тако једноставно као овај матрице од 0 и 1-а; 131 00:08:05,640 --> 00:08:10,680 уместо тога, имате ствари као заглавље на почетку фајла. 132 00:08:10,680 --> 00:08:15,520 Другим речима, унутар бмп фајл. Се гомила 0 и 1 а, 133 00:08:15,520 --> 00:08:18,070 али постоје неки додатни 0 и 1 је тамо. 134 00:08:18,070 --> 00:08:21,450 И испоставило се да је оно што смо вероватно узели здраво за готово годинама, 135 00:08:21,450 --> 00:08:27,040 Формати попут доц или.. клс или МП3. или МП4., 136 00:08:27,040 --> 00:08:29,910 без обзира на формати које сте упознати са. 137 00:08:29,910 --> 00:08:31,900 Па, шта то уопште значи бити формат? 138 00:08:31,900 --> 00:08:35,740 Јер на крају крајева, све ове фајлове које користимо имају само 0 и 1 да 139 00:08:35,740 --> 00:08:39,950 а можда и оне 0 и 1 је представљају, б, ц, преко АСЦИИ или слично, 140 00:08:39,950 --> 00:08:42,030 али до краја дана, то је само 0 и 1 а. 141 00:08:42,030 --> 00:08:45,300 >> Дакле, људи само повремено одлучују да измисле нови формат датотеке 142 00:08:45,300 --> 00:08:49,420 где стандардизује шта ће обрасци бита заправо значи. 143 00:08:49,420 --> 00:08:52,790 И у овом случају овде су људи који је пројектовао битмап формат 144 00:08:52,790 --> 00:08:58,260 рекао је да је на првом бајта у битмап датотеке, као што је означено офсет 0, тамо, 145 00:08:58,260 --> 00:09:02,320 тамо ће бити неки загонетно назван променљива зове бфТипе, 146 00:09:02,320 --> 00:09:06,510 која само стоји на битмап датотеке типа; који тип битмап фајла је ово. 147 00:09:06,510 --> 00:09:10,780 Можете закључити, можда, из другог реда који офсет 2, бајт број 2, 148 00:09:10,780 --> 00:09:15,980 има образац 0 и 1 да то представља шта? 149 00:09:15,980 --> 00:09:18,320 Величина нечега, и то иде даље од тамо. 150 00:09:18,320 --> 00:09:20,660 Дакле, у сету проблема 4, бићете ходали кроз неке од тих ствари. 151 00:09:20,660 --> 00:09:24,480 >> Нећемо завршити брине о свима њима, али приметите да почне да се занимљиво 152 00:09:24,480 --> 00:09:30,780 око линије или бите 54, ргбтБлуе, зелена и црвена. 153 00:09:30,780 --> 00:09:35,280 Ако сте икада чули акроним РГБ, црвена зелена плава, ово је референца на то. 154 00:09:35,280 --> 00:09:37,840 Пошто се испоставило да могу да сликам све боје дуге 155 00:09:37,840 --> 00:09:41,580 са неким комбинацији црвене и плаве и зелене. 156 00:09:41,580 --> 00:09:46,560 И, у ствари, родитељи у соби могу сетити неких од најранијих пројектора. 157 00:09:46,560 --> 00:09:49,360 Ових дана, само да видите 1 јарко светло долази из објектива. 158 00:09:49,360 --> 00:09:52,870 Али да се вратимо у дан, имали сте црвени сочива, плаву сочиво и зелено сочиво 159 00:09:52,870 --> 00:09:56,620 и заједно су усмерене на екрану и формирао шарене слике. 160 00:09:56,620 --> 00:09:59,590 И често средње школе и гимназије би имали те објективе 161 00:09:59,590 --> 00:10:02,680 све-тако-мало накриво, тако да су били нека врста виде дупле или троструке слике, 162 00:10:02,680 --> 00:10:07,500 али то је идеја. Имали сте црвено и зелено и плаво светло премазивали слику. 163 00:10:07,500 --> 00:10:09,570 А тај исти принцип се користи у рачунарима. 164 00:10:09,570 --> 00:10:12,000 >> Дакле, међу изазова, онда за вас у проблему сет 4 165 00:10:12,000 --> 00:10:16,080 ће бити неколико ствари: једна је да се заиста променили величину слике. 166 00:10:16,080 --> 00:10:18,050 Да узмемо у обрасцу 0 и 1 а, 167 00:10:18,050 --> 00:10:22,840 схвати који комади 0 и 1 је представљају оно у структури овако, 168 00:10:22,840 --> 00:10:26,800 и онда схватим како да понове пикселе: Црвени, блуз, Зелени 169 00:10:26,800 --> 00:10:32,460 унутра, тако да када слика изгледа овако почетку може изгледати овако, уместо после тога. 170 00:10:32,460 --> 00:10:35,590 Међу осталим изазовима, такође, ће бити да ћете бити предат 171 00:10:35,590 --> 00:10:38,900 форензички слика стварне датотеке са дигиталног фотоапарата 172 00:10:38,900 --> 00:10:42,410 и на тој камери, некада давно, били гомила фотографија. 173 00:10:42,410 --> 00:10:47,030 Проблем је, ми смо случајно избрисана или је слика оштећена некако. 174 00:10:47,030 --> 00:10:51,040 Лоше ствари се дешавају са дигиталним камерама, тако да смо брзо копира све од 0 и 1 је 175 00:10:51,040 --> 00:10:55,410 офф ту картицу за вас, чувају их све у 1 великом фајлу, и онда ћемо их предати вама 176 00:10:55,410 --> 00:11:00,000 у проблему сет 4, тако да можете написати програм у Ц са којима се опорави 177 00:11:00,000 --> 00:11:02,660 свих тих ЈПЕГ, идеално. 178 00:11:02,660 --> 00:11:06,280 И испоставило се да су ЈПЕГ, иако су донекле сложене формату, 179 00:11:06,280 --> 00:11:09,580 они су много сложенији од овог насмејано лице овде. 180 00:11:09,580 --> 00:11:14,320 Испада да сваки ЈПЕГ почиње са истим обрасцима 0 и 1 а. 181 00:11:14,320 --> 00:11:18,820 Дакле, користећи вхиле петљу или за петље или слично, 182 00:11:18,820 --> 00:11:22,350 можете прелазили преко свега 0 и 1 је у овом форензичке слику 183 00:11:22,350 --> 00:11:26,670 и сваки пут кад видим посебан образац који је дефинисан у спецификацији је проблем сет а, 184 00:11:26,670 --> 00:11:29,770 можете претпоставити, "Ох, овде је, са врло великом вероватноћом, 185 00:11:29,770 --> 00:11:33,520 почетак ЈПЕГ, 'и чим вам исти образац, 186 00:11:33,520 --> 00:11:36,050 неки број бајтова или килобајтима или мегабајтима касније, 187 00:11:36,050 --> 00:11:40,550 можете претпоставити, "Оох! Овде је други ЈПЕГ фотографија сам после првог. 188 00:11:40,550 --> 00:11:44,720 Дозволите ми да престану да читају тај први фајл, почнем да пишем овај нови. " 189 00:11:44,720 --> 00:11:49,980 А излаз вашег програма за псет 4 ће бити чак 50 ЈПЕГ. 190 00:11:49,980 --> 00:11:52,400 А ако то није 50 ЈПЕГ, имате мало петље. 191 00:11:52,400 --> 00:11:55,580 Ако имате неограничен број ЈПЕГ, имате бесконачну петља. 192 00:11:55,580 --> 00:11:58,280 Тако да ће, такође, бити веома чест случај. 193 00:11:58,280 --> 00:12:00,280 То је оно што је на хоризонту. 194 00:12:00,280 --> 00:12:03,740 >> Квиз 0, иза нас. Схватите, по мом е-маил, да увек има људи 195 00:12:03,740 --> 00:12:06,820 који су обоје срећни, некако неутрално, и тужно око квиза 0 пута. 196 00:12:06,820 --> 00:12:10,160 И молим те немој се допре до мене, глава поздрав, Замила, ваш сопствени ТФ 197 00:12:10,160 --> 00:12:14,120 или један од ЦАС да знате ако желите да разговарају о томе како су ствари ишле. 198 00:12:14,120 --> 00:12:16,460 >> Тако да импресионира родитеље овде у соби, 199 00:12:16,460 --> 00:12:23,990 шта је ЦС50 библиотека? Добар посао. 200 00:12:23,990 --> 00:12:32,280 Шта је ЦС50 библиотека? Да? [Студентски одговори, неразумљив] 201 00:12:32,280 --> 00:12:35,730 >> Добро, добро. Дакле, то је претходно написану сет кода који смо, особље, написао 202 00:12:35,730 --> 00:12:38,460 пружамо вама, да обезбеди неке заједничке могућности. 203 00:12:38,460 --> 00:12:42,290 Ствари бих донеси ми низ; донеси ми једну инт, све функције које су овде наведене. 204 00:12:42,290 --> 00:12:45,260 Почевши од сада, почнемо да се заиста узме ове точкове обуке искључен. 205 00:12:45,260 --> 00:12:48,230 Тако ћемо почети да се одузме "ниску" од тебе, 206 00:12:48,230 --> 00:12:52,790 који је, опозив, био само синоним за оно што стварни тип података? цхар *. 207 00:12:52,790 --> 00:12:57,020 Дакле, за родитеље, то је вероватно - то је добро, тако да цхар ћемо почети да видимо 208 00:12:57,020 --> 00:13:00,810 на екрану све више као уклонимо "жицу" из нашег речника, 209 00:13:00,810 --> 00:13:02,760 бар када је у питању заправо писања кода. 210 00:13:02,760 --> 00:13:06,240 Слично томе, ми ћемо престати користећи неке од ових функција толико, 211 00:13:06,240 --> 00:13:08,390 јер наши програми ће добити софистициранија 212 00:13:08,390 --> 00:13:11,370 него само пишу програме који седе тамо са одзивник трепери, 213 00:13:11,370 --> 00:13:13,580 чекајући корисника да куцате нешто унутра 214 00:13:13,580 --> 00:13:15,220 Добићете своје инпуте од другде. 215 00:13:15,220 --> 00:13:18,720 На пример, добићете их од низа битова на локалном хард диску. 216 00:13:18,720 --> 00:13:23,340 Уместо тога ћете их у будућности са мрежном везом, негде неки сајт. 217 00:13:23,340 --> 00:13:27,460 Дакле, хајде да одлепите овом слоју за први пут, и повуците ЦС50 апарат 218 00:13:27,460 --> 00:13:32,300 а овај фајл се зове ЦС50.х, који сте били оштри, укључујући недељама. 219 00:13:32,300 --> 00:13:34,380 >> Али, хајде да видимо шта заправо је унутар тога. 220 00:13:34,380 --> 00:13:38,250 Дакле, на врху фајла у плавом је само гомила коментарима, 221 00:13:38,250 --> 00:13:41,340 Информације о гаранцији и лиценцирање. То је нека врста заједничког парадигме 222 00:13:41,340 --> 00:13:44,600 у софтверу, јер је много софтвера ових дана је оно што се зове "опен соурце" 223 00:13:44,600 --> 00:13:46,940 што значи да је неко написао код 224 00:13:46,940 --> 00:13:50,060 и учинио га слободно доступни, не само да ради и да се користи, 225 00:13:50,060 --> 00:13:53,660 али заправо чита и мења и интегришу у свој рад. 226 00:13:53,660 --> 00:13:55,790 Дакле, то је оно што сам користио, опен соурце софтвер, 227 00:13:55,790 --> 00:13:58,030 иако у веома малом облику. 228 00:13:58,030 --> 00:14:01,860 Ако сам доле помицати прошлости коментарима, мада ћемо почети да видимо још неке познате ствари. 229 00:14:01,860 --> 00:14:08,090 Дакле, приметите на врху овде, да ЦС50.х датотека садржи гомилу хеадер фајлова. 230 00:14:08,090 --> 00:14:11,160 Сада, већина од њих нисмо видели раније, али једно је 231 00:14:11,160 --> 00:14:15,640 упознати, која од њих смо видели, мада кратко, тако далеко? 232 00:14:15,640 --> 00:14:18,720 Да, стандардне библиотеке. Стдлиб.х има маллоц, 233 00:14:18,720 --> 00:14:21,590 па када смо почели да разговарамо о динамичким меморијским средстава, 234 00:14:21,590 --> 00:14:24,960 којима ћемо се вратити на следећу недељу, као и ми почели укључујући тог фајла. 235 00:14:24,960 --> 00:14:29,660 Испоставило се да воид и истинито и лажно заправо не постоји у Ц, сама по себи, 236 00:14:29,660 --> 00:14:32,460 уколико сте укључили овај фајл овде. 237 00:14:32,460 --> 00:14:35,770 Тако смо, за неколико недеља, била укључујући стандардне боол.х 238 00:14:35,770 --> 00:14:39,020 тако да можете користити појам боол, тачно или нетачно. 239 00:14:39,020 --> 00:14:41,830 Без тога, морали бисте да сортирате лажних томе и користи инт 240 00:14:41,830 --> 00:14:45,920 и само произвољно претпоставити да је лажно 0 и 1 је истина. 241 00:14:45,920 --> 00:14:49,980 >> Сада, ако ми доле помицати даље, овде је наша дефиниција ниске. 242 00:14:49,980 --> 00:14:54,820 Испоставило се, као што смо рекли раније, да тамо где је то * је не битно. 243 00:14:54,820 --> 00:14:56,750 Можете чак и да имамо простора за све. 244 00:14:56,750 --> 00:15:01,550 Ми, овај семестар, су га промовише, јер то би јасно да * има везе са типом. 245 00:15:01,550 --> 00:15:05,370 Али схвати, као уобичајено, ако не и мало више заједнички, да га стави тамо 246 00:15:05,370 --> 00:15:07,480 али функционално је иста ствар. 247 00:15:07,480 --> 00:15:11,070 Али сада, када смо прочитали доле даље, хајде да погледамо рецимо, ГетИнт, 248 00:15:11,070 --> 00:15:15,350 јер смо користили да је, можда, пре свега овом семестру. 249 00:15:15,350 --> 00:15:19,620 И овде је ГетИнт. То је шта? 250 00:15:19,620 --> 00:15:24,650 Ово је прототип. Тако често, ми смо ставили прототипове на врховима наших ц датотеке., 251 00:15:24,650 --> 00:15:28,190 али такође можете ставити прототипова у хеадер фајловима, Х фајлове., 252 00:15:28,190 --> 00:15:32,110 као овај овде, тако да када пишете неке функције 253 00:15:32,110 --> 00:15:36,790 да желите да други људи могли да користе, што је управо случај са ЦС50 библиотеци, 254 00:15:36,790 --> 00:15:40,900 Ви не само да спроведе своје функције у нешто попут ЦС50.ц, 255 00:15:40,900 --> 00:15:46,720 такође ставио прототипова није на врху тог фајла, али на врху заглавља датотеке, 256 00:15:46,720 --> 00:15:50,810 онда заглавље датотеке је оно пријатељи и колеге су, 257 00:15:50,810 --> 00:15:52,800 оштрим укључе у сопственом коду. 258 00:15:52,800 --> 00:15:55,440 Дакле, све ово време сте били укључујући и све ове прототипове 259 00:15:55,440 --> 00:15:59,870 ефективно на врху датотеке, али начин на овај нагли укључују механизам 260 00:15:59,870 --> 00:16:03,320 који у суштини копија и пасте овај фајл на свој. 261 00:16:03,320 --> 00:16:06,400 Сада, овде је неке прилично детаљна документација. 262 00:16:06,400 --> 00:16:08,880 >> Ми смо прилично узети здраво за готово да ГетИнт добија инт, 263 00:16:08,880 --> 00:16:10,740 али се испоставило да је то неки кутак случајевима, зар не? 264 00:16:10,740 --> 00:16:14,320 Шта ако корисник упише у броју који је сувише велик? 265 00:16:14,320 --> 00:16:17,350 Куинтиллион, да једноставно не може да стане унутар једног инт? 266 00:16:17,350 --> 00:16:21,180 Шта је очекивано понашање? Па, у идеалном случају, то је предвидљив. 267 00:16:21,180 --> 00:16:23,460 Дакле, у овом случају, ако сте заиста прочитали ситним словима, 268 00:16:23,460 --> 00:16:27,850 видећете да ако линија не може да се чита, тај повратак ИНТ_МАКС. 269 00:16:27,850 --> 00:16:30,800 Никада нисмо причали о овоме, али на основу његове капитализације, 270 00:16:30,800 --> 00:16:33,030 шта је то, вероватно? 271 00:16:33,030 --> 00:16:36,610 То је константна, тако да је то нека посебна константа која је вероватно прогласила 272 00:16:36,610 --> 00:16:39,460 у једној од тих заглавља датотека које је горе високо у датотеци, 273 00:16:39,460 --> 00:16:43,400 и ИНТ_МАКС је вероватно нешто као, отприлике, 2 милијарде евра. 274 00:16:43,400 --> 00:16:48,160 Идеја је да због тога треба да се некако означи да је нешто кренуло наопако, 275 00:16:48,160 --> 00:16:51,090 ми, да, има 4 милијарде бројева на располагању, 276 00:16:51,090 --> 00:16:53,980 негативан 2 милијарде до 2 милијарде евра, дати или узети. 277 00:16:53,980 --> 00:16:58,030 Па, оно што је заједничко у програмирању је само украсти један од тих бројева. 278 00:16:58,030 --> 00:17:02,250 Можда 0, можда 2 милијарде, можда негативно 2 милијарде. 279 00:17:02,250 --> 00:17:06,720 Дакле, трошите један од ваших могућих вредности, тако да можете да се посвете свету 280 00:17:06,720 --> 00:17:10,089 да ако нешто крене наопако, ја ћу вратити овај супер велику вредност. 281 00:17:10,089 --> 00:17:13,329 Али ви не желите да куцате нешто корисник шифровану као "2, 3, 4 ..." 282 00:17:13,329 --> 00:17:17,079 од заиста великог броја, где си уместо тога генерализовати као константа. 283 00:17:17,079 --> 00:17:19,380 Па стварно, ако сте као анални протеклих неколико недеља, 284 00:17:19,380 --> 00:17:23,800 кад год зовем ГетИнт, требало је проверити са ако стању. 285 00:17:23,800 --> 00:17:27,109 Да ли корисник тип у ИНТ_МАКС, или тачније, 286 00:17:27,109 --> 00:17:29,900 урадио ГетИнт ПОВРАТАК ИНТ_МАКС? Јер, ако јесте, 287 00:17:29,900 --> 00:17:35,140 То заправо значи да нису откуцајте га, нешто је пошло наопако у овом случају. 288 00:17:35,140 --> 00:17:38,970 Дакле, ово је оно што се обично назива "сентинел" вредности, који само значи посебан. 289 00:17:38,970 --> 00:17:41,020 >> Па, хајде да се сада окрену у на ц фајлове.. 290 00:17:41,020 --> 00:17:44,500 Тхе Ц Фајл је постојала у апарату за неко време, 291 00:17:44,500 --> 00:17:47,540 и, у ствари, апарат има то компајлираних за вас 292 00:17:47,540 --> 00:17:49,720 у тој ствари смо назвали "објекат код" 293 00:17:49,720 --> 00:17:52,940 али то једноставно није битно за вас, где то је зато што је систем зна, 294 00:17:52,940 --> 00:17:54,780 у овом случају, где је, апарат. 295 00:17:54,780 --> 00:18:00,620 Али хајде идите доле сада ГетИнт, и видети како ГетИнт је радила сво ово време. 296 00:18:00,620 --> 00:18:02,380 Дакле, овде имамо сличне коментаре пре. 297 00:18:02,380 --> 00:18:04,930 Дозволите ми да увећате само део кода, 298 00:18:04,930 --> 00:18:07,410 и шта имамо за ГетИнт је следећи. 299 00:18:07,410 --> 00:18:12,770 Она не узима улаз и враћа инт, док (истина), тако да имамо намерно бесконачну петљу 300 00:18:12,770 --> 00:18:16,560 али, вероватно, ми ћемо разбити од овога, некако, или да се врате из овога. 301 00:18:16,560 --> 00:18:19,890 Дакле, хајде да видимо како ово функционише. Па, изгледа да се користе ГетСтринг 302 00:18:19,890 --> 00:18:22,550 у овој првој линији унутар петље, 166. 303 00:18:22,550 --> 00:18:25,320 Ово је сада добра пракса, јер под којим околностима 304 00:18:25,320 --> 00:18:30,820 могао ГетСтринг врати овај посебан кључних речи, нулл? 305 00:18:30,820 --> 00:18:38,460 Ако нешто крене наопако. Шта може да крене наопако када зовете тако нешто ГетСтринг? 306 00:18:38,460 --> 00:18:42,550 Да? [Студентски одговор, неразумљив] >> Да. Можда маллоц не успе. 307 00:18:42,550 --> 00:18:45,310 Негде испод хаубе ГетСтринг зове маллоц, 308 00:18:45,310 --> 00:18:48,210 које додељује меморију, што омогућава компјутерски продавницу 309 00:18:48,210 --> 00:18:50,950 све знакове да корисник укуцава у тастатури. 310 00:18:50,950 --> 00:18:53,270 И претпоставимо да корисник има много слободног времена 311 00:18:53,270 --> 00:18:56,470 и откуцали више, на пример, од 2 милијарде знакова. 312 00:18:56,470 --> 00:18:59,600 Више знакова него што рачунар има чак РАМ-а. 313 00:18:59,600 --> 00:19:02,350 Па, ГетСтринг мора бити у стању да значи да са вама, 314 00:19:02,350 --> 00:19:05,650 чак и ако је ово супер, супер неуобичајено кутак случај. 315 00:19:05,650 --> 00:19:08,490 Она мора да се некако могли да средим ово, па ГетСтринг, 316 00:19:08,490 --> 00:19:11,850 ако се вратимо и чита своју документацију, не, у ствари, повратак НУЛЛ. 317 00:19:11,850 --> 00:19:16,150 Сада, ако ГетСтринг не враћајући НУЛЛ, ГетИнт ће успети 318 00:19:16,150 --> 00:19:19,370 по повратку ИНТ_МАКС, баш као Сентинел. 319 00:19:19,370 --> 00:19:22,650 Ово су само људске конвенције. Једини начин да би знали да је ово случај 320 00:19:22,650 --> 00:19:24,840 је читајући документацију. 321 00:19:24,840 --> 00:19:28,200 Па хајде идите доле где Инт заправо ГотИнт. 322 00:19:28,200 --> 00:19:34,220 >> Дакле, ако сам дођите мало даље, у складу 170. имамо коментар изнад ових редова. 323 00:19:34,220 --> 00:19:38,470 Тако смо изјављујем, у 172, инт н и цхар Ц, а затим тај нови функција 324 00:19:38,470 --> 00:19:41,870 које неки од вас су наишао раније, али ссцанф. 325 00:19:41,870 --> 00:19:44,190 То је скраћеница за гудачки скенирања ф. 326 00:19:44,190 --> 00:19:48,580 Другим речима, ми дају ниску и ја ћу га скенирати за делове информација од интереса. 327 00:19:48,580 --> 00:19:53,820 Дакле, шта то значи? Па, претпоставимо да куцам у, буквално, 1 2 3 на тастатури, 328 00:19:53,820 --> 00:19:59,730 и онда притисните ентер. Који је тип података 1 2 3 када вратио ГетСтринг? 329 00:19:59,730 --> 00:20:05,010 Очигледно је ниска, зар не? Имам низ, па 1 2 3 је заиста "1 2 3" 330 00:20:05,010 --> 00:20:07,260 са \ 0 на крају. То није инт. 331 00:20:07,260 --> 00:20:10,420 То није број. Изгледа као број, али то није стварно. 332 00:20:10,420 --> 00:20:14,680 Дакле, шта ГетИнт треба да урадим? Она мора да скенира ту ниску лево-десно, 333 00:20:14,680 --> 00:20:19,010 1 2 3 \ 0, и некако претворити га у стварном цео број. 334 00:20:19,010 --> 00:20:21,010 Сада можете да схватите како да то урадите. 335 00:20:21,010 --> 00:20:24,240 Ако помислим на псет 2, ви вероватно имаш мало пријатно 336 00:20:24,240 --> 00:20:26,810 са Цезаром или Вигенере тако да можете да прелазите преко низ, 337 00:20:26,810 --> 00:20:29,800 можете да конвертујете знакова да Интс са трзалице. То је много посла. 338 00:20:29,800 --> 00:20:32,800 Зашто не позовете функцију као ссцанф који ради за тебе? 339 00:20:32,800 --> 00:20:37,520 Дакле ссцанф очекује аргумент, у овом слуцају се зове линија, која је ниска. 340 00:20:37,520 --> 00:20:41,310 Онда спецификовати у наводницима, врло сличан принтф, 341 00:20:41,310 --> 00:20:44,960 Шта сте очекивали да видите у овом низу? 342 00:20:44,960 --> 00:20:52,980 Оно што ја овде говорим, ја очекујем да видим децимални број и можда карактер. 343 00:20:52,980 --> 00:20:54,990 И ми ћемо видети зашто је то случај у само једном тренутку. 344 00:20:54,990 --> 00:20:58,440 Испоставило се да је овај запис је сада подсећа на ствари 345 00:20:58,440 --> 00:21:00,840 почели смо да причамо о пре нешто више од недељу дана. 346 00:21:00,840 --> 00:21:05,430 >> Шта је и н и ц и раде за нас овде? [Студентски одговори, неразумљив] 347 00:21:05,430 --> 00:21:07,610 >> Да. То ми даје адресу н и адресу ц. 348 00:21:07,610 --> 00:21:10,440 Дакле, зашто је то важно? Па, знаш да је са функције у Ц 349 00:21:10,440 --> 00:21:13,440 увек можете да се вратите вредност или никакву вредност уопште. 350 00:21:13,440 --> 00:21:16,630 Можете да врати инт, стринг, флоат, цхар, шта год. 351 00:21:16,630 --> 00:21:21,150 Или можете да се вратите празнину, али само да се максимално врати 1 ствар. 352 00:21:21,150 --> 00:21:26,100 Али, овде желимо да ме врати ссцанф мозда инт, децимални број, 353 00:21:26,100 --> 00:21:29,240 и знак, а ја ћу објаснити зашто је знак за тренутак. 354 00:21:29,240 --> 00:21:34,250 Дакле, можете ефикасно желе да се врате ф 2 ствари, то једноставно није могуће у Ц. 355 00:21:34,250 --> 00:21:38,460 Дакле, можете да радите око тога проласком у 2 адресе, 356 00:21:38,460 --> 00:21:43,710 јер чим предате Функција 2 адресе, шта могу да функционишу са њима? 357 00:21:43,710 --> 00:21:49,880 То може писати на те адресе. Можете да користите операцију * и "иди тамо" на сваки од тих адреса. 358 00:21:49,880 --> 00:21:54,320 То је врста овог бацкдоор механизма, али је веома уобичајено за промену вредности променљивих 359 00:21:54,320 --> 00:21:58,020 на више од само 1 место, у овом случају 2. 360 00:21:58,020 --> 00:22:04,590 Сада, приметите сам проверу за == ТО1, а затим враћа н ако се то, у ствари, процењују на истина. 361 00:22:04,590 --> 00:22:09,340 Дакле, шта се дешава? Па, технички, ми заиста желимо да се деси у ГетИнт је ово. 362 00:22:09,340 --> 00:22:12,340 Ми желимо да анализирамо, да тако кажемо, ми желимо да чита стринг 363 00:22:12,340 --> 00:22:16,210 "1 2 3" и ако изгледа као да је број тамо, 364 00:22:16,210 --> 00:22:21,360 шта ми говориш ссцанф да урадите је да се тај број, 1 2 3, у овом варијабилном н за мене. 365 00:22:21,360 --> 00:22:26,060 Зашто, онда, да ли морам и ово? 366 00:22:26,060 --> 00:22:33,750 Каква је улога, такође говори ссцанф, можда ћете овде добити карактер. 367 00:22:33,750 --> 00:22:36,890 [Студентски говорећи, неразумљив] >> Не - децимална тачка може да функционише. 368 00:22:36,890 --> 00:22:40,650 Идемо сматрају да размисли за тренутак. Шта друго? 369 00:22:40,650 --> 00:22:42,570 [Студент, неразумљив] >> Дакле, добра мисао, то може бити НУЛЛ карактер. 370 00:22:42,570 --> 00:22:44,970 То заправо није, у овом случају. Да? [Студент, неразумљив] 371 00:22:44,970 --> 00:22:47,100 >> >> АСЦИИ. Или, да генерализујемо још даље. 372 00:22:47,100 --> 00:22:49,670 Тхе% ц је само за еррор-цхецкинг. 373 00:22:49,670 --> 00:22:52,510 Ми тамо не желе да буду знак после броја, 374 00:22:52,510 --> 00:22:54,980 али шта то ми омогућава да урадите је следеће: 375 00:22:54,980 --> 00:23:01,270 Испада да ссцанф, поред чувања вредности у н и ц, у овом примеру овде, 376 00:23:01,270 --> 00:23:08,170 шта је то такође нема је то враћа број променљивих ставила вредности за 377 00:23:08,170 --> 00:23:13,330 Дакле, ако само откуцате 1 2 3, онда само% д ће да одговара 378 00:23:13,330 --> 00:23:18,830 и само н добија складишти у вредности као 1 2 3 и ништа не стави у ц; 379 00:23:18,830 --> 00:23:20,870 ц остаје смеће вредност, да тако кажем. 380 00:23:20,870 --> 00:23:23,550 Смеће јер никада није иницијализована као неку вредност. 381 00:23:23,550 --> 00:23:29,390 Дакле, у том случају, ссцанф даје 1, јер сам један од тих насељена показивача, 382 00:23:29,390 --> 00:23:33,650 у ком случају, сјајно. Имам инт, па сам ослободити линију да бисте ослободили меморију 383 00:23:33,650 --> 00:23:37,150 да ГетСтринг заиста издваја, а онда сам се врати н. 384 00:23:37,150 --> 00:23:42,210 Иначе, ако сте се икада запитали где да поновите изјава долази, долази из овде. 385 00:23:42,210 --> 00:23:45,770 Ако, с друге стране, ја сам укуцати 1 2 3 фоо, 386 00:23:45,770 --> 00:23:48,640 само неки случајни редослед текста, ссцанф ће да види, 387 00:23:48,640 --> 00:23:51,500 оох, број, оох, број, оох, број, оох - ф. 388 00:23:51,500 --> 00:23:54,190 А то ће ставити 1 2 3 у н. 389 00:23:54,190 --> 00:23:59,970 То ће ставити Ф у Ц, а затим се вратите 2. 390 00:23:59,970 --> 00:24:02,980 Тако смо, користећи само основну дефиницију понашања сцанф а, 391 00:24:02,980 --> 00:24:06,170 врло једноставан начин - па, комплекс на први поглед, али на крају дана, 392 00:24:06,170 --> 00:24:11,460 прилично једноставан механизам да се каже, постоји инт, и ако је тако, да је једина ствар коју сам нашао? 393 00:24:11,460 --> 00:24:14,950 А бели простор овде је намерна. Ако сте прочитали документацију за ссцанф, 394 00:24:14,950 --> 00:24:18,690 то вам говори да ако укључите комад белог простора на почетку или на крају, 395 00:24:18,690 --> 00:24:24,990 ссцанф ће такође омогућавају кориснику, из било ког разлога, да се удари размак 1 2 3, а то ће бити легитимна. 396 00:24:24,990 --> 00:24:28,310 То неће викати на корисника, само зато што је погодио размакницу на почетку или на крају, 397 00:24:28,310 --> 00:24:32,160 што је само мало више разумљив. 398 00:24:32,160 --> 00:24:34,160 >> Сва питања, затим, на ГетИнтс? Да? 399 00:24:34,160 --> 00:24:36,820 [Студентски питање, неразумљив] 400 00:24:36,820 --> 00:24:40,740 >> Добро питање. Шта ако сте управо уписали у знак, попут Ф, и притисните ентер 401 00:24:40,740 --> 00:24:47,830 без икаквог куцања 1 2 3, шта мислите понашање ове линије кода би онда било? 402 00:24:47,830 --> 00:24:50,500 Дакле ссцанф може да покрије превише, јер у том случају, 403 00:24:50,500 --> 00:24:56,280 то неће попунити Н или Ц; то ће уместо врате 0. 404 00:24:56,280 --> 00:25:01,540 У том случају, ја слушам тај сценарио, јер је очекивана вредност желим је 1. 405 00:25:01,540 --> 00:25:07,310 Желим само 1, а само 1 ствар да се попуни. Добро питање. Остали? 406 00:25:07,310 --> 00:25:09,610 >> Добро, хајде да не идемо кроз све функције у овде, 407 00:25:09,610 --> 00:25:11,820 али онај који изгледа као да се, можда, преостали интерес 408 00:25:11,820 --> 00:25:14,530 је ГетСтринг јер испада да ГетФлоат, ГетИнт, 409 00:25:14,530 --> 00:25:19,490 ГетДоубле, ГетЛонгЛонг све пунта доста њихове функционалности за ГетСтринг. 410 00:25:19,490 --> 00:25:22,860 Па хајде да погледамо како се овде спроводи. 411 00:25:22,860 --> 00:25:27,040 Ово изгледа мало комплекс, али он користи исте основе 412 00:25:27,040 --> 00:25:29,680 да смо почели да причају о прошлој седмици. Дакле, у ГетСтринг, 413 00:25:29,680 --> 00:25:32,670 која не узима аргумент по празнини овде, 414 00:25:32,670 --> 00:25:37,110 и враћа стринг, тако да сам прогласио низ зове бафер. 415 00:25:37,110 --> 00:25:39,670 Ја стварно не знам шта да ће да се користи за још, али ћемо видети. 416 00:25:39,670 --> 00:25:42,950 Изгледа као капацитет је, по дефаулту, 0, не сасвим сигуран где ово иде. 417 00:25:42,950 --> 00:25:44,920 Нисте сигурни шта н ће да се користи за још. 418 00:25:44,920 --> 00:25:47,860 Али сада је све мало више интересантно, па је у складу 243, 419 00:25:47,860 --> 00:25:51,760 изјављујемо инт ц, ово је врста глупог детаљ. 420 00:25:51,760 --> 00:25:58,080 Цхар је 8 бита, а 8 битова може да ускладишти колико различите вредности? 421 00:25:58,080 --> 00:26:03,310 256. Проблем је, ако желите да имате 256 различитих АСЦИИ знакове, 422 00:26:03,310 --> 00:26:06,210 које постоје, ако размишљам, а то није нешто што се памти. 423 00:26:06,210 --> 00:26:09,100 Али ако помислим на те велике АСЦИИ табели смо имали недеља пре, 424 00:26:09,100 --> 00:26:13,780 били тамо, у том случају, 128 или 256 АСЦИИ знакова. 425 00:26:13,780 --> 00:26:16,220 Ми смо користили све обрасце 0 и 1 је горе. 426 00:26:16,220 --> 00:26:19,410 То је проблем ако желите да будете у стању да детектује грешку. 427 00:26:19,410 --> 00:26:23,290 Јер ако већ користите 256 вредности за своје ликове, 428 00:26:23,290 --> 00:26:26,390 ниси стварно планирају унапред, јер сада нема начина да каже, 429 00:26:26,390 --> 00:26:29,750 "Ово није легит лик, то је нека погрешна порука." 430 00:26:29,750 --> 00:26:32,430 Дакле, оно што је свет ради, они користе следећу највећу вредност, 431 00:26:32,430 --> 00:26:35,790 нешто као инт, тако да имате лудог број битова, 432 00:26:35,790 --> 00:26:39,610 32 за 4 милијарде могућих вредности, тако да можете једноставно завршити коришћење, 433 00:26:39,610 --> 00:26:44,800 суштини, 257 од њих, 1 који има неку посебну значење као грешке. 434 00:26:44,800 --> 00:26:49,190 >> Дакле, хајде да видимо како ово функционише. У складу 246, имам велику вхиле петљу 435 00:26:49,190 --> 00:26:54,530 који се зове фгетц ф значење фајл, гетц, а затим стдин. 436 00:26:54,530 --> 00:26:59,030 Испоставило се да је ово само још прецизнији начин да се каже "чита улаз са тастатуре." 437 00:26:59,030 --> 00:27:02,730 Стандардни улаз значи тастатура, стандардни излаз значи екран, 438 00:27:02,730 --> 00:27:06,920 и стандардна грешка, која ћемо видети у псет 4, значи екран, 439 00:27:06,920 --> 00:27:09,670 али посебан део екрана, тако да то није спојени 440 00:27:09,670 --> 00:27:13,760 са стварним излаз који сте намеравали да штампају, али више о томе у будућности. 441 00:27:13,760 --> 00:27:19,430 Дакле фгетц само значи прочитао један карактер са тастатуре, и чувајте га где? 442 00:27:19,430 --> 00:27:24,000 Чувајте га у Ц, а затим проверите, тако да сам само ја овде користи неке Боолеан везника, 443 00:27:24,000 --> 00:27:28,430 проверите да се то не деси једнака \ н, па је корисник ударио ентер. 444 00:27:28,430 --> 00:27:31,510 Ми желимо да зауставимо у том тренутку, крај петље, а такође желите да проверите 445 00:27:31,510 --> 00:27:36,170 за специјалне константа ЕОФ, који, ако знате или погодите - шта то станд фор? 446 00:27:36,170 --> 00:27:39,860 Крај датотеке. Дакле, ово је врста бесмислена, јер ако ја куцам на тастатури, 447 00:27:39,860 --> 00:27:41,900 Стварно нема датотека укључени у ово, 448 00:27:41,900 --> 00:27:44,330 али ово је само нека врста генеричке термин користи да означи 449 00:27:44,330 --> 00:27:50,320 да ништа друго не долази из прстију цовека. ЕОФ. Крај датотеке. 450 00:27:50,320 --> 00:27:52,600 Као на страну, ако сте икада погодио контролу д на тастатури, 451 00:27:52,600 --> 00:27:54,680 не да би тек треба, ти си ударио контролу ц. 452 00:27:54,680 --> 00:27:57,920 Али контрола д шаље ову посебну стално зове ЕОФ. 453 00:27:57,920 --> 00:28:03,100 >> Дакле, сада имамо само мало динамичку алокацију меморије. 454 00:28:03,100 --> 00:28:06,460 Дакле, ако је н + 1> капацитет, сада ћу објаснити н. 455 00:28:06,460 --> 00:28:09,380 н се само колико бајтова су тренутно у бафер, 456 00:28:09,380 --> 00:28:11,970 стринг који тренутно гради од корисника. 457 00:28:11,970 --> 00:28:16,240 Ако имате више знакова у свом баферу него што имају капацитет у бафер, 458 00:28:16,240 --> 00:28:20,760 интуитивно, оно што треба да урадите је издвојити више капацитета. 459 00:28:20,760 --> 00:28:24,490 Ја ћу да прелистам преко неке од аритметике овде 460 00:28:24,490 --> 00:28:26,900 и фокусирати се само на ову функцију овде. 461 00:28:26,900 --> 00:28:29,170 Знаш шта маллоц, или бар генерално познато. 462 00:28:29,170 --> 00:28:32,380 Погоди шта реаллоц ради. [Студентски одговор, неразумљив] 463 00:28:32,380 --> 00:28:35,690 >> Да. И није то баш и додао меморију, он поново додељује меморију како следи: 464 00:28:35,690 --> 00:28:40,530 Ако још увек има места на крају стринга да вам дају више од тог сећања 465 00:28:40,530 --> 00:28:43,370 него што је то првобитно вам даје, онда ћете добити ту додатну меморију. 466 00:28:43,370 --> 00:28:46,640 Дакле, можете само стављање жице знакове бацк то бацк враћа се назад. 467 00:28:46,640 --> 00:28:49,290 Али ако то није случај, јер си чекао предуго 468 00:28:49,290 --> 00:28:51,700 и нешто случајно добио плоппед у меморији тамо, али ту је ектра 469 00:28:51,700 --> 00:28:56,480 меморија овде доле, то је у реду. Реаллоц ће учинити све тешке подизање за вас, 470 00:28:56,480 --> 00:28:58,810 померите ниску сте прочитали у тако далеко одавде, 471 00:28:58,810 --> 00:29:02,550 спусти га тамо, и онда вам дати још неке писте у том тренутку. 472 00:29:02,550 --> 00:29:05,610 Тако је и са таласом руке, дозволите ми да кажем да је оно што ради ГетСтринг 473 00:29:05,610 --> 00:29:09,540 је то почиње са малом бафер, можда 1 сингл карактера, 474 00:29:09,540 --> 00:29:12,300 а ако корисник упише у 2 карактера, ГетСтринг завршава 475 00:29:12,300 --> 00:29:15,210 називајући реаллоц и каже, 'Ох, 1 лик није било довољно. 476 00:29:15,210 --> 00:29:18,480 Дај ми 2 карактера. ' Онда, ако читате логици петље, 477 00:29:18,480 --> 00:29:21,070 то ће рећи, "Оох, кориснику откуцан у 3 карактера. 478 00:29:21,070 --> 00:29:25,690 Дај ми сада не 2, али 4 карактера, онда ми дај 8, онда дај ми 16 и 32 ". 479 00:29:25,690 --> 00:29:28,180 Чињеница да сам удвостручити капацитете сваки пут 480 00:29:28,180 --> 00:29:30,320 значи да бафер неће да полако расте. 481 00:29:30,320 --> 00:29:35,870 То ће расти супер брзо, и шта може да буде предност тога? 482 00:29:35,870 --> 00:29:38,540 Зашто сам удвостручује величину бафера, иако корисник 483 00:29:38,540 --> 00:29:41,450 Можда само треба 1 додатни карактер са тастатуре? 484 00:29:41,450 --> 00:29:44,830 [Студентски одговор, неразумљив]. >> Шта је то? 485 00:29:44,830 --> 00:29:46,750 Управо тако. Не морате да расте тако често. 486 00:29:46,750 --> 00:29:48,870 А ово је само врста - ти си хеџинг овде своје опкладе. 487 00:29:48,870 --> 00:29:54,150 Идеја је да не желите да позовете реаллоц много, јер има тенденцију да буде спора. 488 00:29:54,150 --> 00:29:56,840 Сваки пут када питате оперативни систем за меморију, као што ћете ускоро видети 489 00:29:56,840 --> 00:30:00,620 у будућем проблем сету, она тежи да потраје. 490 00:30:00,620 --> 00:30:04,980 Дакле, смањење тог времена, чак и ако губите неки простор, тежи да буде добра ствар. 491 00:30:04,980 --> 00:30:07,250 >> Али ако читамо кроз завршном делу ГетСтринг овде, 492 00:30:07,250 --> 00:30:10,880 и опет, разумевање овде сваки једну линију није толико важно данас. 493 00:30:10,880 --> 00:30:14,830 Али приметите да се на крају позива маллоц опет, и додељује 494 00:30:14,830 --> 00:30:16,980 тачно онолико бајтова колико треба за ниску 495 00:30:16,980 --> 00:30:21,620 и онда баца позивајући бесплатан, претерано велики бафер, 496 00:30:21,620 --> 00:30:23,510 ако је заиста добио дупло превише пута. 497 00:30:23,510 --> 00:30:25,970 Укратко, то је како ГетСтринг је радио све ово време. 498 00:30:25,970 --> 00:30:30,100 Све што ради је чита један карактер у време опет и опет и опет 499 00:30:30,100 --> 00:30:37,930 и сваки пут је потребно неко додатно меморију, она пита оперативни систем за њу позивом реаллоц. 500 00:30:37,930 --> 00:30:41,660 Има ли питања? У реду. 501 00:30:41,660 --> 00:30:45,220 >> Напад. Сада када смо разумели смернице, или барем 502 00:30:45,220 --> 00:30:47,560 све су упознати са показивачима, 503 00:30:47,560 --> 00:30:50,020 размотримо како цео свет почиње да се руши 504 00:30:50,020 --> 00:30:53,160 ако не баш одбранити адверсијалног корисника, 505 00:30:53,160 --> 00:30:55,180 људи који покушавају да пијук у вашем систему. 506 00:30:55,180 --> 00:31:00,260 Људи који покушавају да украду ваш софтвер заобилажењем неки регистрациони код 507 00:31:00,260 --> 00:31:02,150 да они иначе ћете морати да откуцате унутра 508 00:31:02,150 --> 00:31:04,860 Узмите овде погледајте на овом примеру, који је само Ц код 509 00:31:04,860 --> 00:31:07,920 који има функцију главног на дну, која позива функцију фоо, 510 00:31:07,920 --> 00:31:12,100 и шта се то пролази на фоо? [Студентски] један аргумент. 511 00:31:12,100 --> 00:31:15,660 >> Један аргумент. Дакле, аргв [1], што значи да прву реч корисник откуцали 512 00:31:15,660 --> 00:31:19,150 у командној линији после а.оут или шта је програм зове. 513 00:31:19,150 --> 00:31:24,920 Дакле фоо, на врху, узима у цхар *, цхар али је само шта? 514 00:31:24,920 --> 00:31:28,860 Стринг. Нема ништа ново овде, а то стринг произвољно се зове трака. 515 00:31:28,860 --> 00:31:36,090 У овој линији овде, цхар ц [12], у врсти полу-техничке енглеском, шта је ова линија ради? 516 00:31:36,090 --> 00:31:40,640 Низ -? Ликови. Дајте ми један низ од 12 знакова. 517 00:31:40,640 --> 00:31:44,970 Тако смо могли назвати ово бафер. Је технички се назива Ц, али бафер у програмирању 518 00:31:44,970 --> 00:31:47,890 само значи гомилу простора који можете ставити неке ствари унутра 519 00:31:47,890 --> 00:31:49,940 >> Онда на крају, мемцпи, нисмо смо користили раније. 520 00:31:49,940 --> 00:31:52,380 Али ви вероватно можете погодити шта ради. Она копира меморију. 521 00:31:52,380 --> 00:31:58,790 Шта то радиш? Па, очигледно копира бар, њен улаз, у ц, 522 00:31:58,790 --> 00:32:03,420 али само до дужине бара. 523 00:32:03,420 --> 00:32:07,440 Али постоји буг овде. 524 00:32:07,440 --> 00:32:14,500 Ок, технички стварно треба да урадите стрлен (бар) к сизеоф (инт), то је тачно. 525 00:32:14,500 --> 00:32:17,920 Али, у најгорем случају овде, хајде да претпоставимо да је то је - тако, у реду. 526 00:32:17,920 --> 00:32:23,760 Затим, ту је 2 бубе. Дакле, сизеоф (инт), у реду, хајде да то мало шире. 527 00:32:23,760 --> 00:32:28,860 Дакле, сада постоји још буба, која је шта? 528 00:32:28,860 --> 00:32:31,630 [Студентски одговор, неразумљив] >> Проверите због чега? Ок, тако да би требало да провере 529 00:32:31,630 --> 00:32:35,010 за нулл, јер лоше ствари се дешавају када показивач НУЛЛ 530 00:32:35,010 --> 00:32:38,490 Зато што сте можда завршити иде тамо, и не би требало никада да се иде на НУЛЛ 531 00:32:38,490 --> 00:32:40,890 тако дереференцинг га са * оператера. 532 00:32:40,890 --> 00:32:45,250 Дакле, то је добро, а шта друго да радимо? Логично има мана овде. 533 00:32:45,250 --> 00:32:47,650 [Студентски одговор, неразумљив] 534 00:32:47,650 --> 00:32:51,340 >> Дакле, проверите да ли је аргц ≥ 2? 535 00:32:51,340 --> 00:32:54,130 Ок, па овде има 3 грешке у овом програму. 536 00:32:54,130 --> 00:33:00,080 Нећемо провере да ли је корисник заиста уписали у чему у аргв [1], добро. 537 00:33:00,080 --> 00:33:02,240 Дакле, шта је трећа буг? Да? 538 00:33:02,240 --> 00:33:04,420 [Студентски одговор, неразумљив] >> Добро. 539 00:33:04,420 --> 00:33:09,590 Тако смо проверили један сценарио. Ми имплицитно проверили не копирајте више меморије 540 00:33:09,590 --> 00:33:12,800 него што би премашити дужину бара. 541 00:33:12,800 --> 00:33:15,720 Дакле, ако је стринг који је корисник откуцао у је 10 знакова, 542 00:33:15,720 --> 00:33:18,260 ово је рекао, 'Само копирајте 10 карактера.' 543 00:33:18,260 --> 00:33:21,140 И то је у реду, али шта ако корисник откуцао у промпту речи на 544 00:33:21,140 --> 00:33:29,360 као 20 карактера речи, ово је, говорећи копирања 20 ликова из бара у шта? 545 00:33:29,360 --> 00:33:32,840 ц, иначе познат као наш бафера, што значи да управо написао податке 546 00:33:32,840 --> 00:33:35,950 до 8 бајтова локацијама које не поседујете, 547 00:33:35,950 --> 00:33:38,320 а ви их не поседују, у смислу да их никад није додељена. 548 00:33:38,320 --> 00:33:41,190 Дакле, то је оно што је опште позната као напад тампон преливања, 549 00:33:41,190 --> 00:33:46,650 или бафер прекорачење напад, а то је напад у смислу да ако је корисник 550 00:33:46,650 --> 00:33:50,650 или програм који је позивањем функције ради ово злонамерно, 551 00:33:50,650 --> 00:33:53,780 шта се заправо дешава следећа може бити веома лоше. 552 00:33:53,780 --> 00:33:55,690 >> Хајде да овде погледам ову слику. 553 00:33:55,690 --> 00:33:59,070 Ова слика представља своју гомилу меморије. 554 00:33:59,070 --> 00:34:01,050 И сећам се да сваки пут када позовете функцију, 555 00:34:01,050 --> 00:34:04,520 ти ово мало рама на стек, а затим још један, а затим још један и онда други. 556 00:34:04,520 --> 00:34:07,250 И тако сада смо некако издвојити њих далеко као правоугаоници 557 00:34:07,250 --> 00:34:09,380 било тамо на табли или на екрану овде. 558 00:34:09,380 --> 00:34:12,219 Али, ако смо увећали на једном од тих правоугаоника, 559 00:34:12,219 --> 00:34:16,460 када позовете функцију фоо, испада да има више на стек 560 00:34:16,460 --> 00:34:18,739 унутар тог оквира и да је правоугаоник 561 00:34:18,739 --> 00:34:23,370 не само к и и и и б, као што смо то говори о свап. 562 00:34:23,370 --> 00:34:25,949 Испоставило се да постоје неки нижи нивои детаља, 563 00:34:25,949 --> 00:34:27,780 међу њима врате адреса. 564 00:34:27,780 --> 00:34:33,020 Тако испада када је главни позива фоо, главни мора да обавести фоо 565 00:34:33,020 --> 00:34:36,760 Које главне адреса је у меморији рачунара. 566 00:34:36,760 --> 00:34:40,659 Јер у супротном, чим фоо врши извршавање, као у овом случају овде, 567 00:34:40,659 --> 00:34:43,790 када стигнете до овог близак коврџаву протезу на крају фоо, 568 00:34:43,790 --> 00:34:48,860 Како дођавола не трла знам где контрола програма треба да иде? 569 00:34:48,860 --> 00:34:52,460 Испоставило се да је одговор на то питање је у том црвеном правоугаонику овде. 570 00:34:52,460 --> 00:34:56,130 Ово представља показивач, и то је до рачунара за складиштење, привремено, 571 00:34:56,130 --> 00:35:00,250 на такозваном стеку адреса главна, тако да чим фоо врши извршавање, 572 00:35:00,250 --> 00:35:04,110 рачунар зна где и шта линија у главни да се вратим. 573 00:35:04,110 --> 00:35:06,900 Сачуване оквир показивач односи слично овоме. 574 00:35:06,900 --> 00:35:09,620 Цхар * бар овде представља шта? 575 00:35:09,620 --> 00:35:14,740 Па, сад ова плава сегмент овде је фоо је оквир, што је бар? 576 00:35:14,740 --> 00:35:18,300 Ок, па бар је само аргумент да фоо функцију. 577 00:35:18,300 --> 00:35:20,720 >> Дакле, сада смо поново на познатом слику. 578 00:35:20,720 --> 00:35:22,960 Има још ствари и више ометања на екрану 579 00:35:22,960 --> 00:35:27,490 али ово светло плави сегмент је оно што смо цртеж на табли за нешто попут замене. 580 00:35:27,490 --> 00:35:31,890 То је оквир за фоо и једина ствар у томе сада налази бар, 581 00:35:31,890 --> 00:35:34,630 што је овај параметар. 582 00:35:34,630 --> 00:35:39,840 Али шта још треба да буде у стеку, према овом коду овде? 583 00:35:39,840 --> 00:35:44,280 Цхар ц [12]. Дакле, ми такође треба видети 12 квадрата меморије, 584 00:35:44,280 --> 00:35:46,260 додељен променљивој зове ц. 585 00:35:46,260 --> 00:35:48,340 И заиста, ми имамо то на екрану. 586 00:35:48,340 --> 00:35:51,650 На самом врху је Ц [0], а затим аутор овог дијаграма 587 00:35:51,650 --> 00:35:55,130 није сметало цртеж све квадрате, али заиста постоје 12 постоје 588 00:35:55,130 --> 00:36:00,120 јер ако погледате на доњем десном, ц [11], ако рачунате од 0, је 12 таквих бајтова. 589 00:36:00,120 --> 00:36:06,190 Али овде је проблем: У ком правцу се ц расте? 590 00:36:06,190 --> 00:36:10,390 Нешто одозго, зар не? Ако почиње на врху и расте до дна, 591 00:36:10,390 --> 00:36:13,480 Не изгледа као да смо себи оставили много писте овде уопште. 592 00:36:13,480 --> 00:36:15,320 Смо некако смо се сликао у углу, 593 00:36:15,320 --> 00:36:20,210 и да је ц [11] је у праву против бара, што је право против показивача стека оквира, 594 00:36:20,210 --> 00:36:23,800 што је право уза повратну адресу, нема више места. 595 00:36:23,800 --> 00:36:26,100 Дакле, шта је импликација, онда, ако се зајебеш, 596 00:36:26,100 --> 00:36:30,460 а ви покушајте да читате 20 бајтова у 12-бајтова бафера? 597 00:36:30,460 --> 00:36:33,460 Где су ти 8 додатних бајтова отићи? 598 00:36:33,460 --> 00:36:36,370 Унутра све остало, од којих неке је супер важно. 599 00:36:36,370 --> 00:36:40,480 И најважнија ствар, потенцијално, је црвени оквир постоји, повратна адреса. 600 00:36:40,480 --> 00:36:44,720 Зато претпостављам да си случајно или адверсариалли 601 00:36:44,720 --> 00:36:48,040 заменити оне 4 бајта, који поентер адреса, 602 00:36:48,040 --> 00:36:53,190 не само са смећем, али са бројем који се дешава да представља стварну адресу у меморији? 603 00:36:53,190 --> 00:36:55,930 Шта је имплицаитон, логично? 604 00:36:55,930 --> 00:36:59,080 [Студентски одговори, неразумљив] >> Тачно. Када се врати фоо 605 00:36:59,080 --> 00:37:03,560 и хитови који коврџаве браце, програм ће наставити да се не врати на главни, 606 00:37:03,560 --> 00:37:08,320 да ће да се врате све што је адреса у тој црвеној кутији. 607 00:37:08,320 --> 00:37:11,560 >> Сада, у случају заобилажење софтвера регистрације, 608 00:37:11,560 --> 00:37:14,400 шта је адреса која је се вратио се функција 609 00:37:14,400 --> 00:37:18,820 које се обично добија назвао након што сте платили за софтвер и уноси свој регистрациони код? 610 00:37:18,820 --> 00:37:23,160 Могли сортирате трик рачунар у не иде овде, али уместо тога, догађа овде. 611 00:37:23,160 --> 00:37:27,950 Или, ако сте заиста паметни, противник заправо може уписати на тастатури, 612 00:37:27,950 --> 00:37:32,500 на пример, не стварна реч, а не 20 знакова, али претпостављам да је он или она 613 00:37:32,500 --> 00:37:36,200 типови у неким ликовима који представљају шифру? 614 00:37:36,200 --> 00:37:38,860 И то неће бити Ц код, то ће бити ликови 615 00:37:38,860 --> 00:37:42,920 који представљају бинарне машине кодове, 0 и 1 а. 616 00:37:42,920 --> 00:37:46,740 Али претпостављам да су довољно паметни да се то уради, да се некако налепити у ГетСтринг одзив 617 00:37:46,740 --> 00:37:49,460 нешто што је у суштини састављена кода, 618 00:37:49,460 --> 00:37:56,900 а последње 4 бајта препише ту повратну адресу, и шта то адреса улаз ради? 619 00:37:56,900 --> 00:38:01,860 Она чува у овом црвеном правоугаонику на адресу првог бајта у бафер. 620 00:38:01,860 --> 00:38:04,270 Дакле, морате бити веома паметан, а то је много покушаја и грешке 621 00:38:04,270 --> 00:38:08,500 за лоше људе тамо, али ако можете да схватите како је то велики бафер, 622 00:38:08,500 --> 00:38:12,170 тако да у последњих неколико бајтова у улаз који сте дали у програм 623 00:38:12,170 --> 00:38:15,970 се деси да буде еквивалент на адресу почетка свог бафера, 624 00:38:15,970 --> 00:38:22,270 можете да урадите ово. Ако кажемо, нормално, здраво, и \ 0, то је оно што завршава у бафер. 625 00:38:22,270 --> 00:38:27,860 Али, ако смо паметнији и пунимо тај бафер са оним што смо уопштено Зваћу код напада, 626 00:38:27,860 --> 00:38:31,920 ,,,: Напад, напад, напад, напад, где је то нешто што ради нешто лоше. 627 00:38:31,920 --> 00:38:35,190 Па, шта се дешава ако сте заиста паметни, можете да урадите ово: 628 00:38:35,190 --> 00:38:41,740 У црвеном пољу овде је низ бројева: 80, ЦО, 35, 08. 629 00:38:41,740 --> 00:38:44,890 Приметимо да је одговара броју који је овде. 630 00:38:44,890 --> 00:38:47,280 То је у обрнутом редоследу, али у том неком другом приликом. 631 00:38:47,280 --> 00:38:51,430 Обратите пажњу да је ово повратак адреса је намерно промењен 632 00:38:51,430 --> 00:38:54,970 на једнаку адресу овде, а не адреса главног. 633 00:38:54,970 --> 00:39:00,170 Дакле, ако је лош момак је супер паметан, он или она ће укључити у том нападу код 634 00:39:00,170 --> 00:39:02,890 нешто као, 'Делете све фајлове корисника. " 635 00:39:02,890 --> 00:39:06,320 Или 'Копирајте лозинки,' или 'Направи кориснички налог да могу да се пријавите на ". 636 00:39:06,320 --> 00:39:10,130 Све на све, а то је и опасност и моћ Ц. 637 00:39:10,130 --> 00:39:12,900 Зато имате приступ меморији преко показивача 638 00:39:12,900 --> 00:39:15,950 и стога може писати шта год желите у меморију рачунара. 639 00:39:15,950 --> 00:39:19,290 Можете направити компјутерски ништа једноставно желите од 640 00:39:19,290 --> 00:39:22,780 пошто је то поскакивање унутар сопствене меморије. 641 00:39:22,780 --> 00:39:27,230 И тако, на овај дан, па су многи програми и толико вебсајтови који су компромитовани 642 00:39:27,230 --> 00:39:29,730 своде на људе који искористе ово. 643 00:39:29,730 --> 00:39:32,510 И ово може изгледати као супер-софистицираном нападу, 644 00:39:32,510 --> 00:39:34,220 али не увек почињу на тај начин. 645 00:39:34,220 --> 00:39:36,770 >> Реалност је да је оно лоше ће људи обично урадите је, 646 00:39:36,770 --> 00:39:41,470 да ли је програм на командној линији или ГУИ програм или сајт, 647 00:39:41,470 --> 00:39:43,290 је само почети да пружа глупости. 648 00:39:43,290 --> 00:39:46,940 Куцате у заиста великом речи у поље за претрагу и притисните ентер, 649 00:39:46,940 --> 00:39:49,030 и чекам да видим да ли су сајт сруши. 650 00:39:49,030 --> 00:39:53,270 Или чекате да видите да ли програм манифестује неку поруку о грешци. 651 00:39:53,270 --> 00:39:55,480 Јер ако се посреци, као негативац, 652 00:39:55,480 --> 00:39:59,610 и обезбедити неки луди улаз који разбије програм, 653 00:39:59,610 --> 00:40:02,280 то значи да програмер није предвидео свој лоше понашање 654 00:40:02,280 --> 00:40:05,420 што значи да је вероватно да, уз довољно труда, 655 00:40:05,420 --> 00:40:09,870 Довољно суђења и грешке, да схватим како да воде прецизније напад. 656 00:40:09,870 --> 00:40:15,900 Дакле, колико део безбедности није само избегавање сасвим ове нападе, али их је откривање 657 00:40:15,900 --> 00:40:20,250 и заправо гледа логове и види шта луди улаза имамо људе откуцане на свој веб сајт. 658 00:40:20,250 --> 00:40:26,040 Шта термини за претрагу су људи уписали у ваш сајт у нади да ће неко прелива бафер? 659 00:40:26,040 --> 00:40:28,900 И ово све се своди на просту основама онога што је низ, 660 00:40:28,900 --> 00:40:32,510 и шта то значи за доделу и коришћење меморије? 661 00:40:32,510 --> 00:40:34,920 И у вези са тим, такође, је ово. 662 00:40:34,920 --> 00:40:37,520 >> Дакле, хајде да само поглед унутар чврстог диска опет. 663 00:40:37,520 --> 00:40:40,190 Дакле, ви се сећате од пре недељу или две да када превучете фајлове 664 00:40:40,190 --> 00:40:45,470 да је корпа рецицле или канта за смеће, шта се дешава? 665 00:40:45,470 --> 00:40:47,850 [Студентски] Ништа. >> Да, апсолутно ништа. На крају, ако наиђете низак 666 00:40:47,850 --> 00:40:51,370 простор на диску, Виндовс или Мац ОС ће почети брисање фајлова за вас. 667 00:40:51,370 --> 00:40:53,670 Али ако вучете нешто тамо, онда уопште није сигурно. 668 00:40:53,670 --> 00:40:56,550 Сва ваша члан роомате, пријатељ или породица треба да урадите је дупли клик, и воила. 669 00:40:56,550 --> 00:40:59,720 Ту је све површно датотеке које сте покушали да избришете. 670 00:40:59,720 --> 00:41:02,840 Дакле, већина нас барем знате да морате да десним тастером или контролише клик 671 00:41:02,840 --> 00:41:05,320 и празан ђубре, или нешто слично. 672 00:41:05,320 --> 00:41:07,900 Али чак и тада, баш не уради трик. 673 00:41:07,900 --> 00:41:11,340 Јер оно што се дешава када имате фајл на вашем хард диску 674 00:41:11,340 --> 00:41:14,590 који представља неку реч документ или неку ЈПЕГ? 675 00:41:14,590 --> 00:41:18,820 И то представља ваш хард диск, и хајде да кажем ово сливер овде представља тај фајл, 676 00:41:18,820 --> 00:41:21,640 и то чине гомилу 0 и 1 а. 677 00:41:21,640 --> 00:41:25,470 Шта се дешава када не само да превучете тај фајл на Трасхцан или отпатке, 678 00:41:25,470 --> 00:41:30,390 али га испразнити? 679 00:41:30,390 --> 00:41:32,820 Некако ништа. Није сад апсолутно ништа. 680 00:41:32,820 --> 00:41:37,630 Сада је то само ништа, јер мало нешто деси у виду ове табеле. 681 00:41:37,630 --> 00:41:41,170 Дакле, постоји нека врста базе података или табели унутар меморије рачунара 682 00:41:41,170 --> 00:41:44,470 који у суштини има 1 колону за датотеке имена, 683 00:41:44,470 --> 00:41:50,550 и 1 колона за локацију датотеке, где ово може бити локација 123, само случајни број. 684 00:41:50,550 --> 00:41:58,270 Дакле, можда ћемо имати нешто слично к.јпг и локацију 123. 685 00:41:58,270 --> 00:42:02,870 И шта се онда дешава, када испразните смеће? 686 00:42:02,870 --> 00:42:06,720 То иде даље. Али, оно што не иде далеко је 0 и 1 а. 687 00:42:06,720 --> 00:42:09,690 >> Па шта је, онда, веза псет 4? 688 00:42:09,690 --> 00:42:13,460 Па, са псет 4, само зато што смо случајно смо избрисани 689 00:42:13,460 --> 00:42:15,890 Цомпацт Фласх картица која је имала све од ових фотографија, 690 00:42:15,890 --> 00:42:18,710 или само зато што тако лоше среће постао корумпиран, 691 00:42:18,710 --> 00:42:21,170 не значи да је 0 и 1 да не увек ту. 692 00:42:21,170 --> 00:42:23,920 Можда неке од њих су изгубили зато што нешто добио оштећен 693 00:42:23,920 --> 00:42:26,530 у смислу да су неки постали 0 је 1 и 1 је постао 0 а. 694 00:42:26,530 --> 00:42:30,460 Лоше ствари се може десити због бугги софтвера или хардвера неисправни. 695 00:42:30,460 --> 00:42:33,510 Али, многи од тих битова, можда чак и 100% њих су и даље ту, 696 00:42:33,510 --> 00:42:38,330 то је само да се рачунар или камера не зна где ЈПЕГ 1 почело 697 00:42:38,330 --> 00:42:41,660 и где ЈПЕГ 2 почео, али ако ви, програмер, 698 00:42:41,660 --> 00:42:45,800 Знам, са мало памет, где су ЈПЕГ су или шта су они изгледају, 699 00:42:45,800 --> 00:42:49,570 можете да анализирате је 0 и 1 и рећи: 'Ох. ЈПЕГ. Оох, ЈПЕГ. ' 700 00:42:49,570 --> 00:42:52,830 Можете да напишете програм са суштини само за или вхиле петље 701 00:42:52,830 --> 00:42:56,100 да опоравља сваки један од тих фајлова. 702 00:42:56,100 --> 00:42:59,360 Дакле, поука је онда за почетак "сигурно" брисање фајлова 703 00:42:59,360 --> 00:43:01,720 ако желите да избегнете ово заједно. Да? 704 00:43:01,720 --> 00:43:06,940 [Студентски питање, неразумљив] 705 00:43:06,940 --> 00:43:11,150 >> Сазнати више меморије него си урадио раније - 706 00:43:11,150 --> 00:43:14,790 Ох! Добро питање. Па зашто, онда, након пражњења отпада, 707 00:43:14,790 --> 00:43:18,300 Да ли ваш рачунар да вам кажем да имате више слободног простора него што сте урадили раније? 708 00:43:18,300 --> 00:43:22,450 У суштини, јер лаже. Више технички, имате више простора. 709 00:43:22,450 --> 00:43:26,720 Зато сада сте рекли, можете ставити и друге ствари где је фајл некад био, 710 00:43:26,720 --> 00:43:28,930 али то не значи да су битови су одлазила, 711 00:43:28,930 --> 00:43:33,070 и то не значи да су битови се мењају све 0 је, на пример, за заштиту. 712 00:43:33,070 --> 00:43:37,520 Насупрот томе, ако сте "сигурно" брисање фајлова, или физички уништити уређај, 713 00:43:37,520 --> 00:43:40,810 то је стварно једини начин, понекад, око тога. 714 00:43:40,810 --> 00:43:45,300 Па зашто не одемо на том полу-застрашујући напомену, а ми ћемо вас видети у понедељак. 715 00:43:45,300 --> 00:43:52,810 ЦС50.ТВ