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