[Powered by Google Translate] [WEEK 5] [데이비드 J. Malan, 하버드 대학교] [이 CS50 수 있습니다.] [CS50.TV] [여자] 그는 거짓말을하고있어, 일에 대해, 나도 몰라. [남자] 그래서 우리는 무엇을 알 수 있습니까? [여자] 9시 15 분에 레이 산토는 ATM에 답니다. [남자] 그럼 질문에, 그는 9시 16 분에 무슨 짓 한거야? [여자]는 무언가에 9 밀리 찍습니다. 아마 그 저격수를 보았다. [남자] 또는 그가 그와 함께 작업했다. [여자] 기다립니다. 하나를 뒤로 이동합니다. [남자]는 당신이 무엇을 보이나요? [♫ 긴장감 흐르는 음악은 ♫] [여자] 얼굴을 가져 오십시오. 전체 화면. [남자] 그의 안경을 쓴 사람이야. >> 반사 된 영상이있어. [♫ 긴장감 흐르는 음악은 ♫] [남자] 그게 Nuevita의 야구 팀입니다. 그 팀 로고 네요. [여자] 저 재킷을 입은 사람에게 얘기하고있어. [데이비드 Malan] 지금이 CS50 주 5, 오늘날 우리는 당신을 위해 TV와 영화의 조금을 망치. 그래서 여기있는 것과 같은 쇼를 지켜보고 때마다 그리고 경찰은 "당신이 청소를 할 수 있습니까?"라고 또는 "개선" 현실 세계에서 강화가 없습니다. 사실, 당신이 정말로 얻을 것은 이와 같은 작은 선물입니다. 나는 페이지에서 직원 사진 중 하나를 찾았습니다. 이 포토샵이라는 프로그램입니다. 이 2 Bowdens의 1 실제로 1 3의 Bowdens, 오늘, 우리는 로브와 폴과 함께뿐만 아니라 여기에 부인을 보덴이 때문입니다. 하지만, 여기에 화면에 롭이며, 경우 그는 항상 그의 눈에 있었죠 그 반짝임에에 우리는 확대, 만약 당신이 실제로는 보이지 것은 당신이보고하면 얻을 무엇이다. 이 "강화"입니다이 "CSI"는 조금 잘못되어 있습니다. 우리가 조금 더 "CSI"를 선택할 수있는 경우 다른 클립이있다. 이 사람은 당신이 원하는 경우 금후 대단히 좋은 문구입니다 정말, 당신은 아무것도 말을하지 할 때, 친구들과 기술적 소리. [남자] 주 동안 나는 택시 기사 살인 사건을 조사하고 한 특정 병적 매력이 있습니다. [여자 # 1]이 실시간으로됩니다. [여자 # 2] 내가 IP 주소를 추적 할 수 있는지, Visual Basic을 사용하여 GUI 인터페이스를 만들 수 있습니다. [Malan] Visual Basic을 사용하여 GUI 인터페이스를 생성, 옆 동기화 그럼 오디오 IP 주소를 추적하는 것은 전체 터무니없는 소리입니다. 요즘 당신은 Visual Basic을 사용하지 않을 거기에 GUI에 대한 필요가없고, IP​​ 주소는 기술적으로 정확한 용어했습니다. 따라서 이것들을 지켜, 내 즐겨 찾기 중 하나 당신이 다른 언어를 알 필요가 있기 때문에 하나는 좀 더 마법입니다. C.의 상위 집합입니다 오브젝티브-C라는 언어가 있어요 어떤 사람들 객체 지향 프로그래밍 간의 그건 C 플러스 몇 가지 추가 기능을 의미합니다. 그리고 애플은 iOS를 프로그래밍에 대한 대중화 것을 언어입니다. 그리고 여기가 "숫자"에서, 모두 다른 쇼에서 반칙이에요 당신이 실제로 바로 그 순간에서 티보 (TiVo) 및 일시 중지에 자세히 들여다 보면, 당신은 그들이보고있는 것은별로 설명되는 무엇 것을 확인할 수 있습니다. 그리고 내가 여기서 다른 오디오 커넥터를 시도하고 우리가 그럴 수 있는지 알려 동기화에서 오디오이 시간을 유지. 난 "숫자를."을 제공 [남자 # 1]은 32 비트 IPv4 주소입니다. [남자 # 2] IP, 인터넷입니다. >> 개인 네트워크입니다. 이 아니타의 개인 네트워크입니다. [Malan] 좋아. 이 목표-C이며, 어떤 녀석 색칠 공부 프로그램입니다 당신은 아마도 거기에 변수의 이름에서 추측 할 수 있습니다. 그래서 그런 다음, "숫자"이었다. 우리는 소개 오늘 이번 주 그래서 법의학 따라서 문제의 컨텍스트의 세계가 좀. 여기에 특별한 이벤트가 있기 때문에 오늘은 간략 강의 될 것입니다 이후, 우리는 학생들과 학부모 모두 오늘을 모두 들여다 봐도, 그리고 애타게합니다 수평선에있는 몇 가지가 있습니다. 그중 월요일로, 당신은 몇 친구들을 갖게됩니다. EdX, 하버드와 오픈 코스에 대한 MITs 새로운 온라인 사업 더, 월요일에 하버드의 캠퍼스에서 시작됩니다. 오는 월요일 의미는 당신이해야합니다 - 마지막으로 백작의 등 86,000 추가 급우가 CS50의 강의와 함께 다음과 같은 될 것입니다 그리고 섹션 및 연습 및 문제 세트. 그리고이의 일환으로, 당신은의 창립 클래스의 멤버가됩니다 CS50 지금 CS50x. 이 일환으로, 지금,뿐만 아니라 몇 가지 나름의​​ 매력이있을 것 알고 있습니다. 학생들의 거대한 수에,이에 대한 준비를하기 위해, 말하면 우리는 108 TFS와 인증 기관 (CA)을하더라도, 별로 최고의 학생 / 교사 비율 우리가 80,000 다른 학생들을 누르되면. 그래서 우리는 많은 문제를 등급 할 일은 없겠죠 수동으로 설정합니다. 그럼 문제 세트에 이번 주에 소개가 CS50 확인 될 것입니다 어플라이언스 명령 줄 유틸리티가 될 것입니다 어떤 이 주말 나중에 업데이트하면 당신은 얻을 거라고, 당신이 명령을 실행 할 수 있습니다,, 50을 확인 자신의 pset에, 당신은 당신의 프로그램이 있는지 여부에 관해서 의견을 당할거야 올바른 또는 잘못된 우리가 제공 한 다양한 디자인의 사양에 따라. 그럼에 더 문제 세트 사양과 CS50x 친구들도이를 사용합니다. 따라서 문제 세트 4 법의학에 대한 모든 것입니다. 그리고이 곡은 진짜 생활 것들에서 영감을 얻었습니다 제가 대학원에있을 상기했을 때, 내가 함께 잠시 동안 인턴 미들 카운티의 지방 검사 사무실 법정 일을하고 자신의 리드 법정 수사관과 함께, 그리고이에 달한다 , 내가 몇 주의 과거를 언급 생각 질량 주 경찰이나 다른입니다 에 올, 그들은 하드 드라이브 및 CD 및 플로피 디스크 등을 내려 것 다음과 같은, 그리고는 법의학 사무소의 목표는 확인할 여부 가 발생했습니다 또는 어떤 종류의 증거 아니 었습니다. 이 특별 조사 단위이었고, 때문에 화이트 칼라 범죄 그것은 범죄의 더 많은 염려이었는데 디지털 미디어의 일부 종류를 포함하는 일이, 판명이 안 많은 사람들이 라는 이메일 쓰기 "내가했다고합니다." 꽤 자주 법의학 검색, 모든 많은 열매를 발견하지 못했어요 때때로 사람들은 이와 같은 이메일을 작성합니다. 그래서 때로는 노력을 보상했다. 그러나이 법정 pset까지 이끌어, 우리는 pset 4 그래픽 약간 소개됩니다. 그래서 당신은 아마 부여, JPEG 파일, GIF를하고 요즘 같은이 일을 하지만 당신이 정말로 그것에 대해 생각하면, 이미지, 훨씬 롭의 얼굴처럼 점의 순서, 또는 픽셀로 모델링 할 수있다. 이제 롭의 얼굴의 경우, 색상 모든 종류의이있어 우리는, otherwide 픽셀로 알려진 개인 점을 볼 시작 우리가 '확대 시작 그러나 우리는 세상을 조금 단순화하고, 여기이 로브 것이라고 말한다면, 검은 색과 흰색, 잘 대표 할 흑백으로 우리는 바이너리를 사용할 수 있습니다. 그리고 우리가 바이너리를 사용하려고하는 경우, 1 또는 0, 우리는이 같은 이미지를 표현할 수 비트의 패턴 롭의 웃는 얼굴의 : 11,000,011 나타냅니다 흰색, 흰색, 검정, 검정, 검정, 검정, 흰색 흰색. 그리고 그 화려한 사진에 대해 얘기를 시작하기 위해 다음 큰 도약 없습니다. 당신은 페이스 북에서 볼 또는 디지털 카메라로 소요될 것으로 것들, 하지만, 확실히, 그 색상에 관해서는, 당신은 더 많은 비트가 필요합니다. 그리고 사진의 세계의 매우 일반적인, 안 1 비트 색상을 사용하는 것입니다 이 제안하지만, 24 비트 컬러, 실제로는 색상 수백만을 곳.로 그래서 우리는 롭의 눈에 확대했을 때의 경우에서와 같이, 그 서로 다른 다채로운 가능성 수백만의 숫자했습니다. 그래서 우리는, 문제 세트 4뿐만 아니라 연습이를 소개합니다 때문에 여기 금요일 강의의 일반적인 2시 반을 대신 3시 30 분에 오늘 할 것입니다. 그러나 비디오는 평소처럼, 내일 온라인 될 것입니다. 우리는 또한 다른 파일 형식을 소개합니다. 그래서 의도적으로 처음에는 협박 보는 의미 하지만이 C의 구조체에 대한 좀 설명서입니다. 그것은 MS가 몇 년 전,이 형식을 보급하도록 도움을 밝혀 비트 맵 파일 형식, BMP,이 슈퍼 단순라고 불리는 오랫동안 사용 된 컬러 풀 한 그래픽 파일 형식 때로는 여전히 데스크톱에 바탕 화면에. 당신은 Windows XP와 언덕과 푸른 하늘로 생각한다면, 그 일반적으로 BMP, 또는 비트 맵 이미지, 비트 맵했습니다 사람들이 좀 더 복잡성을 가지고 있기 때문에 우리 재미 있습니다. 은 0의 1의의 그리드와 같은 매우 간단한 게 아냐, 대신, 당신은 파일의 시작 부분에 헤더 등이 있습니다. 그래서 다른 말로,. bmp 파일 안에 공의와 1의의 전체 무리는, 하지만 일부 추가 공의와 1의 거기에가 있습니다. 그리고, 년 동안 당연한 우리가 아마 촬영 한 것이 밝혀 . 문서 나. xls 또는. mp3 또는. MP4와 같은 파일 형식 당신은 잘 알고 있다는 어떤 파일 형식. 음, 심지어 파일 형식이어야한다는 것은 무슨 뜻입니까? 하루의 끝에 있기 때문에 우리가 사용하는 이러한 파일은 모두가 단지 0 년대와 1의 그리고 아마도 그 공의와 1의는 A, B, C, ASCII 또는 같은 통해를 나타냅니다 하지만 하루의 끝을 통해, 단지 공의와 1의입니다. 그래서 인간은 종종 새로운 파일 형식을 발명하기로 결정 그들은 비트의 패턴이 실제로 의미 무엇을 표준화 곳. 그리고 여기이 경우에, 사람들이 비트 맵 파일 형식을 디자인 사람 비트 맵 파일의 첫 바이트에 같은 오프셋 0으로 표시했다, 거기 일부 cryptically라는라는 변수 bfType,이있을거야 이는 단지 비트 맵 파일 형식을 의미,이 무엇인지 비트 맵 파일의 유형입니다. 당신은 2 오프셋하는 두 번째 행, 바이트 2 번에서, 아마도 추측 할 수 0의 1의 무엇을 대표하는 그 패턴이있다 고요? 일의 크기, 그리고 거기에서 계속된다. 따라서 문제 세트 4, 당신은이 물건들 중 일부를 정리 걸어됩니다. 우리는 모두에 대해 신경 결국,하지만 사실을 알 수 없습니다 그것은 흥미로운 시작 선 또는 바이트 54, rgbtBlue, 녹색 및 빨간색에 걸쳐 다양하게 준비되어 있습니다. 지금까지 약어 RGB, 빨강, 녹색 파랑을 들었습니다 있으면 해당에 대한 참조입니다. 이 판명하기 때문에 당신은 무지개의 모든 색깔을 칠 수 있습니다 빨강, 파랑, 녹색의 조합이 있습니다. 그리고 사실, 방에있는 부모는 최초의 프로젝터의 일부를 기억 할 수 있습니다. 요즘, 당신은 단지 한 밝은 빛이 렌즈에서 나오는 참조하십시오. 그러나 다시 하루에, 당신은 빨간색 렌즈, 파란색 렌즈, 그리고 녹색 렌즈를 가지고 함께 그들은 화면을 목표로하고 다채로운 사진을 맺었습니다. 그리고 종종 중학교, 고등학교 이러한 렌즈를 것 계속 그리 약간 비스듬히 있으므로, 더블 또는 트리플 이미지를보고 지내다가 하지만 그게 생각 이었어요. 당신은 그림 빨간색과 녹색과 청색 빛을했습니다. 그리고 같은 원리는 컴퓨터에서 사용됩니다. 그래서 도전 중, 그럼, 당신을위한 문제에서 4를 설정 몇 가지가 될 것이다, 하나는 실제로 이미지 크기를 조정하는 것입니다. 0의 1의의 패턴에 걸릴하기 위해, 0의 1의의 덩어리는 구조의 어떤과 ​​같이 표현되는 알 빨간색, 파란색, 녹색 : 다음 픽셀을 복제하는 방법을 알아내는 그래서 내부 사진은 처음과 같은 경우 그 후 대신 이렇게 볼 수 있습니다. 다른 도전 중, 너무, 당신이 전달됩니다 때문일 것입니다 디지털 카메라에서 실제 파일의 법정 이미지 그 카메라에, 옛날 옛적에, 사진의 전체 무리가 있었다. 문제는, 우리가 실수 삭제하거나 이미지가 어떻게 든 손상했다합니다. 나쁜 일들은 디지털 카메라로 발생하고, 그래서 우리는 신속하게 0의 1의 모든 복사 에서 당신을 위해 그 카드를, 1 큰 파일에 모두 저장 한 후 우리는 당신에게주게 될것이다 당신은 복구 할 수있는과 C에서 프로그램을 작성할 수 있도록 문제에서 4를 설정 이러한 JPEG 파일의 모든 이상적. 그리고, 그들은 다소 복잡한 파일 형식의 있는데도, 그 JPEG 파일을 변 그들은 훨씬 더 복잡 여기이 웃는 얼굴보다하고 있습니다. 이 모든 JPEG 0 년대와 1의 같은 패턴으로 시작을 이용할 수 있습니다. 따라서 루프 또는 이와 유사한을위한 잠시 동안 루프 또는를 사용하여, 당신은 모든 공의와 1의이 법정 이미지를 통해 반복 할 수 있습니다 하고 문제 세트의 사양에 정의되어있는 특별한 패턴을 볼 때마다, 당신은 매우 높은 확률로, '아, 여기, 생각할 수 JPEG의 시작 '가능한 빨리 찾을 수와 같은 패턴, 나중에 바이트 또는 킬로바이트 또는 메가 바이트 일부 번호, 당신은 아 ', 가정 수 있습니다! 다음은 두 번째 JPEG, 나는 첫 번째 한 후 찍은 사진입니다. 저 첫 번째 파일을 읽는 중지하자,이 새로운 하나를 쓰기 시작합니다. ' 그리고 pset 4 프로그램의 출력은 많은 50 JPEG 파일 될 것입니다. 나이가 50 JPEG 파일이 아니라면, 당신은 루프 약간 있습니다. 당신은 JPEG 파일의 무한한 번호가있는 경우, 당신은 무한 루프를 갖추고 있습니다. 그래서들도 꽤 일반적인 경우입니다. 그 수평선에 어떤입니다. 우리 뒤에, 0 퀴즈. 실현, 이메일 당, 그게 늘 사람들이있어 행복 중성의 종류, 그리고 퀴즈 주변 슬픈 영 시간이 모두 사람들이있는 것 같다. 그리고 머리 TFS, Zamyla, 자신의 TF, 나에게 연락 바랍니다 당신이 일을 택한 방법에 대해 논의하려는 경우 귀하가 알고있는 인증 기관 (CA) 또는 하나입니다. 그래서, 방에 여기 부모를 감동하는 CS50 라이브러리는 무엇입니까? 잘 했어. CS50 라이브러리는 무엇입니까? 응? [학생 답변, 이해할 수없는] >> 그래, 좋아. 그래서 우리는 직원이 작성하는 코드의 prewritten 세트예요 우리는 몇 가지 일반적인 기능을 제공하기 위해, 여러분에게 제공합니다. 여기에 나와있는 모든 기능, 나에게 정수를, 나에게 문자열을 좋아 소식입니다. 지금부터는 우리가 정말 이러한 훈련 바퀴를 벗을 시작합니다. 그래서 우리는, 귀하의 "문자열"을 멀리하기 시작 할거야 하는 리콜, 왜 실제 데이터 유형에 대해 단지 동의어 였어요? 숯불 *. 따라서 부모, 그건 아마도 - 그래서, 그래서 숯불 * 우리는 확인할 수 있습니다 화면에 표시되는 모든 우리의 어휘에서 "문자열을"제거로 더 실제로 코드를 작성하는에 제공 적어도 때. 마찬가지로, 우리는만큼 이러한 기능 중 일부를 사용을 중지합니다 우리의 프로그램은 더 정교 얻을 수 있기 때문에 보다는, 그냥 프롬프트 점멸과 함께 앉아 프로그램을 작성 인치 무언가를 입력 할 사용자에 대한 대기 당신은 다른 곳에서 입력을받을 수 있습니다. 예를 들어, 로컬 하드 드라이브에 비트 일련의에서 그들을 얻을 수 있습니다. 대신 일부 웹 사이트 어디 선가, 네트워크 연결에서 미래에 그들은 잡을거야. 그래서 처음으로 돌아 계층 껍질을 벗기면의하자, 그리고 CS50 기기를 당겨 당신이 주를 포함 날카로운했던 CS50.h 전화이 파일. 그러나의 사실이 안에 뭐가 보자. 그럼 파란색으로 파일의 상단, 그냥 코멘트를 왕창입니다 보증 정보 및 라이센스. 이 일반적인 패러다임의 일종입니다 소프트웨어에 있기 때문에 소프트웨어의 많은 이러한 일 "오픈 소스"라는거야 어떤 사람이 코드를 작성했습니다 것을 의미합니다 그리고, 단지 실행하고 사용하는이 자유롭게 이용할 수 하지만 실제로 읽고 변경하고 자신의 작품에 통합 할 수 있습니다. 수 있도록, 당신이 오픈 소스 소프트웨어를 사용했던 거예요 매우 작은 형태에도 불구하고. 나는 코멘트를지나 아래로 스크롤하면,하지만, 우리는 좀 더 친숙한 것을 확인할 수 있습니다. 따라서 CS50.h 파일이 헤더 파일의 전체 많이 포함되어 여기 상단에있는 확인합니다. 지금, 이들의 대부분은 우리가 전에 보지,하지만 그 중 하나는 익숙한,이 중 어떤 우리가 지금까지, 짧게이라도 본 적 있어요? 네, 표준 라이브러리. Stdlib.h는 malloc이 일단 우리는 동적 메모리 할당에 대해 얘기하기 시작 우리는뿐만 아니라 다음 주에 돌아 오면되는, 우리는 그 파일을 포함 시작했다. 이 BOOL와 TRUE와 FALSE 것은 사실 이라기보다는, C에 존재하지 않는 것이 밝혀졌다 여기이 파일을 포함하지 않는 한. 그래서 우리는, 주, 표준 bool.h을 포함 된 당신은의, BOOL true 또는 false를 반환합니다. 개념을 사용할 수 있도록 이 없으면, 당신은 가짜 그것을 정렬하여 정수를 사용해야 불과 임의로 0 거짓 1에 해당하는 것으로 가정합니다. 이제 우리는 더 아래로 스크롤하면, 여기 문자열의 우리의 정의입니다. 그것은이 *가있는 곳 정말 중요하지 않습니다, 우리가 전에 말했듯이, 밝혀졌다. 당신은 모든 주위 공간을 가질 수 있습니다. 저희 이번 학기는 *는 유형과해야한다고 명확하게이로 추진되었습니다. 그러나 좀 더 일반적인하지 않을 경우, 거기에 뒀을 것입니다, 단지와 같은 일반적인, 실현 하지만 기능적으로는 같은 일입니다. 우리가 더 아래로 읽으면 그러나 지금, 우리의 말을 살펴, GetInt을 봅시다 우리는 무엇 이번 학기 전에, 아마도 그 사용 때문입니다. 여기 GetInt입니다. 이 무엇입니까? 이 프로토 타입입니다. 너무 자주, 우리는 우리의의 정상에 프로토 타입을 넣어했습니다. C 파일은, 뿐만 아니라 헤더 파일. h 파일에 프로토 타입을 넣을 수 있습니다 여기이 같은, 그래서 당신은 몇 가지 기능을 쓸 때 당신은 다른 사람들이 사용할 수 있도록하려는, 즉, CS50 라이브러리와 정확히 같은 경우가 있습니다 당신은 CS50.c 같은 귀하의 기능을 구현뿐만 아니라 당신은 또한 안 파일의 상단에있는 프로토 타입을 넣어하지만 헤더 파일의 상단에있는 해당 헤더 파일은, 친구, 동료 등이 무슨 날카로운와 함께 자신의 코드에 포함되어 있습니다. 항상 그래서 당신은 당신의이 프로토 타입의 모든 포함 된 것 효율적으로 파일의 상단에,이 날카로운 의해 메커니즘을 포함 그 본질적 사본 및 페이스트 자신에이 파일을 만듭니다. 자, 여기 몇 가지 매우 자세한 설명서입니다. GetInt은 정수를 얻을 수 있다는 당연한 우리는 꽤 많이 촬영 한 일부 코너 경우가 뽑는하지만, 권리를 변? 어떤 방법이 너무 큰 수의 사용자가 형식면? 단지 정수의 내부에 맞지 않을 수있는 quintillion? 예상 행동은 무엇입니까? 음, 이상적으로, 그것은 예측입니다. 따라서이 경우에는, 사실의 작은 글씨도 읽을수 경우 그 라인을 읽을 수없는 경우,이 반품 INT_MAX를 볼 수 있습니다. 우리는이 얘기는하지 있지만 대문자에 따라 적 아마도, 무엇입니까? 이 상수이고, 그래서 아마도 선언있어 특별한 상수입니다 파일에 높게 해당 헤더 파일 중 하나에서, 그리고 INT_MAX는 아마 2000000000, 약 같은 일입니다. 우리가 어떻게 든 무언가를 의미해야하기 때문에 있다는 생각은 잘못 갔다 우리는, 그래, 우리의 처분 4,000,000,000 번호가 최대 2 억에 부정적인 2,000,000,000은 어림 잡아서. 음, 프로그래밍에서 자주 발생하면 단지 그 숫자 중 하나를 훔쳐입니다. 아마 0, 어쩌면 2000000000, 아마도 부정적인 2000000000. 당신이 세계에 커밋 할 수 있도록 당신이 수있는 값 중 하나를 지출 뭔가 일이 잘못되면 즉,이 슈퍼 - 큰 값을 반환합니다. 하지만 당신은 사용자가 같은 암호화 된 것을 입력하지 않으 "4, 2, 3을 ..." 정말 큰 숫자, 어디를 상수로 대신 일반화. 그럼 정말 당신은 지난 몇 주 항문 군다 경우, 당신이 GetInt 전화 때마다, 당신은 경우 조건을 확인되었을 것입니다. , 또는 좀 더 구체적으로 INT_MAX에 사용자 유형을 했습니까 GetInt 반환 INT_MAX에게나요? 때문에 그랬다면, 그 사실은 그들이 입력하지 않은 의미한다 뭔가가이 경우에 문제가 발생했습니다. 그래서 일반적으로 그냥 특별한 의미는 "센티넬"값로 알려진 곳입니다. 자, 이제. C 파일에 설정 보자. C 파일은 얼마 동안 어플라이언스에 존재하고 있습니다 그리고 사실 어플라이언스는 당신이 미리 컴파일 있습니다 그곳으로 우리는 "목적 코드"라는 시스템이 알고 있기 때문입니다하지만 당신에게 중요하지 않습니다, 이 경우, 거기가 어딘지 어플라이언스. 그러나가 GetInt하려면 지금 아래로 스크롤하게하고, GetInt이 모든 시간을 작업 한 방식을 볼 수 있습니다. 그래서 여기에 우리가 이전의 유사한 의견이 있습니다. 난 그냥 코드 부분에 확대하자, 그리고 우리가 GetInt에 대해이 것은 다음과 같습니다. (TRUE), 그래서 우리는 의도적으로 무한 루프를하는 동안은 아무 입력도지지 않습니다하며 정수를 반환 그러나, 아마, 우리는 어떻게 든이 탈옥, 또는 내에서 반환합니다. 그럼 어떻게이 작품을 보자. 음, 우리는 GetString을 사용하는 것 같습니다 루프, 166 내부의 첫 줄 인치 이 지금은 좋은 연습 때문 어떤 상황에서 GetString는이 특별한 키워드 NULL을 반환 할 수? 뭔가 잘못되면. 당신은 GetString 같은 것을 호출 할 때 잘못이 있겠 어? 응? [학생 답 이해할 수없는] >> 그래. 그래서 아마 malloc이 실패합니다. 어딘가에 후드 GetString 아래에, malloc를 호출합니다 이는 컴퓨터 가게 할 수 있습니다하는 메모리를 할당 문자 모두 키보드로 사용자 유형입니다. 그리고 사용자가 무료로 많은 시간을 가지고 가정 그리고 2,000,000,000 문자보다 예를 들어, 더 많은 입력. 컴퓨터보다 더 많은 문자는 RAM이 있습니다. 음, GetString, 당신에게 그걸 의미 할 수있다 이 슈퍼, 슈퍼 드문 코너 케이스 인 경우에도 마찬가지입니다. 그것은 어떻게 든이 문제를 해결할 수 있어야한다, 그래서 GetString 우리가 돌​​아 가서 그 문서를 읽을 경우, 실제로 NULL을 반환 않습니다. GetString는 NULL을 반환하여 실패 지금 경우, GetInt는 실패 할 것이다 단지 파수꾼으로 INT_MAX을 반환하여. 이것들은 인간의 관례입니다. 이를 알고있는 유일한 방법은 경우가 있습니다 문서를 읽는 것입니다. 그러니 INT 실제로 GotInt있는 곳까지 아래로 스크롤 보자. 내가 좀 더 아래로 스크롤다면, 라인 170에서 우리는이 라인 위에 의견이 있습니다. 그래서 우리는, 172에서 정수 N과 숯불 C, 다음이 새로운 기능을 선언 둘 중에 일부는 이전에 발견 했소하지만, sscanf 있습니다. 이 문자열 스캔 F을 의미합니다. 즉, 나에게 문자열을 제공하고 관심 정보의 조각을 위해 스캔합니다. 그러니까 무슨 뜻 이죠? 글쎄, 나는 키보드 1 2 3 그대로 입력했다고 가정 를 입력 한 다음 Enter를 누르십시오. GetString에 의해 반환 1 2 3의 데이터 유형은 무엇입니까? 그것은 바로, 분명히 문자열거야? 나는 문자열을 가지고 있으므로 1 2 3는 "1 2 3"입니다 그것의 끝에 \ 0. 그 정수가 아닙니다. 그은 (는) 숫자가 아닙니다입니다. 이 숫자처럼 보이지만 사실은 없습니다. 그래서 GetInt이 짓을 했을까? 그것은 왼쪽에서 오른쪽으로 해당 문자열을 스캔하는 1 2 3 \ 0 든은 실제 정수로 변환합니다. 지금, 당신은이 작업을 수행하는 방법을 알아 내기 수 있습니다. 당신이 pset 2 다시 생각한다면, 당신은 아마 약간 편한 옷으로 갈아 입고 시저 또는 vigenere에 따라서는 문자열을 통해 반복 할 수 있습니다 당신은 픽업과 ints로 문자를 변환 할 수 있습니다. 일이 많이 기록이다. 왜 당신을 위해 그렇게하지 ​​sscanf와 같은 함수를 호출하지? 따라서 sscanf는 문자열 라인이라는이 경우에 인수가 필요합니다. 그런 다음, 따옴표, printf와 매우 유사 지정 이 문자열에 표시 뭘 기대합니까? 내가 여기서 말은, 이제 10 진수와 어쩌면 문자를 볼 것으로 기대합니다. 이 단지 한 순간의 경우 이유를 우리는 볼 수 있습니다. 그것은이 표기법 지금 물건을 연상 것이 밝혀 우리는 일주 전 얘기를 시작했다. 무엇입니까 & N과 & C 우리를 여기서 뭐하는거야? [학생 답변, 이해할 수없는] >> 그래. 그것은 나에게 C의 N과 주소의 주소를주고 있어요. 지금, 왜 중요 하냐고? 글쎄, 당신은 알 C의 기능을 가진 당신은 항상 모든에서 값 또는 값 없음을 반환 할 수 있습니다. 당신은 정수, 문자열, 부동, 숯불, 뭐든지을 반환 할 수 있습니다. 또는 무효를 반환 할 수 있지만, 만 maximally 한 일을 반환 할 수 있습니다. 하지만 여기 우리는 sscanf는 어쩌면 정수, 10 진수를, 저를 반환 할 또한 숯, 나는 순간에 왜 숯불을 설명 할 것이다. 그럼 당신은 효과적으로 F 2 일을 반환 할, 그 C.에 단지 수 없습니다 그래서 2 주소에 전달하여 해당 문제를 해결할 수 당신이 함수에게이 주소를 건네 자마자, 그 기능은 그들과 함께 무엇을 할 수 있기 때문에? 이 해당 주소로 쓸 수 있습니다. 당신은 * 작업을 사용하여 해당 주소의 각 "이 이동 '할 수 있습니다. 그것은이 백도어 메커니즘의 일종이지만, 변수의 값을 변경하기위한 매우 일반적인 이 경우 2 단 1 곳 이상 인치 자, 내가 == to1을 확인하고 그 사실을 true로 평가 않는 경우 n을 돌아가는거야 확인합니다. 그래서 무슨 일이에요? 음, 엄밀히 말하면, 우리가 GetInt으로 발생하려는 모든이 있습니다. 우리는 말하자면, 구문 분석 할, 우리는 문자열을 읽을 수 있습니다 "1 2 3"과 거기에 숫자가 같은데하면, 우리가해야 할 sscanf에 알리는 것은 나를 위해이 변수 N에서 해당 번호 1 2 3을 넣어 것입니다. 왜 다음, 나는뿐만 아니라이 있었나요? 또한, sscanf, 여러분은 또한 여기에 문자를 수도라고의 역할은 무엇입니까. [학생 연설, 이해할 수없는] >>되지 않음 - 소수점 일 수 있습니다. 잠시 생각하는가 개최 보자. 또 뭐가 있지? [학생이 이해할 수없는] >> 그럼, 좋은 생각, 그것은 NULL 문자가 될 수 있습니다. 그것은이 경우, 실제로 없습니다. 응? [학생, 이해할 수없는] >> ASCII. 아니면, 제가 더욱 일반화 보자. 이 %의 C는 오류 검사를위한 것입니다. 우리는 숫자 뒤에 문자가있을하지 않으 하지만이 내가 어떻게 할 수는 다음과 같습니다 그렇게 sscanf 여기이 예제에서, N과 C의 값을 저장 게다가, 밝혀 이 또한 변수의 수를 반환합니다 않습니다 어떻게하면 인치 값을 입력 만 다음 1 2 3 입력다면 만 % d는 일치하는 것이다 만 N은 1 2 3 같은 값으로 저장됩니다 아무것도는 C에 넣어없는거야; C는 말하자면, 쓰레기 값이 남아 있습니다. 그 어떤 값으로 초기화 된 적이 없습니다 쓰레기 때문입니다. 내가 그 포인터 중 하나를 입력하기 때문에, 그렇다면, sscanf는 1을 반환 이 경우에, 좋아. 나는 정수를 가지고 그래서 메모리를 확보하기 위해 줄을 해방 그 GetString는 실제로 할당, 그럼 내가 n을 반환합니다. 그 시도 위치를 궁금해 본 적 있다면 다른, 진술의 출처, 여기에서 비롯됩니다. 경우, 대조적으로, 전 1 2 3 foo는 입력 텍스트 그냥 무작위 순서, sscanf는 볼 것입니다 f를 - 우, 우,, 번호를 번호를 우, 번호를 우. 그리고 N에 1 2 3 줄거야. 그것은 C에서 F를 넣은 다음 2 반환하는거야. 그래서 우리는 단지 scanf의 행동의 기본 정의를 사용하여이 매우 간단한 방법 - 아, 처음 보면 복잡하지만, 하루의 끝에서, 의 뜻을 간단 메카니즘은이 정수이며,이 경우입니다 제가 찾은 유일한? 여기 흰 공간은 의도적 인 것입니다. 당신은 sscanf에 대한 문서를 읽는다면 그것은 당신이 시작 또는 끝 부분에 공백의 일부를 포함하는 경우를 알려줍니다 sscanf도 스페이스 바를 1 2 3 치, 무슨 이유에 대해 사용자를 허용하며, 그 합법적 인 것입니다. 가 시작이나 끝 부분에 스페이스 바를 누르 단지 때문에, 사용자 소리 치지 않습니다 이는 사용자 친화적 단지 조금 더 있습니다. 질문, 다음, GetInts에? 응? [학생 질문 이해할 수없는] >> 좋은 질문입니다. 당신이 방금 문자를 입력하는 경우, F, 및 인기처럼 입력 한 내용 어느 1 2 3을 입력하지 않고, 당신은이 코드 라인의 동작이 다음 것 어떻게 생각하세요? 따라서 sscanf가 너무 그를 커버 할 수있는 경우에 속하기 때문이다 이 n 또는 C를 작성하지 않을거야, 그 대신 0을 반환하는거야. 내가 원하는 건 예상 값이 1이기 때문에이 경우, 나는 또한 그 시나리오를 타야 해요. 난 겨우 12를 원한다, 그리고 단 1 건을 기입 할 수 있습니다. 좋은 질문입니다. 기타? 좋아요, 그럼 여기에 모든 기능을 통과하지 말자, 하지만 남은 관심, 아마도이 될 것 같습니다 한 가 판명 때문에 GetString되는 GetFloat, GetInt, 모든 펀트에게 GetString에 대한 그들의 기능을 많이 GetLongLong, GetDouble. 그럼 그가 여기 구현하는 방법을 살펴 보자. 이 녀석은 좀 복잡한 보여도 같은 기본을 사용합니다 우리가 지난 주에 대해 얘기하기 시작하는. 따라서 GetString에 그 때문에 여기까지 무효에 따라 더 주장을지지 않습니다 그리고 문자열을 반환합니다, 그래서 버퍼라는 문자열을 선언하고 있습니다. 정말 그 아직 사용 할 무슨 모르지만, 우리는 볼 수 있습니다. 용량 같은 외모는 기본, 0으로이다;이가는 곳 확실치 않습니다. Not n은 아직 사용 할 무슨 일이 있는지 확인하십시오. 그러나 지금은, 그래서 라인 243에 조금 더 흥미로운지고 있어요 우리는 정수 C,이 바보 같은 세부의 일종입니다 선언합니다. 문자는 8 비트이며, 8 비트 얼마나 많은 다른 값을 저장할 수 있습니까? 256. 당신은 서로 다른 256 개의 ASCII 문자를하려는 경우 문제는, 어떤이 다시 생각하면 있으며,이 암기 할 일이 아닙니다. 당신이 큰 ASCII 차트로 생각한다면 우리는 주 전에 있었는데 이 경우, 128 또는 256 ASCII 문자에있었습니다. 우리 모두 0의의 패턴과 1 일이에요를 사용했습니다. 오류가 감지 할 수 있도록하려는 경우 그 문제가 있습니다. 이미 문자 256 값을 사용하는 경우 때문에, 지금 당신은 말하는 방법이 없기 때문에 당신은 정말로, 미리 계획하지 않은 "이 합법적 문자입니다,이 몇 가지 잘못된 메시지입니다." 그래서이 세상이 수행 것은, 그들이 다음 큰 값을 사용, 정수와 같은 당신은 비트 미친 번호가 있도록, 4000000000 가능한 값 32이 있도록 간단하게 사용하여 끝낼 수 있습니다 본질적으로, 그 중 257은, 1 중 오류 같은 일부 특별한 의미가 있습니다. 그럼 어떻게이 작품을 보자. 라인 246에,이 큰 동안 루프를 가지고 그 fgetc를 호출되며 다음에 f 의미 파일, getc, 그리고 표준 입력. 이 말은의 더 정확한 방법입니다 알고 보니 '키보드로부터의 입력을 읽어보십시오. " 표준 입력 수단 키보드, 표준 출력, 화면을 의미합니다 그리고 우리가 pset 4 볼 표준 오류가,,, 화면을 의미합니다 그러나 그 화면의 특별한 부분을 conflated 않아 있도록 인쇄 할 의도 한 실제 출력,하지만 미래에 그에 대한 자세한. 그럼 fgetc는 키보드에서 한 문자를 읽어, 그리고 어디에를 저장할 의미? C에 저장 한 다음 확인, 그래서 제가 여기 몇 가지 논리 접속사를 사용, 이 N 있으므로, 사용자가 입력에 충돌했다고 \ 평등하지 않는 확인하십시오. 우리는 그 시점, 루프의 끝에서 중지하려면, 우리는 또한 확인하시기 바랍니다 여러분이 알거나 추측 경우 특별한 상수, EOF, - 뭘 무엇을 의미합니까? 파일의 끝입니다. 나는 키보드에 입력하는 경우 때문에 그래서이는 무의미한 거라고 이 일에 끼어은 파일, 정말 없습니다 그러나 이것은 단지 의미하는 데 사용되는 일반적인 용어 죠 다른 그 어떤 것도 인간의 손가락에서 오는되지 않습니다. EOF. 파일의 끝입니다. 옆으로, 당신은 키보드에서 컨트롤 D를 누르 한 경우, 당신은 아직 없을 거라는, 당신은 컨트롤 C를 부딪 혔어요. 그러나 제어 d는이 특별한 상수라는 EOF를 보냅니다. 이제 우리는 좀 동적 메모리 할당을 갖추고 있습니다. n은 + 1> 용량, 지금은 n을 설명합니다면. N은 얼마나 많은 바이트는, 버퍼에 현재있다 현재 사용자의 구축하고있는 문자열입니다. 당신이 버퍼 용량을 가지고보다 버퍼에 더 많은 문자가있는 경우는, 직관적으로, 우리가 다음 할 일은 더 많은 용량을 할당 할 수 있습니다. 여기 산술의 일부를 통해 탈지거야 여기에만이 기능에 중점을두고 있습니다. 당신은 malloc이 무엇인지, 또는 적어도 일반적으로 알고. realloc은 무엇을 맞춰보세요. [학생 답 이해할 수없는] >> 그래. 그리고 꽤 메모리를 추가하지 말고 다음과 같이 메모리를 reallocates : 당신에게 기억을 더 많이 제공 할 수있는 문자열의 끝에서 객실 아직 거기 있다면 그것은 원래를 제공하는 대신 다음은 추가 메모리를드립니다. 그래서 그냥 백업 백업 백업 다시 문자열 문자를 넣어 수 있습니다. 그런 경우가 아니라면 그러나, 때문에 너무 오래 시간을 끌었 그리고 무작위로 뭔가가 메모리에 plopped 기는했지만, 그러나 추가이있어 여기에 메모리, 괜찮아요. Realloc, 당신에 대한 모든 무거운 리프팅을 할거야 당신이 지금까지 여기에서 읽은 문자열을 이동 거기에 내려 놓고 한 다음 그 시점에서 좀 더 활주로를 제공합니다. 그래서 손의 물결과 함께, 제가 어떤 GetString이하는 말하자 그것은 작은 버퍼, 어쩌면 한 단일 문자로 시작해야 해 2 문자 사용자가 유형의 경우 GetString가 종료 realloc를 호출하고 우 '라고, 1 문자는 충분하지했다. 저에게이 문자를주세요. ' 당신은 루프의 논리 읽어 그런 경우 그것은 우 ', 3 문자로 입력 한 사용자를 말할거야. 지금은 2 위이지만 4 자 이리 줘, 그럼 16 및 32을 제공 한 후, 내게 팔을 제공합니다. ' 나는 용량 할 때마다 두 배로 증가한다는 사실 버퍼가 천천히 성장하지 않을 것을 의미합니다. 그것은 매우 빨리 성장거야, 그의 장점이 될 일? 왜 사용자도 불구하고, 버퍼의 크기를 두 배로 무엇입니까 단지는 키보드에서 1 추가 문자를해야 할 수도 있습니다? [학생 답 이해할 수없는]. >> 무슨 뜻이지? 그렇지. 당신은 자주 성장을 할 필요가 없습니다. 그리고이 중 어떤 야 - 넌 여기에서 돈을 hedging. 아이디어는 속도가 느린 경향이 있기 때문에, realloc 많은 전화를하지 않으려는 것. 당신이 곧 볼 수 있으므로, 메모리 운영 체제에게 모든 시간을 미래 문제 세트에, 그것은 시간이 좀 걸릴 경향이있다. 당신이 공간을 낭비하는 경우에도, 시간의 양을 최소화 그래서, 좋은 일이 될 경향이있다. 그러나 우리는 여기 GetString의 마지막 부분을 읽어 경우, 다시 여기 모든 한 줄을 이해하는 것은 오늘날 매우 중요하지 않습니다. 그러나 결국 다시 malloc 호출하는 것을, 그리고 할당 이 문자열을 여러 바이트를 필요로 그대로 다음 과도하게 큰 버퍼, 무료 전화하여 버리 겠어요 그것은 실제로 너무 많이 두 배로라도한다면. 즉, 그 GetString이 모든 시간을 작업 한 방법입니다. 그것을 행하는 모든 또 한번, 또 한번 다시 한 번에 한 문자를 읽어 하고 몇 가지 추가 메모리를 필요로 할 때마다, 그것은 realloc를 호출하여 그것을 운영 체제를 묻습니다. 질문? 괜찮아요. 공격. 우리가 포인터를 이해 이젠, 또는 이상 , 포인터와 함께 점점 더 잘 알고 있습니다 온 세상이 파괴되기 시작하는 방법의이 생각해 보자 당신은 매우 적대 사용자에 대해 변호하지 않는 경우, 시스템을 해킹하는 사람들. 일부 등록 코드를 우회하여 소프트웨어를 훔치려 사람들 그들은 다른 인치를 입력해야 할 수도 그냥 C 코드, 여기에이 예를 살펴 그 아래에있는 주요 기능을 가지고 즉, 함수를 호출 foo는 과는 foo는에 전달됩니까? [학생] 하나의 인수입니다. >> 단일 인수입니다. 따라서 변수는 argv [1], 즉 사용자가 입력 한 첫 번째 단어를 의미 a.out 뭐든간에 한 후 명령 줄에서 프로그램이 호출됩니다. foo는 그래서 상단에, 숯불 *에 걸리지 만, 숯불 *은 무엇인가? 문자열입니다. 이 새로운 아무것도없고, 그 문자열은 임의로 바 호출되고 있습니다. 여기에서이 행에서 문자는 C [12], 반 기술 영어의 종류,이 라인은 뭐하는 거지? 의 배열입니다 - 문자. 나에게 12 자의 배열을 제공합니다. 그래서 우리는이 버퍼 전화 할 수 있습니다. 그것은 기술적으로 C라고하지만, 프로그래밍의 버퍼의 당신이 좀 가져 인치를 넣을 수있는 공간의 무리를 의미 그런 다음 마지막으로, memcpy, 우리는 이전에 사용하지했습니다. 그러나 당신은 아마 그것이 무엇 추측 할 수 있습니다. 이 메모리를 복사합니다. 는 무엇입니까? 음, 분명히, C로, 그 입력, 바 복사 만까지 줄의 길이 있습니다. 그러나 여기에 버그가 있습니다. 좋아, 기술적으로 우리는 정말 (바) 올바른의 X sizeof (숯불)를 나 strlen을해야합니다. 하지만, 여기에 최악의 경우에, 씨가 도대체​​가 가정을 해 - 그래, 알았어. 그런 다음이 버그가 있습니다. 그래서 sizeof (자), 좋아,이 조금 넓은 만들어 보자. 이제 무슨 버그가 아직 거기 있어요? [학생 답 이해할 수없는] 일에 대해 >> 확인? 좋아, 그럼 우리는 확인해야 NULL에 대한 귀하의 포인터가 NULL 일 때 나쁜 일이 생겼 때문에, 거기 살게 될 수도 그리고 당신은 NULL에 보내지 말아야하기 때문에 * 연산자로 dereferencing하여. 그래서 이렇게 잘, 우리는 다른 뭐하는거야? 논리적 결함도 여기에있다. [학생 답 이해할 수없는] >> 그래서, 만약 argc는 ≥ 2 확인? 자,이 프로그램에서 3 버그는 여기에 혼자 야. 사용자가 실제로 변수는 argv [1], 좋은에 아무것도 입력하면 우리는 확인하지. 따라서 세 번째 버그가 뭐죠? 응? 좋은 [학생 답 이해할 수없는] >>. 하나가 시나리오를 확인 했어요. 우리는 절대적으로 더 많은 메모리를 복사하지 않습니다 확인 줄의 길이를 초과보다. 그래서 문자열 경우에 입력 한 사용자는 10 자이며, 이 '만 10 자 복사합니다.'라고합니다 그건 괜찮아,하지만 만약 프롬프트에 단어를 입력 한 사용자 20 문자 단어처럼,이 무엇에 바에서 사본 20자를 말하는 것입니다? 그렇지 않으면 우리의 버퍼로 알려진 C는, 어느 방금 데이터를 쓴 의미 자신이 소유하지 않은 것을 8 바이트 위치에, 당신은 당신이 그들을 할당 없다는 점에서 소유하고 있지 않습니다. 그래서이 일반적으로 버퍼 오버 플로우 공격으로 알려진 곳입니다 감각 또는 버퍼 오버런 공격하고, 공격이 경우 사용자가 또는 함수를 호출있어 프로그램은 악의적으로 이런 짓을하는 거지 어떻게 실제로 옆에 매우 나쁜 될 수 발생합니다. 의 여기이 그림을 살펴 보자. 이 그림은 메모리의 스택을 나타냅니다. 그리고 때마다 당신은 함수를 호출하는 기억 당신은 스택이 작은 프레임을 한 다음 다른 한 다음 다른 한 다음 다른. 그리고 지금까지 우리가이긴했던 것은 사각형 이러한을 멀리 추상적 인 이 보드 나 여기 화면 중. 하지만 우리가 그 사각형 중 하나를 확대하면, 당신은 함수 foo는를 호출 할 때, 그것은 더 스택에있을거야 밝혀 그 프레임과 그 사각형의 내부 보다 우리가 스왑에 대해 얘기했던 것처럼 x와 y와 a와 b. 그것은 일부 낮은 수준의 세부 사항이 있다는 것을 밝혀 그 중에서도 주소를 반환합니다. 메인은 ​​foo는 호출 할 때이 밝혀 주는 푸 알려있다 컴퓨터의 메모리에 어떤 메인의 주소입니다. 달리하기 때문에, 가능한 한 빨리 foo는 등, 여기이 경우에서와 같이 실행 완료 일단, foo는의 끝에이 가까운 둥근 중괄호에 도달 프로그램의 컨트롤이 가야되는 방법을 대체 foo는 알 수 있습니까? 그것은 그 질문에 대한 답이 여기에 빨간색 사각형에있는 것을 밝혀졌다. 이 포인터를 나타냅니다, 그것은 일시적으로 저장하기 위해 컴퓨터에 일이에요 소위 스택에 해당하므로 가능한 한 빨리 푸 등 주요의 주소가 실행되면, 컴퓨터는 어디으로 돌아가려면 메인에 어떤 줄 알고 있습니다. 저장된 프레임 포인터는 비슷하게 관련이 있습니다. 여기에 숯불에 * 표시 줄이 무엇을 제시 하는가? 자, 이제이 파란색 세그먼트는 여기에 foo는의 프레임이, 바는 무엇인가? 좋아, 바 foo는 기능에 그냥 인수입니다. 그래서 지금 우리는 익숙한 그림 돌아 간다. 화면에 더 많은 것들을 더 산만이 하지만 하늘색 세그먼트 우리는 스왑과 같은 무언가에 대한 칠판에 그리기 된 한 내용입니다. 즉, 막대입니다 지금 foo에 대한 프레임과 거기에 유일한 것입니다 어떤이 매개 변수입니다. 하지만 다른 무슨 일이이 코드에 따라 스택에해야하나요? 숯불 C [12]. 그래서 우리는 또한 메모리의 12 제곱이 표시됩니다 C라는 변수에 할당. 그리고 실제로 우리는 화면에 해당있어. 맨 위에가 C [0]이 다이어그램의 다음, 저자 사각형의 그리기 귀찮게하지만, 12 실제로 있습니다 않았어 너 때문에 오른쪽 하단에 보면, C [11] 당신이 0에서 계산하면, 12 등 바이트입니다. 그러나 여기 문제입니다 어느 방향에서 C는 성장? 아래로 위로의 정렬, 그렇죠? 가 상단에있는 시작하고 아래로 성장하는 경우는, 우리 모두가 이곳 우리에게 많은 활주로를 떠난 같이하지 않습니다. 우리는 가지, 구석에 자신을 색칠 한 그 C [11] 스택 프레임 포인터에 대한 지금하고있는 바, 대한 권리까지이며, 이는 반환 주소에 대한 바로이며 더 이상 공간이 있어요. 당신이 실수다면 함축 된 의미는, 다음이야 당신은 12 바이트 버퍼에 20 바이트를 읽어보세요? 어디 그 여덟 추가 바이트가는거야? 다른 모든 내부, 그 중 일부는 중요한 슈퍼입니다. 그리고 가장 중요한 것은, 잠재적으로, 거기에 반환 주소 빨간 상자입니다. 당신도 실수 나 adversarially 것을 가정하기 때문에 그 4 바이트, 그 포인터 주소를 덮어 단지 쓰레기로하지만, 메모리에 실제 주소를 나타 내기 위해 어떻게 번호를? 논리적으로 implicaiton는 무엇입니까? [학생 답변, 이해할 수없는] >> 맞아. foo는 반환 할 때 와 조회수 곱슬 괄호 즉, 프로그램은 주로 돌아하지 계속 것입니다 그렇게 빨간 상자에있는 모든 주소로 돌아거야. 이제 우회 소프트웨어 등록의 경우, 기능에 반환되고있어 주소 무엇일까요 일반적으로 당신은 소프트웨어에 대해 지불 한 후 전화 등록 코드를 입력 된 당할지? 당신은 여기 안에 트릭 컴퓨터의 정렬, 대신, 여기에 갈 수 있습니다. 당신이 정말로 똑똑한 있다면, 상대는 실제로는 키보드에서 입력 할 수 있습니다 예를 들어,하지 실제 단어가 아닌 20 자,하지만 가정 그 또는 그녀 코드를 나타냅니다 일부 문자의 종류? 그리고 C 코드 될거 아니야, 이건 문자 될거야 그 바이너리 기계 코드, 0의 1의를 나타냅니다. 그러나 어떻게 든 GetString 프롬프트에 붙여, 그런 짓을 할만큼 똑똑 겠지 본질적으로 코드를 컴파일 것을, 그리고 마지막 4 바이트는 return address를 덮어, 그 입력은 주소가 뭔지하나요? 그것은이 빨간색 사각형 버퍼의 첫번째 바이트의 주소를 저장합니다. 그럼 당신은 정말 똑똑한해야하고,이 시행 착오가 상당히 많은데 나쁜있는 사람들 만이 버퍼가 얼마나 큰 알아낼 수 있다면위한 이 프로그램에 입력의 마지막 몇 바이트 제공하는 등 귀하의 버퍼의 시작의 주소에 상응하는 것으로 발생, 이 작업을 수행 할 수 있습니다. 우리가 말을하면, 정상적으로, 안녕, 그리고 \ 0, 그 버퍼에 봤 구요. 그러나 우리는 더 똑똑 하구나, 우리는 우리가 총칭 공격 코드를 뭐라고 부를와 그 버퍼를 작성하는 경우, A, A, A, A : 공격, 공격, 공격, 공격이 그냥 나쁜 일을 수행 무언가이다. 음, 당신이 정말로 똑똑한 경우이 작업을 수행 할 수 발생 : 80, CO, 35, 08 : 여기에서 빨간색 상자에서 숫자의 순서입니다. 그 여기 있어요 수를 일치하는지 확인합니다. 이 반대 순서로하지만 그 어떤 다른 시간에 더. 이 반환 주소가 의도적으로 변경되었는지 확인합니다 여기에 주소를 동일하기 위해, 메인의가 아닌 주소를 입력합니다. 나쁜 남자가 슈퍼 똑똑하면, 그 또는 그녀는 공격 코드에 포함 것입니다 뭔가처럼 '사용자의 모든 파일을 삭제합니다.' 또는 '나는에 로그인 할 수있는 사용자 계정을 만듭니다.' '은 암호를 복사'또는 뭐든지, 그리고이 위험과 C.의 힘이기도하다 당신은 포인터를 통해 메모리에 액세스 할 수 있습니다 때문에 그리고 따라서는 컴퓨터의 메모리에 원하는 모든 것을 쓸 수 있습니다. 당신은 컴퓨터가 단순히 원하는 건 뭐든지으로 작업을 수행 할 수 있습니다 이 자체 메모리 공간 내 주위에 뛰어든지. 그리고이 일에, 많은 프로그램과 손상되도록 많은 웹 사이트 이 활용 사람들에게 졸이다. 그런데, 초 정교한 공격처럼 보인다 수 있습니다 하지만 늘 그런 식으로 시작되지 않습니다. 현실은, 어떤 나쁜 사람들이 일반적으로 할 것 것이 때문입니다 이 명령 줄에서 프로그램이나 GUI 프로그램이나 웹 사이트, 고갈 된 것인지 당신은 헛소리를 제공 할 수 있습니다. 당신은 검색 필드를 누르 입력에 아주 큰 단어를 입력 그리고 당신은 웹 사이트 충돌 지켜보기로 하죠. 또는 프로그램이 몇 가지 오류 메시지가 명부 지켜보기로 하죠. 당신이 운이있는 경우 등으로 인해 나쁜 놈, 그리고 당신은 프로그램을 충돌 이상한 입력을 제공합니다 그건 프로그래머가 나쁜 행동을 기대하지 않았다는 뜻 이는 충분히 노력을, 당신은 아마도 수 의미 충분한 시행 착오는 더 정확한 공격을 임금하는 방법을 알아 봅시다. 보안이 너무 많은 부분은 모두 이러한 공격을 피할 수 있지만,이를 감지하지 않습니다 실제로 로그를보고 미친 입력 귀하의 웹 사이트에 입력 사람들이 어떤 그림을 그릴 지. 어떤 검색어를 몇 가지 버퍼를 넘쳐의 희망에 웹 사이트에 사람들을 썼지? 그리고 배열인지의 간단한 기본이 모든 종기 아래, 과가 메모리를 할당하고 사용한다는 것은 무슨 뜻입니까? 그리고 그와 관련된도,이 있습니다. 따라서 아직 다시 하드 드라이브의 내부 훑어 까. 그럼 당신은 기억 한 두 주 전에에서 당신은 파일을 드래그 할 때 에 휴지통 또는 휴지통 할 수있는 어떤 일이 벌어 질까요? [학생]는 전혀 없습니다. >> 네, 절대적으로 아무것도. 당신은 부족 결국 경우 디스크 공간에 Windows 또는 Mac OS 당신을 위해 파일을 삭제하기 시작합니다. 당신이 거기에 뭔가를 드래그이라면, 그 모든 게 안전하지 않을거야. 모든 roomate, 친구 나 가족이해야 할 일이 두 번 클릭하고 짜잔하고 있습니다. 삭제할하려고하는 모든 스케치 파일이 있어요. 우리 대부분 그래서 적어도 당신은 마우스 오른쪽 버튼을 클릭하거나 클릭을 제어 있다는 걸 알고 그리고 비어있는 휴지통, 또는 그 비슷한. 하지만 그렇다하더라도, 그 꽤 트릭을하지 않습니다. 귀하의 하드 드라이브에 파일이있을 때 어떤 현상이 발생하기 때문에 그 몇 가지 Word 문서 또는 일부 JPEG를 나타냅니다? 그리고이 하드 드라이브를 나타내고, 우선은 여기에 조각이 파일을 나타냅니다 말 과 0의 1의의를 왕창 구성있어. 만 휴지통 또는 휴지통으로 해당 파일을 드래그하면 어떻게, 어떻게 뿐만 아니라 그것을 비우? 아무것도의 정렬. 지금은 아무것도 아니예요. 작은 일이이 테이블의 형태로 발생하기 때문에 지금, 그냥 아무것도 없습니다. 따라서 컴퓨터의 메모리 내부 데이터베이스 또는 테이블의 어떤 종류가 있어요 이는 본질적으로, 파일 이름 1 열이 그리고이 위치를 123 만 임의의 숫자 일 수도 파일의 위치, 1 열. 그래서 우리는 x.jpg 같은, 위치 123이있을 수 있습니다. 당신이 휴지통을 비울 때 어떻게, 그럼 어떻게 될까요? 멀리해라. 그런데 멀리하지 않는 것은 0 년대와 1의 것입니다. 그래서, 다음, 연결 4 pset하는거야? 음, pset 4, 우연히 삭제 한해서 사진을 모두 가지고 컴팩트 플래시 카드, 또는 운에 의해 그가 손상되었고, 때문에 0의 1이 아직 존재하지 않는 것을 의미하는 것은 아닙니다. 무언가가 손상 죽었 기 때문에 아마 그 중 몇은 손실됩니다 일부 공의는 1의, 1의 된 것은 의미에 0가되었습니다. 버그가 소프트웨어 또는 하드웨어 결함 때문에 나쁜 일이 발생할 수 있습니다. 그러나 그 비트의 대부분은, 아마도 그들도 100 %, 아직 거기 그것은 JPEG 1 시작 위치를 컴퓨터 나 카메라가 모르는 단지 와 JPEG 2 시작 위치,하지만 만일에, 프로그래머, 이러한 JPEG 파일이 또는 어떻게 생겼는지 이해가 약간의와 함께 알아, 당신은 0의 1의를 분석하고 아 '라고 할 수 있습니다. JPEG. , JPEG 우. ' 당신은 본질적으로 단지에있는 프로그램을 작성하거나 할 수 있지만 루프 그게 그 파일의 각각의 하나를 복구합니다. 수업는 "안전하게"파일을 지우고 시작하는 것입니다 당신은 모두 이러한 일을 방지하려면. 그래? [학생 질문 이해할 수없는] >> 당신은 전에했던 것보다 더 많은 메모리를 살아요 - 오! 좋은 질문입니다. 왜, 다음 휴지통을 비우는 후, 컴퓨터가 당신이 전에보다 더 많은 여유 공간이 있다고 말해 무엇입니까? 간단히 말해서, 그건 거짓말이 없기 때문입니다. 더 기술적으로, 당신은 더 많은 공간을 가지고 있습니다. 지금 당신이 한 말 때문에 그 파일이 있었던 곳, 다른 물건을 넣을 수 있습니다, 하지만이 비트가 멀리가는 것은 아닙니다 그리고 그 비트가 보호를 위해, 예를 들어, 모든 공의를 변경하고 있습니다 의미하지는 않습니다. 반대로, 당신의 "안전하게"지우기 파일 또는 물리적으로는 장치를 파괴 할 수 있다면 그건 정말 그 주변, 때로는 유일한 방법입니다. 그럼 왜 우리는 그 반 무서운 쪽지를 떠나지 말아요, 우리는 월요일에 표시됩니다. CS50.TV