[Powered by Google Translate] [الأسبوع 5]
[ديفيد J. مالان - جامعة هارفارد]
[هذا CS50. - CS50.TV]
>> هذا هو CS50، الأسبوع 5.
اليوم وهذا الأسبوع، ونحن نقدم قليلا من عالم الطب الشرعي
في سياق مشكلة تعيين 4.
سوف يكون اليوم محاضرة مختصرة لأنه لا يوجد حدث خاص هنا بعد ذلك.
ولذا فإننا سوف نلقي نظرة خاطفة وندف كل من الطلاب وأولياء الأمور على حد سواء اليوم
مع بعض من الأشياء التي هي في الأفق.
>> من بينها، وذلك اعتبارا من يوم الاثنين، سيكون لديك المزيد من زملاء الدراسة قليلة.
EDX، هارفارد ومعهد ماساتشوستس للتكنولوجيا المبادرة الجديد على الإنترنت لكورس وير و أكثر من ذلك،
وتطلق في الحرم الجامعي في جامعة هارفارد يوم الاثنين، وهو ما يعني تأتي الاثنين
سيكون لديك، وذلك اعتبارا من آخر إحصاء، 86000 زملاء إضافية
والذين سيتم بعد طول مع المحاضرات وأقسام CS50
وكثروو ومجموعات المشكلة.
وكجزء من هذا، وسوف تصبح أعضاء في الدفعة الأولى من CS50 وCS50x الآن.
وكجزء من هذا الآن، ندرك أن سيكون هناك بعض الإيجابيات أيضا.
للحصول على استعداد لهذا، لعدد هائل من الطلاب،
ويكفي ان نقول أنه على الرغم من أن لدينا 108 TFS والاكاديمية،
انها ليست تماما أفضل نسبة الطالب والمعلم وبمجرد أن تصل إلى 80000 للطلاب.
نحن لن الدرجات مشكلة الكثير من مجموعات يدويا،
وقدم لذلك هذا الاسبوع في مجموعة تكون المشكلة CS50 تحقق،
التي ستكون أداة مساعدة سطر الأوامر داخل الأجهزة
عليك أن تحصل مرة واحدة قمت بتحديث في وقت لاحق هذا الاسبوع.
عليك أن تكون قادرا على تشغيل أمر، check50، على pset الخاصة بك،
وستحصل على ردود الفعل الفورية بشأن ما إذا كان البرنامج الخاص بك هو الصحيح أو غير صحيحة
وفقا لمواصفات التصميم المختلفة التي قدمنا.
المزيد عن هذا في مشكلة مواصفات الموضوعة.
فإن زملاء CS50x تستخدم هذا أيضا.
>> تعيين المشكلة 4 هو كل شيء عن الطب الشرعي،
وكانت مستوحاة من قبل حقا هذا pset بعض الاشياء من واقع الحياة
حيث عندما كنت في كلية الدراسات العليا داخليا لفترة من الوقت
مع مكتب مقاطعة ميدلسكس النائب العام في القيام بأعمال الطب الشرعي
مع محقق الطب الشرعي من الرصاص.
ما يرقى إلى هذا، كما أعتقد أنني ذكرت في الأسابيع القليلة الماضية،
وسوف شرطة ولاية كتلة او غيرها تأتي في،
فإنها تتراجع أشياء مثل محركات الأقراص الصلبة والأقراص المدمجة والأقراص المرنة، وما شابه ذلك،
وكان في ذلك الحين هدف مكتب الطب الشرعي للتأكد من
إذا كان هناك أو لم يكن أدلة من نوع ما.
وكان هذا وحدة التحقيقات الخاصة، لذلك كان جريمة ذوي الياقات البيضاء.
كان الأكثر إثارة للقلق نوع من الجرائم، التي تنطوي على أي شيء نوعا من الوسائط الرقمية.
وتبين أن الكثير من الناس لا أن كتابة رسالة بريد إلكتروني قائلا: "أنا فعلت هذا."
لذلك في كثير من الأحيان، فإن هذه الشرعي لا البحث يحضر جميع تلك الفاكهة من ذلك بكثير،
لكن في بعض الأحيان كان الناس مثل كتابة رسائل البريد الإلكتروني.
حتى في بعض الأحيان، ومكافأة الجهود.
>> ولكن لتؤدي إلى هذه pset الطب الشرعي، سنكون في إدخال pset4 قليلا من الرسومات.
ربما كنت تأخذ هذه الأشياء أمرا مفروغا منه - صور JPEG، صور GIF، وما شابه ذلك - في هذه الأيام.
ولكن إذا كنت تعتقد حقا عن ذلك، صورة، يشبه إلى حد كبير وجه روب،
يمكن غرار كتسلسل من النقاط أو البكسل.
في حالة مواجهة روب، وهناك كل أنواع من الألوان،
وبدأنا في رؤية النقاط الفردية، والمعروف باسم بكسل،
وبمجرد أن بدأت لتكبير.
ولكن إذا كنا تبسيط العالم قليلا وأقول هنا أن هذا هو روب بالأسود والأبيض،
لتمثيل الأبيض والأسود، ويمكننا فقط استخدام ثنائي.
وإذا كنا في طريقنا للاستخدام ثنائي، 1 أو 0، يمكننا التعبير عن هذه الصورة نفسها
من وجه يبتسم مع روب لهذا النمط من البتات.
11000011 يمثل أبيض، أبيض، أسود، أسود، أسود، أسود، أبيض، أبيض.
وحتى انها ليست قفزة هائلة ثم أن نبدأ الحديث عن الصور الملونة،
الأشياء التي كنت انظر في الفيسبوك أو اتخاذ مع كاميرا رقمية.
ولكن بالتأكيد عندما يتعلق الأمر الألوان، تحتاج إلى أكثر بت.
وشائع جدا في العالم من الصور هو استخدام غير 1 بت لون،
لأن ذلك يوحي، ولكن ألوان 24 بت. حيث تحصل في الواقع الملايين من الألوان
وذلك في حالة عندما كنا أسرع في العين على روب،
هو أن أي عدد من الملايين من الاحتمالات الملونة المختلفة.
وهكذا لن نقدم هذه المجموعة في المشكلة 4 وكذلك في معاينة،
والتي ستكون اليوم فى الساعة 3:30 بدلا من 2:30 المعتاد بسبب محاضرة يوم الجمعة هنا.
ولكن سوف يكون الفيديو على الانترنت وغدا المعتادة.
>> سوف نقدم لك أيضا لتنسيق ملف آخر.
وهذا مقصود للبحث تخويف في البداية،
ولكن هذا هو فقط بعض الوثائق عن البنية C.
تبين أن مايكروسوفت ساعدت منذ سنوات تعميم هذا الشكل
دعا تنسيق ملف الصورة النقطية، BMP، وكان هذا عظمى، ملونة بسيطة تنسيق ملف رسومي
وقد استخدم ذلك لبعض الوقت، ومازال بعض الأحيان لخلفيات على سطح المكتب.
إذا كنت تعتقد مرة أخرى إلى ويندوز XP والتلال والسماء الزرقاء،
كان ذلك عادة صورة BMP أو نقطية.
الصور النقطية هي متعة بالنسبة لنا لأن لديهم تعقيد أكثر قليلا.
انها ليست بهذه البساطة هذه الشبكة و 0s 1s.
بدلا من ذلك، لديك أشياء مثل رأس في بداية ملف.
لذلك وبعبارة أخرى، من داخل ملف BMP. هو في مجمله مجموعة من 0S و1S،
ولكن هناك بعض 0S إضافية و1S في هناك.
واتضح أن ما اتخذنا من المسلمات ربما لسنوات -
تنسيقات الملفات مثل. doc أو. XLS أو MP3،. mp4، مهما كانت صيغ الملفات
أن كنت على دراية - ما الذي يعنيه حتى أن يكون تنسيق الملف،
لأنه في نهاية اليوم كل من هذه الملفات التي نستخدمها لديها 0S عادل و1S.
وربما تلك 0S و1S تمثل ABC عن طريق ASCII أو ما شابه ذلك،
ولكن في نهاية اليوم، ما زال 0S عادل و1S.
حتى البشر فقط تقرر أحيانا لابتكار شكل ملف جديد
حيث توحيد أنماط من البتات ما يعني في الواقع.
وهنا في هذه الحالة، والناس الذين تصميم تنسيق ملف الصورة النقطية
وقال أنه في البايت الأول جدا في ملف الصورة النقطية، كما تدل من 0 تعويض هناك،
هناك سيكون بعض متغير اسمه بشكل غامض يسمى bfType،
الذي يقف فقط لنوع ملف الصورة النقطية، ما هو نوع من ملف الصورة النقطية هو هذا.
يمكنك استنتاج ربما من الصف الثاني الذي يقابل 2، عدد البايت 2،
لديه نمط و 0s 1s تمثل ما؟ حجم شيء.
وغني من هناك.
حتى في تعيين مشكلة 4، وسوف يكون مشى لكم من خلال بعض من هذه الأمور.
فإننا لن ينتهي مبالين كل منهم.
ولكن لاحظت أن تبدأ في الحصول على مثيرة للاهتمام حول البايت 54: rgbtBlue، الأخضر والأحمر.
إذا كنت قد سمعت من أي وقت مضى اختصار RGB - الأحمر والأخضر والأزرق - وهذا هو إشارة إلى أن
لأنه تبين يمكنك طلاء جميع ألوان قوس قزح
مع مزيج من الأحمر والأزرق والأخضر.
في واقع الأمر، قد الآباء في غرفة نذكر بعض من أقرب العرض.
في هذه الأيام، ترى واحد فقط الضوء الساطع القادم من عدسة،
ولكن مرة أخرى في يوم كان لديك عدسة الأحمر، والأزرق عدسة، والعدسة الخضراء،
وتهدف معا في شاشة وشكلت صورة ملونة.
وكثير من الأحيان، والمدارس المتوسطة والمدارس الثانوية لديهم تلك العدسات
من أي وقت مضى حتى قليلا منحرف، لذلك كنت نوع من رؤية الصور ضعفين أو ثلاثة أضعاف.
لكن ذلك كان على هذه الفكرة. هل كان لديك الضوء الأحمر والأخضر والأزرق رسم صورة.
ويستخدم هذا المبدأ نفسه في أجهزة الكمبيوتر.
>> لذلك من بين التحديات ثم لك في مشكلة حددت 4 ستكون بعض الأشياء.
واحد هو في الواقع لتغيير حجم صورة، لتأخذ في وجود نمط من 0S و1S،
معرفة أي أجزاء من 0S و1S تمثل ما في بنية مثل هذا،
وثم معرفة كيفية تكرار بكسل - ليفربول، والبلوز، والخضر -
داخل بحيث عندما صورة يبدو مثل هذا في البداية،
قد تبدو هذه بدلا بعد ذلك.
ومن بين التحديات الأخرى أيضا سيكون التي سوف يتم تسليم لك صورة الطب الشرعي
من ملف الفعلي من كاميرا رقمية.
وعلى هذا الكاميرا، ذات مرة، كان في مجمله مجموعة من الصور.
ونحن المشكلة تمحى بطريق الخطأ أو كان صورة تلف بطريقة ما.
تحدث أمور سيئة مع الكاميرات الرقمية.
ولذا فإننا نسخ بسرعة كل من 0S و1S من أن بطاقة لك،
حفظ كل منهم في ملف واحد كبير، ومن ثم سنقوم تسليمها لك في مشكلة مجموعة 4
بحيث يمكنك كتابة برنامج C التي في لاسترداد كل هذه ملفات JPEG، من الناحية المثالية.
واتضح أن ملفات JPEG، على الرغم من انهم نوعا من تنسيق الملف معقدة -
انهم أكثر تعقيدا من هذا الوجه المبتسم هنا -
اتضح أن كل JPEG يبدأ من نفس الأنماط و 0s 1s.
وذلك باستخدام، في نهاية المطاف، في حين حلقة أو حلقة أو ما شابه ذلك ل،
يمكنك تكرار عبر 0S جميع و1S في هذه الصورة الطب الشرعي،
وفي كل مرة تشاهد نمط خاص هذا ما يعرف في مشكلة مواصفات مجموعة،
يمكنك أن تفترض هنا هو، مع احتمال كبير جدا، بداية JPEG.
وبمجرد العثور على النمط نفسه بعض عدد وحدات البايت
أو كيلو بايت أو ميغابايت في وقت لاحق، يمكنك تحمل هنا هو JPEG الثاني،
الصورة أخذت بعد أول واحد.
اسمحوا لي أن تتوقف عن قراءة هذا الملف أولا، البدء في كتابة هذا واحد جديد،
وخرج من البرنامج لpset4 ستكون ما يصل الى 50 ملفات JPEG.
واذا كان ليس 50 صور JPEG، لديك قليلا من حلقة.
إذا كان لديك عدد لا حصر له من صور JPEG، لديك حلقة لا نهائية.
بحيث سيكون جدا جدا قضية مشتركة.
بحيث ما يدور في الأفق.
>> 0 مسابقة وراء ظهورنا، وتحقيق في البريد الإلكتروني الخاص بي أن هناك دائما من الناس الذين هم على حد سواء سعيدة،
نوع من مرة 0 متعادلة، وحزين حول المسابقة.
ونرجو التواصل مع لي، رئيس TF Zamyla، TF الخاصة بك،
أو واحد من استراتيجية المساعدة القطرية أن تعرف إذا كنت ترغب في مناقشة كيف سارت الأمور.
>> ذلك لإقناع والدي هنا في الغرفة، ما هي مكتبة CS50؟
[ضحك] بعمل جيد.
ما هي مكتبة CS50؟ نعم. >> [طالب] انها مجموعة خطية مسبقة من التعليمات البرمجية (غير مسموع)
حسنا، جيد.
انها مجموعة خطية مسبقة من التعليمات البرمجية التي نحن الموظفين كتب، ونحن نقدم لك،
توفر بعض الوظائف المشتركة،
أشياء مثل الحصول على البيانات سلسلة، والحصول على كثافة العمليات لي - كل وظائف المسرودة هنا.
>> بدءا من الآن، ونحن نبدأ في اتخاذ هذه حقا قبالة عجلات التدريب.
ونحن في طريقنا للبدء في اتخاذ سلسلة بعيدا منك،
الذي كان استدعاء فقط مرادفا للنوع البيانات الفعلية؟ >> [طلاب متعددة] * شار.
تشار *. للآباء، على الأرجح هو أن [صوت الرنين يجعل]. هذا امر جيد.
* شار سوف نبدأ في رؤية على الشاشة مما يزيد من إزالة السلسلة ونحن من قاموسنا،
على الأقل عندما يتعلق الأمر في الواقع كتابة التعليمات البرمجية.
وبالمثل، فإننا سوف تتوقف عن استخدام بعض هذه الوظائف بقدر
لأن برامجنا بصدد الحصول على أكثر تعقيدا.
بدلا من مجرد كتابة البرامج التي تجلس هناك مع وامض الأوامر،
انتظار المستخدم لكتابة شيء في، وستحصل على المدخلات الخاصة بك من أي مكان آخر.
على سبيل المثال، سوف تحصل عليها من سلسلة من البتات على القرص الثابت المحلي.
ستحصل بدلا من ذلك في المستقبل من اتصال الشبكة،
بعض المواقع في مكان ما.
>> لذلك دعونا قشر طبقة هذا مرة أخرى لأول مرة وسحب ما يصل الجهاز CS50
وهذا ملف يسمى cs50.h، والتي كنت قد تم بما في ذلك # لأسابيع،
ولكن دعونا نرى ما هو في الواقع داخل هذا.
الجزء العلوي من الملف في الزرقاء هو مجرد مجمله مجموعة من التعليقات:
معلومات الضمان والترخيص.
هذا هو نوع من نموذج المشتركة في مجال البرمجيات
لأن الكثير من البرامج في هذه الأيام هو ما يسمى مفتوح المصدر،
وهو ما يعني أن شخصا ما قد كتابة التعليمات البرمجية وإتاحتها بحرية
ليس فقط لتشغيل واستخدام ولكن لقراءة الواقع وتغيير والاندماج في عملك الخاص.
وهذا ما كنت قد تم استخدام، البرمجيات مفتوحة المصدر، وإن كان ذلك في شكل صغير جدا.
إذا كنت انتقل لأسفل الماضية التعليقات، رغم ذلك، سوف نبدأ في رؤية بعض الأشياء أكثر ألفة.
إشعار في أعلى هنا أن الملف يتضمن cs50.h في مجمله مجموعة من الملفات رأس.
معظم هؤلاء، لم نر من قبل، ولكن واحدة هو مألوف.
أي من هذه شهدنا، ولو لفترة وجيزة، حتى الآن؟ >> [طالب] مكتبة قياسي.
نعم، مكتبة القياسية. stdlib.h ديه malloc.
بدأت مرة واحدة ونحن نتحدث عن تخصيص ذاكرة ديناميكية،
بدأنا ونحن سوف نعود إلى الأسبوع المقبل أيضا، بما في ذلك الملف.
تبين أن BOOL والصواب والخطأ لا وجود لها في الواقع في C في حد ذاته
إلا إذا كنت تضمين هذا الملف هنا.
لقد تم منذ اسابيع بما في ذلك stdbool.h
بحيث يمكنك استخدام فكرة. BOOL، صحيحة أو خاطئة
من دون ذلك، سيكون لديك لفرز من أنها وهمية واستخدام الباحث
وتفترض فقط تعسفا أن 0 و 1 هو زائف هو الصحيح.
إذا كان لنا أن انتقل لأسفل أخرى، هي هنا تعريفنا للسلسلة.
كما تبين، كما قلنا من قبل، أن هذا النجم هو حيث لا يهم حقا.
هل يمكن أن يكون حتى الفضاء في كل مكان.
لقد تم في هذا الفصل الدراسي الترويج لها وهذا لتوضيح
أن النجم له علاقة مع نوع،
ولكن ندرك مجرد شائعة، إن لم يكن أكثر من ذلك بقليل المشتركة،
هو وضعها هناك، ولكن وظيفيا انها نفس الشيء.
ولكن الآن إذا قرأنا إلى مزيد من الانخفاض، دعونا نلقي نظرة على GetInt
لاننا كنا نستخدم ربما أن أول قبل أي شيء آخر في هذا الفصل الدراسي.
هنا GetInt. هذا ما هو؟ >> [طالب] نموذج أولي. >> هذا مجرد نموذج أولي.
في كثير من الأحيان، وقد وضعنا نماذج على قمم لدينا. ج الملفات،
ولكن يمكنك أيضا وضع نماذج في ملفات الرأس، ملفات ساعة، وهذا مثل واحد هنا
بحيث عند كتابة بعض الوظائف التي تريد الآخرين لتكون قادرة على استخدامها،
وهذا بالضبط هو الحال مع مكتبة CS50،
لكم ليس فقط تنفيذ المهام الخاصة بك في شيء من هذا القبيل cs50.c،
كنت وضعت أيضا نماذج لا في الجزء العلوي من هذا الملف ولكن في الجزء العلوي من ملف الرأس.
ثم أن ملف الرأس هو ما تشمل الأصدقاء والزملاء
مع تضمين # في التعليمات البرمجية الخاصة بهم.
لذلك كل هذا الوقت، كنت قد تم بما في ذلك كل هذه النماذج،
فعال في الجزء العلوي من الملف الخاص بك ولكن عن طريق هذه الآلية تشمل #،
أساسا، والتي نسخ هذا الملف إلى المعاجين الخاصة بك.
وهنا بعض وثائق مفصلة إلى حد ما.
لدينا الى حد كبير أمرا مفروغا منه أن يحصل على GetInt الباحث،
ولكن تبين أن هناك بعض الحالات الزاوية.
ما إذا كان المستخدم أنواع في عدد هذا الطريق كبيرة جدا، وكوينتيليون،
أن فقط لا يمكن احتواؤه من كثافة العمليات؟ ما هو السلوك المتوقع؟
من الناحية المثالية، انها يمكن التنبؤ بها.
حتى في هذه الحالة، إذا كنت تقرأ الواقع غرامة المطبوعة،
سوف نرى في الواقع أن إذا لا يمكن قراءة الخط، وهذا INT_MAX العودة.
لقد تحدثت عن هذا أبدا، ولكن على أساس قيمتها السوقية، ما هو الأرجح؟
[طالب] ثابت. انها >> ثابت.
انها بعض مستمر خاصة أن أعلن ربما في واحدة من تلك الملفات رأس
وهذا ما يصل أعلى في الملف، وربما INT_MAX شيء من هذا القبيل تقريبا 2 مليار دولار،
ذهب الفكرة هي أن لأننا في حاجة للدلالة على نحو ما أن شيئا ما خطأ،
ونحن، نعم، لقد 4000000000 أرقام المتوفرة لدينا: على ما يصل إلى 2 مليار -2000000000، يعطي أو يأخذ.
حسنا، ما هو مشترك في مجال البرمجة هو أنت فقط سرقة واحدة من تلك الأرقام،
ربما 0، 2 مليار ربما، وربما -2000000000،
لذلك أنت تنفق واحدة من القيم الخاصة بك ممكن حتى تتمكن من الالتزام العالم
أنه إذا ما سارت الأمور بشكل خاطئ، وسأعود هذه القيمة الكبيرة فائقة.
ولكنك لا تريد أن يقوم المستخدم بكتابة شيء خفي مثل 234 ...، عدد كبير حقا.
كنت التعميم بدلا من ذلك وثابت.
ذلك حقا، إذا كنت يجري الشرج الأسابيع القليلة الماضية، في أي وقت دعاكم GetInt،
يجب أن تم التحقق مع حالة إذا فعلت نوع المستخدم في INT_MAX،
أو، على نحو أكثر تحديدا، لم GetInt INT_MAX العودة، لأنه إذا كان الأمر كذلك،
وهذا يعني في الواقع أنهم لم اكتبه. لقد حصل خطأ في هذه الحالة.
لذلك هذا هو ما يعرف عموما كقيمة الحارس، وهو ما يعني فقط خاصة.
>> دعونا الآن تتحول إلى الملف C.
وقد وجدت الملف C في الجهاز لبعض الوقت.
في واقع الأمر، والأجهزة فقد جمعت قبل لك في هذا الشيء كنا نسميها رمز الكائن،
ولكن فقط لا يهم أين لك فذلك لأن النظام يعلم
في هذه الحالة حيث هو: الجهاز.
دعونا الآن انتقل لأسفل إلى GetInt ونرى كيف GetInt تعمل كل هذا الوقت.
هنا لدينا بتصريحات مماثلة من قبل.
اسمحوا لي أن التكبير في جزء فقط قانون.
وما لدينا لGetInt هو ما يلي.
وهو لا يأخذ المدخلات.
تقوم بإرجاع عدد صحيح، في حين أن (صحيح)، لذلك لدينا حلقة المتعمد لانهائي،
لكن من المفترض سنقوم الخروج من هذا بطريقة ما أو العودة من داخل هذا.
>> دعونا نرى كيف يعمل هذا.
يبدو أننا في هذا GetString باستخدام السطر الأول داخل الحلقة، 166.
هذا هو الآن بسبب الممارسات الجيدة تحت أي ظروف يمكن العودة GetString
وNULL الكلمة خاصة؟ >> [طالب] إذا سارت الامور بشكل خاطئ.
إذا حدث خطأ ما. وما يمكن ان تذهب الخطأ عند استدعاء شيء من هذا القبيل GetString؟
نعم. >> [طالب] Malloc فشل لإعطائه رجات.
نعم. ربما malloc فشل.
في مكان ما تحت غطاء محرك السيارة، وتدعو GetString malloc، الذي يخصص الذاكرة،
الذي يتيح مخزن الكمبيوتر جميع الشخصيات
أن المستخدم في أنواع لوحة المفاتيح.
وافترض أن المستخدم لديه الكثير من وقت الفراغ وكتابة أكثر من ذلك، على سبيل المثال،
من 2 بليون حرف في أكثر من الأحرف حتى لدى الكمبيوتر ذاكرة الوصول العشوائي.
GetString يجب أن يكون قادرا على أن دلالة لك.
حتى لو كان هذا هو سوبر سوبر حالة الزاوية المألوف،
يجب أن يكون بطريقة أو بأخرى قادرة على التعامل مع هذا،
وGetString لذا، إذا عدنا وقراءة الوثائق الخاصة به، هل في الحقيقة عودة NULL.
حتى إذا فشل GetString الآن من خلال العودة NULL، GetInt سوف تفشل من خلال العودة INT_MAX
كما الحارس. هذه هي الاتفاقيات فقط الإنسان.
الطريق الوحيد الذي يمكن ان نعرف هذه هي الحالة هو من خلال قراءة الوثائق.
>> دعونا انتقل لأسفل إلى حيث حصلت فعلا الباحث.
إذا كنت انتقل لأسفل قليلا كذلك، في خط 170، لدينا تعليق فوق هذه الخطوط.
نعلن في 172 وكثافة العمليات، ن، وشار A، C، ومن ثم هذه الوظيفة الجديدة،
التي قد تعثرت عبر بعض منكم من قبل، sscanf.
هذه لتقف على scanf السلسلة.
وبعبارة أخرى، أعطني سلسلة وسوف مسحها ضوئيا عن قطعة من المعلومات التي تهم.
ماذا يعني ذلك؟
لنفترض أنني اكتب في، حرفيا، 123 في لوحة المفاتيح ثم اضغط Enter.
ما هو نوع البيانات من 123 عندما عاد من GetString؟ >> [طالب] سلسلة.
من الواضح أن سلسلة، أليس كذلك؟ حصلت على السلسلة.
123 غير ذلك حقا، واقتبس، نهاية الاقتباس، 123 مع 0 \ في نهاية ذلك.
هذا ليس صحيح. هذا ليس عددا. يبدو عددا ولكنها ليست في الواقع.
فماذا يجب أن نفعل GetInt؟
عليها أن تفحص هذه السلسلة من اليسار إلى اليمين - 123 \ 0 - بطريقة أو بأخرى وتحويل إلى عدد صحيح الفعلية.
هل يمكن معرفة كيفية القيام بذلك.
إذا كنت تعتقد مرة أخرى إلى pset2، حصلت يفترض مريح قليلا مع قيصر
أو Vigenere، حتى تتمكن من تكرار عبر سلسلة، يمكنك تحويل حرف إلى رجات.
لكن هيك، انها مجموعة كبيرة من العمل.
لماذا لا استدعاء دالة مثل sscanf أن يفعل ذلك بالنسبة لك؟
لذلك تتوقع sscanf حجة - في هذه الحالة يسمى الخط، الذي هو سلسلة.
ثم قمت بتحديد تهمك، مشابهة جدا إلى printf، ما كنت تتوقع أن نرى في هذه السلسلة.
وما أقوله هنا هو أتوقع أن نرى رقم عشري وربما حرف.
وسنرى لماذا هذا هو الحال في لحظة واحدة.
واتضح أن هذا التدوين الآن تذكر الاشياء التي نتحدث عنها
ما يزيد قليلا على اسبوع.
ما هو & N & C والقيام بالنسبة لنا هنا؟ >> [طالب] عنوان وعنوان ن ج.
نعم. انها إعطائي عنوان وعنوان ن ج. لماذا هو مهم؟
هل تعلم أن وظائف في C، يمكنك دائما العودة قيمة أو قيمة على الإطلاق.
يمكنك العودة إلى الباحث، وسلسلة، طوف، وشار، أيا كان، أو يمكنك العودة باطلة،
ولكن يمكنك العودة شيء واحد فقط الحد الأقصى.
ولكن هنا نريد sscanf للعودة إلى الباحث لي ربما، رقم عشري،
وأيضا. شار، وساوضح لماذا في لحظة شار
تريد العودة بفعالية sscanf شيئين، ولكن هذا غير ممكن تماما في C.
يمكنك العمل حول ذلك بواسطة التمرير في عنوانين
لأن بمجرد تسليم وظيفة عنواني،
ماذا يمكن أن تفعل هذه المهمة معهم؟ >> [طالب] الكتابة إلى تلك العناوين.
يمكن أن تكتب إلى تلك العناوين.
يمكنك استخدام عملية نجوم والذهاب إلى هناك، إلى كل من هذه العناوين.
انها نوع من هذه الآلية من باب خلفي لكنها شائعة جدا لتغيير قيم المتغيرات
أكثر من مجرد مكان واحد - في هذه الحالة، وهما.
تلاحظ الآن أنا التحقق من وجود == 1 ثم العودة ن إذا كان ذلك لا، في الواقع، تقييم إلى true.
فما الذي يحدث؟ من الناحية الفنية، كل ما نريده حقا أن يحدث في GetInt هو هذا.
نريد تحليل، إذا جاز التعبير، ونحن نريد لقراءة سلسلة - نهاية الاقتباس اقتباس-123 -
وإذا كان يبدو أن هناك عددا هناك، ما كنا نقول للقيام sscanf
يتم وضع هذا العدد - 123 - في هذا المتغير ن بالنسبة لي.
لذلك فلماذا أنا فعلا هذا أيضا؟
ما هو دور sscanf قائلا قد تحصل أيضا على حرف هنا؟
[رد الطالب غير مسموع] >> A الفاصلة العشرية يمكن أن تعمل فعلا.
دعونا نرى أن يعتقد للحظة واحدة. وماذا ايضا؟
[طالب] ويمكن أن يكون NULL. الفكر >> جيد. يمكن أن يكون الحرف فارغة.
انها في الواقع لا في هذه الحالة. نعم. >> [طالب] ASCII.
ASCII. اسمحوا لي أن التعميم أو أبعد من ذلك.
ج هناك فقط٪ لتدقيق الأخطاء.
نحن لا نريد أن يكون هناك حرف بعد الرقم،
ولكن ما هذا يتيح لي القيام به هو ما يلي.
تبين أن sscanf، إلى جانب تخزين القيم في ن ج وهنا في هذا المثال،
ما هو أيضا لا تقوم بإرجاع عدد من المتغيرات وضعه القيم فيها.
حتى إذا كنت اكتب فقط في 123، وعندئذ فقط سوف د٪ لمطابقة،
وفقط يحصل على تخزين ن مع قيمة مثل 123،
ويحصل على وضع شيء في ج.
C لا يزال يمثل قيمة القمامة، إذا جاز التعبير -
القمامة لأنه لم يكن يوما تهيئة إلى بعض القيمة.
حتى في هذه الحالة، sscanf بإرجاع 1 لأنني ملؤها 1 من هذه المؤشرات،
في هذه الحالة كبيرة، لدي الباحث لذلك أنا سراح خط لتحرير الذاكرة
أن GetString المخصصة في الواقع، ومن ثم أعود ن،
والا اذا كنت تساءلت يوما حيث أن إعادة المحاولة بيان مصدره، أنها تأتي من هنا.
إذا كان الأمر كذلك، على النقيض من ذلك، اكتب في 123foo I - سوى بعض تسلسل عشوائي من النص -
sscanf يجري لمعرفة عدد، عدد، عدد، و،
وانه سيكون لوضع 123 في ن؛ انه سيكون لوضع و ج في وثم العودة 2.
لذلك لدينا، فقط باستخدام التعريف الأساسي للسلوك sscanf، وهي طريقة بسيطة جدا -
حسنا، معقدة للوهلة الأولى ولكن في نهاية اليوم آلية بسيطة إلى حد ما -
للقول هل هناك كثافة وإذا كان الأمر كذلك هو أن الشيء الوحيد الذي وجدت؟
وبيضاء هنا هو متعمد.
إذا كنت تقرأ وثائق sscanf، فإنه يخبرك أنه إذا قمت بتضمين قطعة من بيضاء
في بداية أو نهاية، sscanf سيسمح أيضا للمستخدم، لأي سبب كان،
لتصل إلى 123 بار الفضاء والتي من شأنها أن تكون مشروعة.
فلن يصيح في المستخدم فقط لأنهم ضرب شريط الفضاء
في بداية أو نهاية، وهو أكثر قليلا سهل الاستعمال.
>> ثم أي أسئلة على GetInt؟ نعم. >> [طالب] ماذا لو كنت وضعت للتو في شار؟
سؤال جيد.
ماذا لو قمت بكتابته في مثل شار و وضرب أدخل دون كتابة أي وقت مضى 123؟
ما رأيك في سلوك هذا الخط من التعليمات البرمجية سيكون بعد ذلك؟
[رد الطالب غير مسموع]
نعم، لذلك يمكن تغطية sscanf ذلك أيضا لأنه في هذه الحالة، فإنه لن يملأ ن ج أو.
انه سيكون العودة بدلا من ذلك 0، في هذه الحالة أنا أيضا اصطياد هذا السيناريو
لأن القيمة المتوقعة ما أريده هو 1.
أريد واحدة فقط والمطلوب شغلها شيء واحد فقط. سؤال جيد.
>> الآخرين؟ حسنا.
>> دعونا لا تذهب من خلال جميع وظائف هنا،
لكن الذي يبدو أن الاهتمام ربما المتبقي هو GetString
لأنه تبين أن GetFloat، GetInt، GetDouble، GetLongLong
جميع بونت الكثير من وظائفها لGetString.
لذلك دعونا نلقي نظرة على كيفية تنفيذ انه هنا.
هذا واحد يبدو معقدة بعض الشيء، ولكنه يستخدم نفس الأسس
اننا بدأنا نتحدث عن الأسبوع الماضي.
في GetString، والذي لا يأخذ حجة باطلة وفقا لتصل هنا
وتقوم بإرجاع سلسلة، وأنا على ما يبدو أنا معلنا سلسلة تسمى العازلة.
لا أعرف حقا ما الذي يحدث لاستخدامها في ذلك، لكن سننتظر لنرى.
يبدو القدرات بشكل افتراضي 0.
ليس تماما متأكدا من أين هذا يحدث، ولست متأكدا ما ن هو الذهاب الى استخدامها لحتى الآن،
ولكن الآن هو الحصول على أكثر من ذلك بقليل للاهتمام.
في خط 243، ونعلن الباحث، ج.
هذا هو نوع من الغباء التفاصيل.
A حرف هو 8 بت، ويمكن تخزين 8 بت عدد القيم المختلفة؟ >> [طالب] 256. >> 256.
المشكلة هي إذا كنت تريد أن يكون 256 حرفا ASCII المختلفة، والتي هناك
إذا كنت تعتقد العودة - وهذا ليس شيئا لتسجيل.
ولكن إذا كنت تعتقد مرة أخرى إلى المخطط الذي ASCII كبيرة كان لدينا منذ أسابيع،
كان هناك في هذه الحالة 128 أو 256 حرفا ASCII.
استخدمنا جميع الأنماط تصل 0S و1S.
هذا مشكلة إذا كنت تريد أن تكون قادرة على الكشف عن وجود خطأ
لأنه إذا كنت تستخدم بالفعل 256 قيمة لشخصياتك،
هل حقا لا نخطط لأنه الآن قبل أن يكون لديك أي وسيلة للقول،
هذه ليست شخصية شرعي، وهذا هو بعض رسالة خاطئة.
وذلك ما يفعله هو العالم يستخدمون فيه قيمة أكبر المقبلة، شيء يشبه الباحث،
بحيث يكون لديك عدد من البتات مجنون (32 عاما) لمدة 4 مليار القيم الممكنة
بحيث يمكنك ببساطة وضع حد باستخدام أساسا 257 من بينها،
1 من الذي له معنى خاص وبعض خطأ.
>> لذلك دعونا نرى كيف يعمل هذا.
في خط 246، لدي هذه الحلقة في حين الكبيرة التي تدعو fgetc،
و معنى الملف، getc بذلك، ومن ثم ستدين.
اتضح هذا هو مجرد وسيلة أكثر دقة من القول قراءة المدخلات من لوحة المفاتيح.
لوحة المفاتيح القياسية وسائل المدخلات والمخرجات القياسية يعني الشاشة،
والخطأ المعياري، والذي سنرى في pset4، يعني الشاشة
ولكن جزء خاص من الشاشة بحيث ليس الخلط مع الانتاج الفعلي
أن التي ترغب في طباعتها. ولكن أكثر على ذلك في المستقبل.
ذلك يعني فقط قراءة fgetc حرف واحد من لوحة المفاتيح وتخزينه أين؟
تخزينها في ج.
ومن ثم تحقق - لذلك أنا فقط باستخدام بعض العطف منطقية هنا -
تأكد من أنه لا يساوي - \ ن، وبالتالي فإن المستخدم هاهنا، ونحن نريد التوقف عند هذه النقطة،
نهاية الحلقة - ونريد أيضا للتحقق من EOF ثابت خاصة،
الذي إذا كنت تعرف أو تخمين، ماذا يقف؟ >> [طالب] نهاية الملف. الأخير >> من الملف.
هذا هو نوع من معنى لأنه إذا أنا كتابة على لوحة المفاتيح،
هناك حقا أي ملف المشاركة في ذلك،
ولكن هذا هو نوع فقط من مصطلح عام يستخدم ليعني
أن أي شيء آخر يأتي من أصابع الانسان.
EOF - نهاية الملف.
بوصفها جانبا، إذا كنت قد ضربت من أي وقت مضى التحكم في لوحة المفاتيح D، وليس من شأنه أن يكون لديك حتى الآن -
لقد ضرب لكم التحكم C - D التحكم يرسل هذا الثابت خاص يسمى EOF.
حتى الآن لدينا سوى بعض تخصيص الذاكرة الديناميكية.
>> إذا كان الأمر كذلك (ن + 1> القدرات). الآن سوف أشرح ن.
وكيف أن العديد من بايت N حاليا في المخزن المؤقت،
السلسلة التي كنت تقوم حاليا ببناء من المستخدم.
إذا كان لديك أكثر من الأحرف في المخزن المؤقت الخاص مما لديك القدرة في المخزن المؤقت،
حدسي ما يتعين علينا القيام به ثم يتم تخصيص المزيد من القدرات.
لذلك أنا ذاهب الى المقشود على بعض العمليات الحسابية والتركيز فقط على هذه الوظيفة هنا.
كنت تعرف ما هو malloc أو على الأقل على دراية بصفة عامة.
اتخاذ تخمين ما realloc لا. >> [طالب] ويضيف الذاكرة.
انها ليست تماما مضيفا الذاكرة. انها اعادة توطين الذاكرة على النحو التالي.
إذا كان هناك ما زال غرفة في نهاية السلسلة لتعطيك أكثر من تلك الذاكرة
مما يعطي أصلا لك، ثم عليك أن تحصل على ذاكرة إضافية.
حتى تتمكن من الحفاظ فقط وضع الأحرف السلسلة العودة إلى الوراء إلى العودة إلى الوراء.
ولكن اذا كان هذا ليس هو الحال لكنت انتظرت وقتا طويلا
وحصلت على شيء عشوائي ساقط في الذاكرة هناك
ولكن هناك ذاكرة إضافية إلى هنا، هذا ما يرام.
Realloc سوف تفعل كل رفع الأحمال الثقيلة بالنسبة لك،
نقل سلسلة كنت قد قرأت حتى الآن في من هنا، وطرح عليه هناك،
وبعد ذلك بإعطائك بعض أكثر المدرج في تلك المرحلة.
>> حتى مع موجة من ناحية، واسمحوا لي أن أقول إن ما تقوم به GetString
ولقد بدا مع المخزن مؤقت صغير، وربما حرف واحد واحد،
وإذا كان المستخدم في أنواع حرفين، GetString ينتهي يدعو ويقول realloc
وكان حرف واحد لا يكفي؛ تعطيني حرفين.
إذا ثم تقرأ من خلال منطق الحلقة، انها سوف يقول
المستعمل في طباعة 3 أحرف؛ تعطيني الآن 2 ولكن لا 4 أحرف،
ثم إعطاء لي 8، ثم تعطيني 16 و 32.
حقيقة أنني مضاعفة قدرة كل مرة
يعني أن المخزن المؤقت لن تنمو ببطء، انها سوف تنمو بسرعة فائقة.
وماذا يمكن أن يكون ميزة ذلك؟
لماذا أنا مضاعفة حجم المخزن المؤقت
على الرغم من قد يحتاج المستخدم فقط حرف واحد إضافي من لوحة المفاتيح؟
[رد الطالب غير مسموع] >> ما هذا؟ >> [طالب] ليس لديك لتنمو في كثير من الأحيان باسم.
بالضبط. لم يكن لديك لتنمو في كثير من الأحيان باسم.
وهذا هو مجرد نوع من التحوط كنت الرهانات الخاصة بك هنا،
وكانت الفكرة هي أنك لا تريد الاتصال realloc الكثير لأنه يميل إلى أن يكون بطيئا.
أي وقت أن تطلب من نظام التشغيل للذاكرة،
كما سترى قريبا في مجموعة مشكلة في المستقبل، فإنها تميل إلى يستغرق بعض الوقت.
التقليل إلى أدنى حد بحيث مقدار الوقت، حتى لو كنت إضاعة بعض المساحة،
يميل إلى أن يكون شيء جيد.
>> ولكن إذا قرأنا من خلال الجزء الأخير من GetString هنا -
ومرة أخرى فهم كل سطر واحد هنا ليست في غاية الأهمية اليوم -
تلاحظ أنه في نهاية المطاف تدعو مرة أخرى malloc
وتماما كما يخصص بايت يصل الى انها تحتاج لسلسلة
ويلقي بعيدا ثم عن طريق الاتصال مجانا المخزن المؤقت كبير جدا
إذا كان بالفعل حصلت تضاعف عدة مرات أيضا.
لذلك باختصار، هذه هي الطريقة التي تعمل GetString كل هذا الوقت.
لا تتم قراءة كل ما حرف واحد في وقت واحد مرة أخرى ومرة ​​أخرى ومرة ​​أخرى،
وفي كل مرة يحتاج بعض ذاكرة إضافية، فإنه يسألك نظام التشغيل لذلك
من خلال الدعوة realloc.
>> أي أسئلة؟ حسنا.
>> هجوم.
والآن بعد أن نفهم مؤشرات أو على الأقل على دراية بشكل متزايد مع مؤشرات،
دعونا النظر في كيفية العالم كله يبدأ في الانهيار
إذا لم يكن لدفاع ضد المستخدمين الخصومة تماما،
الناس الذين يحاولون اختراق النظام الخاص بك،
الناس الذين يحاولون سرقة البرمجيات الخاصة بك عن طريق التحايل بعض رمز التسجيل
قد لديهم وإلا لكتابة فيه.
>> نلقي نظرة على هذا المثال هنا، الذي هو مجرد رمز C الذي يحتوي على الوظيفة الرئيسية في الجزء السفلي
فو الذي يستدعي الدالة. وما صدوره لفو؟
[طالب] وهناك حجة واحدة. >> [مالان] حجة واحدة.
حتى argv [1]، مما يعني أن الكلمة الأولى التي يقوم المستخدم بكتابته في سطر الأوامر
بعد a.out أو أيا كان يسمى البرنامج.
حتى في أعلى فو يأخذ في شار *. * ولكن هو فقط ما شار؟ >> [طالب] سلسلة.
[مالان] سلسلة، ولذلك لا يوجد شيء جديد هنا.
هذه السلسلة يتم بصورة تعسفية يتم استدعاء بار.
في هذا الخط هنا، شار ج [12]، وفي نوع من شبه التقنية العربية، ما هو هذا الخط تفعل؟
[طالب] صفيف - صفيف >> من؟ >> [طالب] أحرف. أحرف >>.
تعطيني مجموعة من 12 حرفا. لذلك يمكن ان نسميه هذا المخزن مؤقت.
انه دعا تقنيا فإنه ج، ولكن منطقة عازلة في البرمجة يعني مجرد حفنة من الفضاء
أن يمكنك وضع بعض الاشياء فيه.
وأخيرا ثم، قمنا memcpy لم تستخدم من قبل، ولكن يمكنك تخمين ربما ما تقوم به.
نسخه الذاكرة. ماذا يفعل؟
على ما يبدو أنه نسخ بار، مدخلاته، إلى ج لكن فقط حتى طول شريط.
ولكن هناك خلل هنا. >> [طالب] تحتاج الطابع sizeof. حسنا >>.
من الناحية الفنية، ينبغي لنا أن نفعل حقا التوابع strlen (بار) * sizeof (تشار)). هذا صحيح.
ولكن في أسوأ الحالات هنا، دعونا نفترض أن that's -
حسنا. ثم هناك اثنان البق.
sizeof ذلك (شار))؛
دعونا جعل هذا قليلا على نطاق أوسع.
حتى الآن لا يزال هناك علة، وهذا ما؟ >> [استجابة الطالب غير مسموع]
تحقق من وجود ما؟ >> [طالب] التحقق من وجود NULL.
يجب علينا أن التحقق من وجود عموما NULL لأن تحدث أمور سيئة
عندما المؤشر هو NULL لأنك قد ينتهي الذهاب إلى هناك،
ويجب أن لا يكون أي وقت مضى الذهاب إلى NULL بواسطة يعتبر إلغاء مرجعية مع المشغل نجوم.
لذلك هذا امر جيد. وماذا نحن فاعلون؟ منطقيا، وهناك عيب هنا أيضا.
[طالب] معرفة ما اذا كان هو argc> = إلى 2.
حتى تحقق إذا هو argc> = 2. حسنا، لذلك هناك ثلاثة أخطاء في هذا البرنامج هنا.
نحن الآن فحص ما إذا كان المستخدم كتابتها في الواقع أي شيء في argv [1]. جيدة.
إذن ما هو علة ثالثة؟ نعم. >> [طالب] C قد لا تكون كبيرة بما يكفي.
جيدة. بحثنا سيناريو واحد.
بحثنا ضمنا عدم نسخ ذاكرة أكثر من شأنه أن يتجاوز طول الشريط.
إذا كان الأمر كذلك السلسلة المستعمل في طباعة هو 10 حرفا،
هذا يقول نسخ فقط 10 حرفا. وهذا ما يرام.
ولكن ما إذا كان المستخدم كتابتها في كلمة واحدة في موجه مثل كلمة 20-حرف؟
هذا يقول نسخة من شريط 20 حرفا في ماذا؟
C، والمعروف باسم عازلة لدينا، مما يعني أنك كتبت للتو البيانات
إلى مواقع بايت 8 أن كنت لا تملك،
وكنت لا تملك لهم، بمعنى أن كنت أبدا المخصصة لهم.
لذلك هذا هو ما يعرف عموما بأنه هجوم تجاوز المخزن المؤقت أو المخزن المؤقت تجاوز الهجوم.
وانها هجوم بمعنى أنه إذا كان المستخدم أو البرنامج الذي المتصل بك وظيفة
يمكن أن يقوم به هذا ضار، ما يحدث في الواقع القادم يكون في الواقع سيئة جدا.
>> لذلك دعونا نلقي نظرة على هذه الصورة هنا.
هذه الصورة تمثل الكدسة من الذاكرة.
أذكر أنه في كل مرة كنت استدعاء دالة لك هذا الإطار يذكر على كومة
وثم آخر ثم آخر وآخر.
وحتى الآن، لدينا مجرد نوع من هذه المستخرجة على شكل مستطيلات
إما على لوحة أو على الشاشة هنا.
ولكن إذا كان لنا أن التكبير في واحدة من تلك المستطيلات، عند استدعاء الدالة فو،
اتضح أن هناك أكثر من الداخل كومة من هذا الإطار في هذا المستطيل
من X و y فقط وألف وباء، وكأننا لم نتحدث عن المبادلة.
اتضح أن هناك بعض التفاصيل ذات مستوى أقل، من بينها عنوان المرسل.
لذلك عندما تبين الرئيسي يدعو فو، الرئيسي وإبلاغ فو
ما هو عنوان الرئيسي في ذاكرة الكمبيوتر
لأن خلاف ذلك، في أقرب وقت يتم تنفيذ فو، كما في هذه الحالة هنا،
بمجرد وصولك الى هذا قوس مغلق مجعد في نهاية فو،
كيف هيك لا أعرف من أين فو يفترض السيطرة على البرنامج أن تذهب؟
اتضح أن الإجابة على هذا السؤال هو في هذا المستطيل الأحمر هنا.
هذا يمثل المؤشر، والامر متروك للكمبيوتر لتخزين مؤقتا
على المكدس يسمى تتم عنوان رئيسي لذلك أنه بمجرد تنفيذ فو،
الكمبيوتر وما يعرف أين الخط الرئيسي في العودة إلى.
حفظ مؤشر الإطار تتعلق بالمثل على ذلك.
* شريط شار هنا يمثل ما؟
الآن هذا الجزء الأزرق هو الإطار هنا لفو. ما هو شريط؟
شريط هو مجرد حجة لوظيفة فو.
حتى الآن عدنا إلى نوع من الصورة مألوفة.
هناك المزيد والمزيد من الاشياء الانحرافات التي تظهر على الشاشة،
ولكن هذا الجزء الضوء الأزرق هو فقط ما كنا الرسم على السبورة
عن شيء مثل المبادلة. هذا هو الإطار لفو.
والشيء الوحيد فيه الآن هو بار، الذي هو هذه المعلمة.
ولكن ينبغي أن تكون أي شيء آخر في كومة وفقا لهذا الرمز هنا؟
[طالب] ج شار [12]. >> [مالان] شار ج [12].
يجب أن نرى أيضا 12 الساحات الذاكرة المخصصة إلى متغير يسمى C،
والواقع أننا لا يكون هذا على الشاشة.
أعلى جدا هناك ج [0]، ومن ثم صاحب هذا الرسم البياني
لم أكن عناء رسم كل من المربعات، ولكن هناك في الواقع 12 هناك
لأنه إذا نظرتم في أسفل اليمين، ج [11] إذا كنت تعول من 0 بايت 12TH هو من هذا القبيل.
ولكن هنا تكمن المشكلة.
في أي اتجاه متزايد هو C؟
نوع من أعلى إلى أسفل إذا كان يبدأ في أعلى وينمو إلى أسفل.
انها لا تشبه تركنا أنفسنا المدرج الكثير هنا على الإطلاق.
لدينا نوع من رسمت أنفسنا في مأزق،
وأن ج [11] هو الحق حتى ضد نقابة المحامين، والذي هو الحق حتى ضد مؤشر الإطار المحفوظة،
الذي هو الحق حتى ضد عنوان المرسل. ليس هناك مساحة أكبر.
إذن ما هو ضمنا ثم إذا كنت المسمار
وحاولت قراءة 20 بايت إلى بايت العازلة 12-؟
حيث هي تلك التي تسير 8 بايت إضافية أن تذهب؟ >> [طالب] داخل -
داخل كل شيء آخر، ومنها ما هو السوبر الهامة.
والشيء الأكثر أهمية، من المحتمل، هو مربع أحمر هناك، عنوان المرسل،
لأن افترض أنك إما بطريق الخطأ أو الكتابة فوق تلك adversarially بايت 4،
هذا العنوان المؤشر، وليس فقط مع القمامة ولكن مع عدد
يحدث ذلك لتمثيل العنوان الفعلي في الذاكرة.
ما هو ضمنا، منطقيا؟ >> [طالب] وظيفة هو الذهاب الى العودة الى مكان مختلف.
بالضبط.
عندما يعود فو والزيارات التي متعرج، والبرنامج سنشرع
عدم العودة الى الأصل، انه سيكون للعودة إلى ما هو عنوان في هذا المربع الأحمر.
>> في حالة تسجيل البرنامج التحايل،
ماذا لو كان العنوان الذي يجري عاد إلى وظيفة غير التي عادة يحصل على استدعاء
بعد كنت قد دفعت لهذا البرنامج وإدخالها التعليمات البرمجية التسجيل؟
يمكنك فرز خدعة من جهاز الكمبيوتر إلى هنا ولكن لن يحدث بدلا من ذلك هنا.
أو إذا كنت حقا ذكي، ويمكن في الواقع عدو اكتب في في لوحة المفاتيح، على سبيل المثال،
لا كلمة الفعلية، لا الأحرف 20، ولكن لنفترض انه أو انها فعلا في أنواع
بعض الأحرف التي تمثل رمز.
وانها لن تكون متاحة C، انه سيكون في الواقع أن تكون الأحرف
التي تمثل رمز الجهاز ثنائي، و 0s 1s.
ولكن لنفترض انهم ذكي بما فيه الكفاية للقيام بذلك،
للصق على نحو ما إلى شيء موجه GetString هذا هو التعليمات البرمجية المترجمة أساسا،
وآخر 4 بايت الكتابة أن عنوان المرسل.
وما عنوان هذا المدخل لا تفعل؟
في الواقع فإنه يخزن في هذا المستطيل الأحمر عنوان البايت الأول من المخزن المؤقت.
ولذلك عليك أن تكون ذكية حقا، وهذا هو الكثير من التجربة والخطأ للناس سيئة هناك،
ولكن إذا كنت تستطيع معرفة كيفية كبيرة هذا المخزن المؤقت
بحيث بايت القليلة الماضية في الإدخال الذي تقدم إلى البرنامج
يحدث ليكون معادلا لعنوان بداية العازلة الخاص بك، يمكنك القيام بذلك.
اذا قلنا مرحبا وعادة 0 \، وهذا ما ينتهي في المخزن المؤقت.
ولكن إذا نحن أكثر ذكية وملأنا أن العازلة مع ما سنقوم استدعاء بشكل عام شفرة الهجوم -
AAA، هجوم، هجوم، هجوم - عندما يكون ذلك مجرد شيء لا شيء سيئة،
ماذا يحدث إذا كنت حقا ذكي، قد تقوم بذلك.
في المربع الأحمر هنا هو سلسلة من الأرقام - 80، C0، 35، 08.
تلاحظ أن يطابق الرقم الذي يعود هنا.
انها في ترتيب عكسي، ولكن أكثر في الوقت المحدد بعض هذا الآخر.
تلاحظ أنه تم تغيير هذا عنوان المرسل عمدا
على قدم المساواة عنوان هنا، وليس عنوان الرئيسي.
إذا كان الأمر كذلك الرجل السيئ هو السوبر ذكية، وقال انه أو انها سوف تدرج في أن شفرة الهجوم
شيء من هذا القبيل حذف كافة الملفات للمستخدم أو نسخ كلمات المرور
أو إنشاء حساب المستخدم الذي يمكنني تسجيل الدخول ثم إلى - أي شيء على الإطلاق.
>> وهذا هو الخطر على حد سواء وقوة C.
لأنه لديك إمكانية الوصول إلى الذاكرة من خلال مؤشرات
وبالتالي يمكنك كتابة أي شيء تريده في الذاكرة للكمبيوتر،
يمكنك جعل جهاز كمبيوتر تفعل أي شيء تريده
ببساطة عن طريق وجود لها داخل القفز نحو مجالها الذاكرة الخاصة.
وحتى يومنا هذا الكثير من البرامج والعديد من المواقع بحيث يتم خطر
تختزل إلى الناس الاستفادة من هذا.
وهذا قد يبدو وكأنه هجوم متطورة فائقة، لكنه لا يبدأ دائما على هذا النحو.
الحقيقة هي أن الناس ما تفعل عادة سيئة وسوف هو،
سواء كان ذلك في برنامج في سطر الأوامر أو برنامج أو موقع على شبكة الإنترنت واجهة المستخدم الرسومية،
كنت مجرد بداية تقديم هراء.
اكتب لكم في كلمة كبيرة حقا في حقل البحث واضغط على Enter،
وعليك الانتظار لمعرفة ما إذا كان الموقع تعطل
أو يمكنك الانتظار لمعرفة ما إذا كان برنامج يظهر رسالة خطأ بعض
لأنه إذا كنت محظوظا والرجل السيئة والتي تقدمها بعض المدخلات مجنون
أن تعطل البرنامج، وهذا يعني مبرمج لم تتوقع سلوكك السيئ،
مما يعني يمكنك على الأرجح مع ما يكفي من الجهد، والمحاكمة والخطأ بما فيه الكفاية،
معرفة كيفية شن هجوم أكثر دقة.
لذلك بقدر ما هو جزء من الأمن لا مجرد تجنب هذه الهجمات تماما
ولكن كشفها وفعلا تبحث في سجلات
ورؤية ما لديك المدخلات مجنون الناس كتابتها في موقع الويب الخاص بك،
ما شروط البحث والناس كتابتها في موقع الويب الخاص بك
على أمل تفيض بعض العازلة.
وهذا كله يتلخص في أساسيات بسيطة من ما هو صفيف
وماذا يعني ذلك لتخصيص واستخدام الذاكرة.
>> المتعلقة بذلك ثم هو أيضا ذلك.
دعونا نظرة فقط من داخل القرص الصلب مرة أخرى.
تذكرون من أسبوع أو أسبوعين قبل أن عند سحب الملفات إلى سلة المحذوفات أو سلة المهملات،
ماذا يحدث؟ >> [طالب] لا شيء. لا شيء على الإطلاق >>، أليس كذلك؟
إذا قمت بتشغيل في نهاية المطاف انخفاض مساحة القرص،
ويندوز أو ماك OS بدء حذف الملفات بالنسبة لك.
ولكن إذا قمت بسحب شيء في هناك، وهذا ليس على الإطلاق آمنة.
جميع الحجرة أو صديق أو أحد أفراد أسرته القيام به هو النقر المزدوج، وفويلا،
هناك سطحية كافة الملفات التي حاولت حذفها.
معظمنا على الأقل أعرف أن لديك لانقر بزر الماوس الأيمن فوق أو السيطرة
وإفراغ سلة المهملات أو شيء من هذا القبيل.
لكن حتى ذلك الحين أن لا يفعل تماما خدعة
لأن ما يحدث عندما يكون لديك ملف على القرص الثابت
الذي يمثل بعض مستند Word أو JPEG بعض، وهذا يمثل القرص الثابت،
ودعونا نقول هذه القطعة هنا يمثل هذا الملف،
وانها تتكون من مجموعة كاملة من 0S و1S.
ماذا يحدث عندما لا اسحب فقط هذا الملف إلى سلة المهملات أو إعادة تدويرها بن
لكنها فارغة أيضا؟ نوع من لا شيء.
انها ليست شيئا على الإطلاق الآن.
الآن شيء فقط لأن شيئا قليلا يحدث في شكل هذا الجدول.
ولذلك لا يوجد نوع من قاعدة البيانات أو جدول داخل ذاكرة جهاز الكمبيوتر
يحتوي عمود واحد أساسا لملفات أسماء وعمود واحد لملفات 'الموقع،
حيث قد يكون هذا الموقع 123، مجرد رقم عشوائي.
لذلك قد يكون لدينا شيء من هذا القبيل وx.jpeg الموقع 123.
ماذا يحدث بعد ذلك عند تفريغ سلة المهملات في الواقع الخاص بك؟
أن يذهب بعيدا.
ولكن ما لا يذهب بعيدا هو و 0s 1s.
>> إذن ما ثم اتصال pset4؟
حسنا، مع pset4، فقط لأنهم تمحى بطريق الخطأ ونحن بطاقة فلاش مدمج
أن كان كل من هذه الصور أو لمجرد أنها من سوء الحظ أصبحت تالفة
لا يعني أن 0S و1S ليست تزال هناك.
ربما يتم فقدان عدد قليل منها بسبب فساد شيء
بمعنى أن بعض 0S أصبح 1S 1S وأصبح 0S.
يمكن تحدث أمور سيئة بسبب برنامج عربات التي تجرها الدواب أو الأجهزة المعيبة.
ولكن العديد من هذه البتات، وربما حتى 100٪ منهم، لا تزال هناك.
انها مجرد أن الكمبيوتر أو الكاميرا لا تعرف من أين بدأت JPEG1
وحيث بدأ JPEG2.
ولكن إذا كنت، مبرمج، تعرف مع شيء من الدهاء حيث تلك هي صور JPEG
أو كيف تبدو حتى تتمكن من تحليل JPEG و 0s 1s ويقول، JPEG،
يمكنك كتابة برنامج مع فقط أساسا للأو أثناء حلقة
أن يسترد كل واحد من هذه الملفات.
وبالتالي فإن الدرس المستفاد هو أن تبدأ بعد ذلك بشكل آمن محو الملفات
إذا كنت ترغب في تجنب هذا تماما. نعم.
>> [طالب] فكيف تقول على جهاز الكمبيوتر الخاص بك
أن لديك ذاكرة أكثر من فعلت من قبل؟
الحصول على مزيد من الذاكرة من فعلت من قبل - >> [طالب] المزيد من الذاكرة المتاحة.
اه. سؤال جيد.
فلماذا إذن بعد إفراغ سلة المهملات جهاز الكمبيوتر الخاص بك لا اقول لكم
أن لديك مساحة حرة أكبر مما كنت فعلت من قبل؟
باختصار، لأنه يكذب.
أكثر من الناحية الفنية، لديك مساحة أكبر لأنه الآن قلتم
يمكنك وضع الأشياء الأخرى حيث هذا الملف كان من قبل.
ولكن هذا لا يعني أن تسير بعيدا بت،
وهذا لا يعني يجري تغيير البتات لجميع 0S، على سبيل المثال،
من أجل حمايتك.
وعلى النقيض من ذلك، إذا كنت آمن محو الملفات أو جسديا تدمير الجهاز،
هذا هو حقا السبيل الوحيد أحيانا حول ذلك.
>> فلماذا لا نترك تلك المذكرة على شبه مخيفة، وسوف نرى لك يوم الاثنين.
[تصفيق]
>> [CS50.TV]