الرقم السحري (البرمجة)
في برمجة الحاسوب ، يُعرف الرقم السحري أو الثابت السحري بأنه قيمة عددية في شفرة المصدر يكون معناها غير واضح للقارئ. ويُستخدم المصطلح أيضًا خارج نطاق البرمجة للإشارة إلى رقم لا يتضح معناه دون معرفة إضافية - على سبيل المثال، تُعرَّف بعض تنسيقات الملفات برقم سحري مُضمَّن في الملف . كذلك، قد يُصنَّف الرقم المرتبط بشكل فريد نسبيًا بمفهوم معين، مثل المعرّف الفريد عالميًا ، على أنه رقم سحري.
حرف رقمي
يعتبر استخدام رقم سحري في شفرة المصدر نمطًا سيئًا ويخالف أحد أقدم قواعد البرمجة، والتي تعود إلى كتيبات COBOL و FORTRAN و PL/1 في الستينيات. [ 1 ]
على سبيل المثال، في الكود التالي الذي يحسب السعر بعد الضريبة، 1.05هو رقم سحري لأن القيمة تشفر معدل ضريبة المبيعات، 5٪، بطريقة أقل وضوحًا.
السعر بعد الضريبة = 1.05 * السعر
يُخفي استخدام الأرقام السحرية في الشيفرة البرمجية نية المطورين في اختيار هذا الرقم، [ 2 ] ويزيد من فرص حدوث أخطاء دقيقة، ويجعل من الصعب تعديل البرنامج وتوسيعه في المستقبل. [ 3 ] على سبيل المثال، يصعب تحديد ما إذا كان كل رقم في π 3.14159265358979323846مكتوبًا بشكل صحيح، أو ما إذا كان من الممكن اختصار هذا الثابت لـ π إلى 1 دون التأثير على وظائف البرنامج بسبب انخفاض دقته. إن استبدال جميع الأرقام السحرية المهمة بثوابت مُسماة (تُسمى أيضًا متغيرات توضيحية) يجعل البرامج أسهل في القراءة والفهم والصيانة. [ 4 ]3.14159
يمكن تحسين المثال أعلاه بإضافة متغير يحمل اسماً وصفياً:
الضريبة = 0.05 السعر بعد الضريبة = (1.0 + الضريبة) * السعر
قد يُسهم الاسم الجيد في جعل الكود أسهل فهمًا من قِبل المُشرف، سواءً كان ليس المؤلف الأصلي أم لا، وحتى من قِبل المؤلف الأصلي نفسه بعد فترة من الزمن. [ 5 ] مثال على ثابت ذي اسم غير مُفيد هو ` int SIXTEEN = 16، بينما int NUMBER_OF_BITS = 16قد يكون ` أكثر فائدة`.
قد تمتلك البيانات غير الرقمية نفس الخصائص السحرية، وبالتالي نفس المشكلات التي تواجهها الأرقام السحرية. [ 1 ] لذا، قد يكون تعريفها const string testUserName = "John"واستخدامها testUserNameأفضل من استخدام القيمة الحرفية "John"مباشرةً.
مثال
على سبيل المثال، إذا كان مطلوبًا خلط القيم عشوائيًا في مصفوفة تمثل مجموعة أوراق لعب قياسية ، فإن هذه الشفرة الزائفة تقوم بالمهمة باستخدام خوارزمية خلط فيشر-ياتس :
لـ i من 1 إلى 52 j := i + randomInt(53 - i) - 1 a.swapEntries(i, j)
حيث aيمثل كائن مصفوفة، تختار الدالة randomInt(x)عددًا صحيحًا عشوائيًا بين 1 و x ، شاملًا الحدين، ثم swapEntries(i, j)تبدل العنصرين i و j في المصفوفة. في المثال السابق، 52و 53هما عددان سحريان، ولا توجد علاقة واضحة بينهما. يُعتبر أسلوب البرمجة الأمثل هو كتابة ما يلي:
int deckSize:= 52 for i from 1 to deckSize j := i + randomInt(deckSize + 1 - i) - 1 a.swapEntries(i, j)
وهذا أفضل لعدة أسباب:
- تحسين قابلية القراءة . قد يتساءل المبرمج الذي يقرأ المثال الأول: ما معنى الرقم 52 هنا؟ ولماذا 52 تحديدًا؟ قد يستنتج المبرمج المعنى بعد قراءة الكود بعناية، لكنه ليس واضحًا. [ 5 ] تصبح الأرقام السحرية مربكة بشكل خاص عندما يُستخدم الرقم نفسه لأغراض مختلفة في جزء واحد من الكود.
- أسهل في الصيانة . يسهل تغيير قيمة الرقم، لأنه غير مكرر. تغيير قيمة رقم سحري أمرٌ مُعرّض للأخطاء، لأن القيمة نفسها تُستخدم غالبًا عدة مرات في أماكن مختلفة داخل البرنامج. [ 5 ] كذلك، عندما يكون لمتغيرين أو رقمين مختلفين دلاليًا القيمة نفسها، فقد يتم تعديلهما معًا عن طريق الخطأ. [ 5 ] لتعديل المثال الأول لخلط أوراق التارو ، التي تحتوي على 78 ورقة، قد يستبدل المبرمج ببساطة كل ظهور للرقم 52 في البرنامج بالرقم 78. سيؤدي هذا إلى مشكلتين. أولًا، سيتجاهل القيمة 53 في السطر الثاني من المثال، مما سيؤدي إلى فشل الخوارزمية بطريقة خفية. ثانيًا، من المرجح أن يستبدل الأحرف "52" في كل مكان، بغض النظر عما إذا كانت تشير إلى حجم المجموعة أو إلى شيء آخر تمامًا، مثل عدد الأسابيع في السنة الميلادية، أو بشكل أكثر خبثًا، كونها جزءًا من رقم مثل "1523"، وكل ذلك سيؤدي إلى ظهور أخطاء برمجية. وعلى النقيض من ذلك، فإن تغيير قيمة المتغير
deckSizeفي المثال الثاني سيكون تغييرًا بسيطًا في سطر واحد. - يشجع على التوثيق . [ 5 ] يُعدّ المكان الوحيد الذي يُصرّح فيه عن المتغير المُسمى مكانًا مناسبًا لتوثيق معنى القيمة وسبب اختيارها. إنّ وجود القيمة نفسها في أماكن متعددة يؤدي إما إلى تعليقات مكررة (وما يترتب عليها من مشاكل عند تحديث بعضها مع إغفال البعض الآخر)، أو إلى عدم وجود مكان واحد يسهل فيه على المؤلف شرح القيمة، ويرجح أن يبحث فيه القارئ عن شرح.
- تدمج المعلومات . يمكن وضع تعريفات متغيرات "الأرقام السحرية" معًا، عادةً في أعلى الدالة أو الملف، مما يسهل مراجعتها وتغييرها. [ 5 ]
- يكشف الأخطاء الإملائية . استخدام متغير (بدلاً من قيمة حرفية) يستفيد من فحص المُصرّف. كتابة "62" بدلاً من "52" عن طريق الخطأ لن يتم اكتشافها، بينما كتابة "
dekSize" بدلاً من "deckSize" سيؤدي إلى تحذير المُصرّف بأن المتغيرdekSizeغير مُصرّح عنه. - يقلل من الكتابة . إذا كانت بيئة التطوير المتكاملة تدعم إكمال التعليمات البرمجية ، فستقوم بملء معظم اسم المتغير من الأحرف القليلة الأولى.
- يسهل تحديد المعلمات . على سبيل المثال، لتعميم المثال أعلاه إلى إجراء يقوم بخلط مجموعة من أي عدد من البطاقات، يكفي تحويله
deckSizeإلى معلمة لهذا الإجراء، بينما يتطلب المثال الأول عدة تغييرات.
دالة shuffle ( int deckSize ) for i from 1 to deckSize j := i + randomInt(deckSize + 1 - i) - 1 a.swapEntries(i, j)
أما عيوبها فهي:
- يُخلّ هذا بمفهوم الترابط المكاني . فعندما لا يُعرَّف الثابت المُسمى بالقرب من موضع استخدامه، يُؤثر ذلك سلبًا على ترابط الكود، وبالتالي على سهولة فهمه. فوضع القيمة 52 في مكان قد يكون بعيدًا يعني أنه لفهم آلية عمل حلقة "for" بشكل كامل (على سبيل المثال، لتقدير زمن تشغيل الحلقة)، يجب البحث عن تعريف الثابت والتأكد من أنه القيمة المتوقعة. يُمكن تجنب هذا بسهولة (عن طريق تغيير موضع التعريف) عندما يُستخدم الثابت في جزء واحد فقط من الكود. أما عندما يُستخدم الثابت المُسمى في أجزاء متباينة، فإن موقعه البعيد يُشير إلى أن القيمة نفسها تظهر في أماكن أخرى من الكود، وهو ما قد يكون جديرًا بالبحث فيه أيضًا.
- يُسبب ذلك إسهابًا في الكود. يُضيف تعريف الثابت سطرًا جديدًا. عندما يكون اسم الثابت أطول من قيمته، خاصةً إذا ظهرت عدة ثوابت من هذا النوع في سطر واحد، فقد يستدعي الأمر تقسيم عبارة منطقية واحدة في الكود على عدة أسطر. قد يكون ازدياد الإسهاب مُبررًا في حال وجود احتمال للبس حول الثابت، أو في حال وجود احتمال لتغيير الثابت، مثل إعادة استخدام روتين خلط الأوراق في ألعاب ورق أخرى. كما يُمكن تبريره أيضًا كزيادة في وضوح الكود.
- اعتبارات الأداء : قد يكون معالجة التعبير
deckSize + 1أثناء التشغيل أبطأ من معالجة القيمة "53". مع ذلك، تستخدم معظم المترجمات الحديثة تقنيات مثل طي الثوابت وتحسين الحلقات لحل عملية الجمع أثناء الترجمة، لذا عادةً ما يكون هناك تأثير ضئيل أو معدوم على السرعة مقارنةً باستخدام الأرقام الثابتة في الكود. يجب على وجه الخصوص مراعاة تكلفة تصحيح الأخطاء والوقت اللازم لفهم الكود غير الواضح مقابل التكلفة الحسابية الضئيلة.
الاستخدام المقبول
عندما يفتقر عددٌ حرفي إلى معنى خاص، فإن استخدامه لا يُصنَّف ضمن السحر، مع العلم أن مفهوم الخاصية أمرٌ نسبي. ومن أمثلة الأعداد الحرفية التي لا تُعتبر عادةً سحرية ما يلي:
- استخدام 0 و1 كقيم ابتدائية أو تزايدية في حلقة for ، مثل
for(inti=0;i<max;i+=1)
- يُستخدم الرقم 2 للتحقق مما إذا كان العدد زوجيًا أم فرديًا، كما في المثال التالي: 2 = 2 / 2 ، حيث 2 هو عامل باقي القسمة (modulo) .
isEven = (x % 2 == 0)%
- استخدام القيم الحرفية البسيطة، على سبيل المثال، في تعابير مثل
circumference = 2 * Math.PI * radius[ 1 ] أو لحساب مميز معادلة تربيعية كماd = b^2 − 4*a*c
- استخدام قوى العدد 10 لتحويل القيم المترية (مثل التحويل بين الغرامات والكيلوغرامات) أو لحساب النسب المئوية والقيم لكل ألف
- الأسس في تعابير مثل
(f(x) ** 2 + f(y) ** 2) ** 0.5لـ
- يُستخدم الرقمان 1 و0 أحيانًا لتمثيل القيم المنطقية "صحيح" و"خطأ". ويمكن القول إن إسناد هذه القيم إلى أسماء مثل "صحيح" و"خطأ" قد يكون أفضل.
- في لغتي C و C++، غالبًا ما يتم استخدام 0 للدلالة على المؤشر الفارغ على الرغم من أن مكتبة C القياسية تحدد ماكرو
NULLوتتضمن لغة C++ الحديثة كلمة مفتاحيةnullptr.
مؤشر التنسيق
أصل
تم استخدام مؤشرات التنسيق لأول مرة في الإصدارات المبكرة من شفرة المصدر لنظام يونكس الإصدار 7 .
تم نقل نظام يونكس إلى أحد أوائل أجهزة DEC PDP-11 /20، التي لم تكن مزودة بحماية للذاكرة . لذا، استخدمت الإصدارات المبكرة من يونكس نموذج مرجع الذاكرة القابل للنقل . [ 6 ] كانت إصدارات يونكس السابقة للإصدار السادس تقرأ ملفًا تنفيذيًا في الذاكرة وتنتقل إلى أول عنوان ذاكرة منخفض للبرنامج، وهو العنوان النسبي صفر. مع تطوير إصدارات يونكس ذات الصفحات ، تم إنشاء رأس لوصف مكونات الصورة التنفيذية . كما أُدرجت تعليمة تفرع كأول كلمة في الرأس لتجاوزه وبدء البرنامج. وبهذه الطريقة، يمكن تشغيل البرنامج في وضع مرجع الذاكرة القابل للنقل القديم (العادي) أو في وضع الصفحات. ومع تطوير المزيد من تنسيقات الملفات التنفيذية، أُضيفت ثوابت جديدة عن طريق زيادة إزاحة التفرع . [ 7 ]
في شفرة المصدر للإصدار السادس من مُحمِّل برامج يونكس، كانت الدالة exec() تقرأ صورة الملف التنفيذي ( الثنائي ) من نظام الملفات. كانت البايتات الثمانية الأولى من الملف عبارة عن رأس يحتوي على أحجام البرنامج (نص) ومساحات البيانات المُهيأة (العامة). كما تمت مقارنة الكلمة الأولى المكونة من 16 بت من الرأس بثابتين لتحديد ما إذا كانت صورة الملف التنفيذي تحتوي على مراجع ذاكرة قابلة للنقل (عادية)، أو صورة الملف التنفيذي للقراءة فقط المُجزأة إلى صفحات والمُنفذة حديثًا ، أو صورة مُجزأة إلى صفحات تحتوي على تعليمات وبيانات منفصلة. [ 8 ] لم يُذكر الدور المزدوج لثابت الرأس، ولكن البايت الأعلى من الثابت كان في الواقع رمز العملية لتعليمات التفرع في PDP-11 ( 000407 بالنظام الثماني أو 0107 بالنظام الست عشري ). أظهرت إضافة سبعة إلى عداد البرنامج أنه في حال تنفيذ هذا الثابت، فإنه سيُشغِّل خدمة exec() في يونكس على رأس صورة الملف التنفيذي المكون من ثمانية بايتات ويبدأ البرنامج.
بما أن الإصدارين السادس والسابع من يونكس استخدما ترميز الترحيل، فقد تم إخفاء الدور المزدوج لثابت الترويسة. بمعنى آخر، كانت خدمة exec() تقرأ بيانات ترويسة الملف التنفيذي ( البيانات الوصفية ) في مخزن مؤقت في مساحة النواة ، بينما تقرأ صورة الملف التنفيذي في مساحة المستخدم ، وبالتالي لم تستخدم ميزة التفرع الخاصة بالثابت. تم تنفيذ إنشاء الأرقام السحرية في رابط ومحمل يونكس ، وربما كان تفرع الأرقام السحرية لا يزال مستخدمًا في مجموعة برامج التشخيص المستقلة التي جاءت مع الإصدارين السادس والسابع. وهكذا، فقد وفر ثابت الترويسة وهمًا واستوفى معايير السحر .
في نظام يونكس الإصدار السابع، لم يتم اختبار ثابت الترويسة بشكل مباشر، بل تم تعيينه لمتغير يُسمى ux_mag [ 9 ] ، والذي عُرف لاحقًا باسم الرقم السحري . ولعلّ السبب في ذلك هو تفرّده، فقد أصبح مصطلح الرقم السحري يُشير إلى نوع تنسيق الملف التنفيذي، ثم توسّع ليشمل نوع نظام الملفات، ثم توسّع مرة أخرى ليشمل أي نوع من الملفات.
في الملفات
تُعدّ الأرقام السحرية شائعة في البرامج عبر العديد من أنظمة التشغيل. تُطبّق هذه الأرقام بيانات ذات أنواع محددة بدقة ، وهي بمثابة إشارة داخلية للبرنامج المتحكّم الذي يقرأ نوع (أنواع) البيانات أثناء تشغيل البرنامج. تحتوي العديد من الملفات على هذه الثوابت التي تُحدّد البيانات المُضمّنة فيها. يُعدّ اكتشاف هذه الثوابت في الملفات طريقة بسيطة وفعّالة للتمييز بين العديد من تنسيقات الملفات ، ويمكن أن يُوفّر معلومات إضافية أثناء التشغيل .
- أمثلة
- تبدأ ملفات فئات جافا المُجمّعة ( الرمز البايتي ) وملفات Mach-O الثنائية بالرمز السداسي العشري . عند ضغطها باستخدام Pack200، يتم تغيير البايتات إلى .
CA FE BA BECA FE D0 0D - تحتوي ملفات صور GIF على رمز ASCII لـ "GIF89a" ( ) أو "GIF87a" ( )
47 49 46 38 39 6147 49 46 38 37 61 - تبدأ ملفات صور JPEG بـ وتنتهي بـ . تحتوي ملفات JPEG/ JFIF على السلسلة المنتهية بـ "JFIF" ( ). تحتوي ملفات JPEG/ Exif على السلسلة المنتهية بـ "Exif" ( )، متبوعة ببيانات وصفية إضافية حول الملف.
FF D8FF D94A 46 49 46 0045 78 69 66 00 - تبدأ ملفات صور PNG بتوقيع مكون من 8 بايتات يُعرّف الملف كملف PNG ويسمح بالكشف عن مشاكل نقل الملفات الشائعة: "\211PNG\r\n\032\n" . يحتوي هذا التوقيع على أحرف سطر جديد متنوعة للكشف عن تحويلات الأسطر الجديدة التلقائية غير المبررة، مثل نقل الملف باستخدام بروتوكول نقل الملفات (FTP) بنمط نقل ASCII بدلاً من النمط الثنائي . [ 10 ]
89 50 4E 47 0D 0A 1A 0A - تحتوي ملفات الصوت MIDI القياسية على رمز ASCII لـ "MThd" ( رأس مسار MIDI ، ) متبوعًا بمزيد من البيانات الوصفية .
4D 54 68 64 - قد تبدأ البرامج النصية في أنظمة Unix أو Linux بـ shebang ("#!", ) متبوعًا بمسار المفسر ، إذا كان من المحتمل أن يكون المفسر مختلفًا عن المفسر الذي تم استدعاء البرنامج النصي منه.
23 21 - تبدأ الملفات التنفيذية بصيغة ELF بالبايت
7Fمتبوعًا بـ "ELF" ( ).7F 45 4C 46 - تبدأ ملفات وبرامج PostScript بـ "%!" ( ).
25 21 - تبدأ ملفات PDF بـ "%PDF" (سداسي عشري ).
25 50 44 46 - تبدأ ملفات DOS MZ التنفيذية وملف EXE الخاص بملفات Microsoft Windows PE (الملفات التنفيذية المحمولة) بالأحرف "MZ"، وهي الأحرف الأولى من اسم مصمم تنسيق الملف، مارك زبيكوفسكي . يسمح التعريف أيضًا باستخدام الأحرف "ZM" غير الشائعة لملف dosZMXP، وهو ملف تنفيذي غير PE. [ 11 ]
4D 5A5A 4D - يتم تحديد تنسيق الكتلة الفائقة لنظام الملفات السريع بيركلي إما على أنه أو اعتمادًا على الإصدار؛ وكلاهما يمثل تاريخ ميلاد المؤلف، مارشال كيرك ماكوسيك .
19 54 01 1901 19 54 - يحتوي سجل التمهيد الرئيسي لأجهزة التخزين القابلة للتمهيد على جميع أجهزة الكمبيوتر الشخصية المتوافقة مع IA-32 تقريبًا على رمز كآخر بايتين.
55 AA - تحتوي ملفات تشغيل أجهزة ألعاب الفيديو المحمولة Game Boy و Game Boy Advance على رقم سحري بحجم 48 بايت أو 156 بايت، على التوالي، في موضع ثابت في رأس الملف. يشفر هذا الرقم السحري صورة نقطية لشعار Nintendo .
- جميع ملفات Hunk القابلة للتنفيذ لبرامج Amiga التي تعمل على أجهزة Amiga الكلاسيكية 68000 تبدأ بالرقم السداسي العشري $000003f3، والذي يُطلق عليه اسم "Magic Cookie".
- في نظام Amiga، العنوان المطلق الوحيد في النظام هو hex $0000 0004 (موقع الذاكرة 4)، والذي يحتوي على موقع البداية المسمى SysBase، وهو مؤشر إلى exec.library، ما يسمى بنواة Amiga.
- تحتوي ملفات PEF ، المستخدمة بواسطة نظام التشغيل Mac OS الكلاسيكي و BeOS للملفات التنفيذية PowerPC ، على رمز ASCII لـ "Joy!" ( ) كبادئة.
4A 6F 79 21 - تبدأ ملفات TIFF إما بـ "II" أو "MM" متبوعةً بالرقم 42 كعدد صحيح ثنائي البايت بترتيب البايتات الصغير أو الكبير . يشير "II" إلى شركة إنتل، التي تستخدم ترتيب البايتات الصغير ، لذا فإن الرقم السحري هو 42. يشير "MM" إلى شركة موتورولا، التي تستخدم ترتيب البايتات الكبير ، لذا فإن الرقم السحري هو 42 .
49 49 2A 004D 4D 00 2A - تبدأ ملفات النصوص المشفرة بنظام UTF-16 عادةً بعلامة ترتيب البايتات (Byte Order Mark) لتحديد ترتيب البايتات ( Big Endian و Little Endian). أما في نظام التشغيل مايكروسوفت ويندوز ، فتبدأ ملفات النصوص المشفرة بنظام UTF-8 عادةً بترميز UTF-8 للحرف نفسه .
FE FFFF FEEF BB BF - تبدأ ملفات LLVM Bitcode بـ "BC" ( ).
42 43 - تبدأ ملفات WAD بـ "IWAD" أو "PWAD" (لعبة Doom )، و"WAD2" (لعبة Quake )، و"WAD3" (لعبة Half-Life ).
- تبدأ ملفات Microsoft Compound File Binary Format (المعروفة في الغالب بأنها واحدة من التنسيقات القديمة لمستندات Microsoft Office ) بـ ، وهو ما يوحي بصريًا بكلمة "DOCFILE0".
D0 CF 11 E0 - تظهر العناوين في ملفات ZIP غالبًا في محررات النصوص على شكل "PK♥♦" ( )، حيث "PK" هي الأحرف الأولى من اسم فيل كاتز ، مؤلف أداة ضغط DOS المسماة PKZIP .
50 4B 03 04 - تبدأ رؤوس الملفات في ملفات 7z بـ "7z" (الرقم السحري الكامل: ).
37 7A BC AF 27 1C
- كشف
يستطيع برنامج يونكس المساعد fileقراءة وتفسير الأرقام السحرية من الملفات، ويُسمى الملف المستخدم لتحليل المعلومات "الرقم السحري" . ويؤدي برنامج ويندوز المساعد TrID غرضًا مشابهًا.
في البروتوكولات
- أمثلة
- يستخدم بروتوكول OSCAR في AIM / ICQ ، حيث يضيف بادئة إلى الطلبات
2A. - في بروتوكول RFB المستخدم بواسطة VNC ، يبدأ العميل محادثته مع الخادم عن طريق إرسال "RFB" ( اختصارًا لـ "Remote Frame Buffer") متبوعًا برقم إصدار بروتوكول العميل.
52 46 42 - في بروتوكول SMB المستخدم بواسطة نظام التشغيل Microsoft Windows، يبدأ كل طلب SMB أو رد الخادم بـ ، أو في بداية طلب SMB.
FF 53 4D 42\xFFSMB - في بروتوكول MSRPC المستخدم في نظام التشغيل مايكروسوفت ويندوز، يبدأ كل طلب قائم على بروتوكول TCP بـ `<TCP>`
05في بداية الطلب (مما يمثل الإصدار 5 من Microsoft DCE/RPC)، متبوعًا مباشرةً بـ ` <TCP>00` أو `01<TCP>` للإصدار الفرعي. أما في طلبات MSRPC القائمة على بروتوكول UDP، فيكون البايت الأول دائمًا `<TCP>`04. - في واجهات COM و DCOM المُنسقة، والتي تُسمى OBJREFs ، تبدأ دائمًا بتسلسل البايت "MEOW" ( ). أما ملحقات تصحيح الأخطاء (المستخدمة لربط قنوات DCOM) فتُسبق بتسلسل البايت "MARB" ( ).
4D 45 4F 574D 41 52 42 - تبدأ طلبات متتبع BitTorrent غير المشفرة ببايت واحد يحتوي على القيمة
19التي تمثل طول الرأس، متبوعًا مباشرة بعبارة "بروتوكول BitTorrent" في موضع البايت 1. - تبدأ حركة بيانات eDonkey2000 / eMule ببايت واحد يُمثل إصدار العميل.
E3يُمثل حاليًا عميل eDonkey،C5ويُمثل eMule،D4ويُمثل eMule المضغوط. - تحتوي أول 4 بايتات من كتلة في سلسلة كتل بيتكوين على رقم سحري يُستخدم كمعرّف للشبكة. القيمة هي ، والتي تشير إلى الشبكة الرئيسية، بينما تشير إلى شبكة الاختبار.
D9 B4 BE F9DA B5 BF FA - تبدأ معاملات SSL دائمًا برسالة "مرحبًا بالعميل". يتكون نظام تغليف السجلات المستخدم كبادئة لجميع حزم SSL من صيغ رأسية ثنائية وثلاثية البايت. عادةً ما تُسبق رسالة "مرحبًا بالعميل" في الإصدار 2 من SSL بـ `<client hello>`، بينما
80تبدأ استجابة خادم SSLv3 لرسالة "مرحبًا بالعميل" بـ `<client hello>`16(مع العلم أن هذا قد يختلف). - تستخدم حزم بروتوكول DHCP قيمة "ملف تعريف ارتباط سحري" في بداية قسم الخيارات الخاص بالحزمة. وتُضمّن هذه القيمة في جميع أنواع حزم بروتوكول DHCP.
63 82 53 63 - تبدأ اتصالات HTTP/2 بسلسلة مكونة من 24 حرفًا . وقد صُممت لتجنب معالجة الإطارات بواسطة الخوادم والوسطاء الذين يدعمون إصدارات سابقة من HTTP ولكن ليس الإصدار 2.0.
PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n - تستخدم عملية المصافحة الافتتاحية لـ WebSocket سلسلة تحتوي على UUIDv4
258EAFA5-E914-47DA-95CA-C5AB0DC85B11.
في الواجهات
تُعد الأرقام السحرية شائعة في وظائف وواجهات برمجة التطبيقات (API) عبر العديد من أنظمة التشغيل ، بما في ذلك DOS و Windows و NetWare :
- أمثلة
- تستخدم أنظمة BIOS المتوافقة مع أجهزة IBM PC قيمًا سحرية لتحديد ما إذا كان النظام سيحسب استهلاك الذاكرة عند إعادة التشغيل، وبالتالي إجراء عملية تمهيد باردة أو دافئة. كما تستخدم هذه القيم أيضًا من قبل مديري ذاكرة EMM386 لاعتراض طلبات التمهيد. [ 12 ] وتستخدم أنظمة BIOS أيضًا قيمًا سحرية لتحديد ما إذا كان القرص قابلاً للتمهيد. [ 13 ]
00 0012 3455 AA - يستخدم برنامج التخزين المؤقت للقرص في نظام التشغيل MS -DOS، SMARTDRV (الذي يحمل الاسم الرمزي "بامبي")، قيمًا سحرية ووظائف واجهة برمجة التطبيقات. [ 12 ]
BA BEEB AB - تستخدم العديد من برامج تشغيل DR-DOS و Novell DOS و OpenDOS، التي طُوّرت في مركز التطوير الأوروبي السابق في المملكة المتحدة، هذه القيمة كرمز سحري عند استدعاء أو توفير وظائف إضافية تعمل فوق وظائف DOS القياسية (المحاكاة)، ويُعد NWCACHE مثالًا على ذلك. [ 12 ]
0E DC
استخدامات أخرى
- أمثلة
المعرف الفريد العالمي (GUID)
من الممكن إنشاء أو تعديل المعرّفات الفريدة عالميًا (GUIDs) لتسهيل تذكرها، ولكن يُنصح بشدة بتجنب ذلك لأنه يُضعف من قوتها كمعرّفات شبه فريدة. [ 15 ] [ 16 ] تُعدّ مواصفات إنشاء المعرّفات الفريدة عالميًا (GUIDs) والمعرّفات الفريدة عالميًا (UUIDs) معقدة للغاية، وهذا ما يجعلها فريدة فعليًا، إذا تم تنفيذها بشكل صحيح. [ 17 ]
أحيانًا تنتهي أرقام تعريف منتجات Microsoft Windows لمنتجات Microsoft Office0000-0000-0000000FF1CE بـ ("OFFICE")، مثل 90160000-008C-0000-0000-0000000FF1CE، معرف المنتج لـ "Office 16 Click-to-Run Extensibility Component".
تستخدم لغة جافا العديد من المعرفات الفريدة العامة (GUIDs) التي تبدأ بـ CAFEEFAC. [ 18 ]
في جدول تقسيم GUID الخاص بنظام تقسيم GPT، تستخدم أقسام تمهيد BIOS معرّف GUID خاصًا 21686148-6449-6E6F-744E-656564454649[ 19 ] لا يتبع تعريف GUID؛ بل يتم تكوينه باستخدام رموز ASCII للسلسلة Hah!IdontNeedEFIجزئيًا بترتيب النهاية الصغرى . [ 20 ]
قيمة التصحيح
قيم تصحيح الأخطاء السحرية هي قيم محددة تُكتب في الذاكرة أثناء تخصيصها أو تحريرها، بحيث يُمكن لاحقًا تحديد ما إذا كانت قد تعرضت للتلف أم لا، ولتوضيح استخدام القيم المأخوذة من ذاكرة غير مهيأة. عادةً ما تُعرض الذاكرة بالنظام الست عشري، لذا فإن القيم المتكررة أو ذات اللغة الست عشرية شائعة. قد يُفضل استخدام القيم الفردية حتى تتعطل المعالجات التي لا تدعم عنونة البايت عند محاولة استخدامها كمؤشرات (والتي يجب أن تقع في عناوين زوجية). ينبغي اختيار قيم بعيدة عن العناوين المحتملة (كود البرنامج، البيانات الثابتة، بيانات الكومة، أو المكدس). وبالمثل، يمكن اختيارها بحيث لا تكون رموزًا صالحة في مجموعة التعليمات الخاصة بالبنية المعمارية المحددة.
بما أنه من غير المرجح، وإن كان ممكناً، أن يأخذ عدد صحيح 32 بت هذه القيمة المحددة، فإن ظهور مثل هذا الرقم في مصحح الأخطاء أو تفريغ الذاكرة يشير على الأرجح إلى خطأ مثل تجاوز سعة المخزن المؤقت أو متغير غير مهيأ .
ومن الأمثلة الشهيرة والشائعة ما يلي:
| شفرة | وصف |
|---|---|
00008123 | يُستخدم في MS Visual C++. تُعيّن المؤشرات المحذوفة إلى هذه القيمة، لذا تُثير استثناءً عند استخدامها لاحقًا؛ وهو اسم بديل أكثر شيوعًا للعنوان صفر. يتم تفعيله باستخدام خيار دورة حياة تطوير الأمان (/sdl). [ 21 ] |
..FACADE | "الواجهة" ، تستخدمها العديد من أنظمة التشغيل في الوقت الحقيقي . |
1BADB002 | "1 فشل في الإقلاع" ، الرقم السحري لرأس Multiboot . [ 22 ] |
8BADF00D | يشير "تناول طعامًا فاسدًا" إلى أنه تم إنهاء تطبيق Apple iOS بسبب انتهاء مهلة مراقبة النظام. [ 23 ] |
A5A5A5A5 | يستخدم في تطوير الأنظمة المدمجة لأن نمط البتات المتناوب (1010 0101) يخلق نمطًا يسهل التعرف عليه على راسمات الذبذبات ومحللات المنطق . |
A5 | يستخدم في PHK malloc(3) الخاص بـ FreeBSD لتصحيح الأخطاء عندما يتم ربط /etc/malloc.conf بـ "-J" لتهيئة جميع الذاكرة المخصصة حديثًا لأن هذه القيمة ليست مؤشرًا فارغًا أو حرف ASCII NUL. |
ABABABAB | تستخدمها وظيفة تصحيح الأخطاء HeapAlloc() من مايكروسوفت لتمييز بايتات الحماية "المنطقة غير المخصصة" بعد تخصيص ذاكرة الكومة. [ 24 ] |
ABADBABE | "فتاة سيئة" ، تستخدمها شركة آبل كرقم سحري "كتلة التمهيد الصفرية". |
ABBABABE | " ABBA babe" ، مستخدمة بواسطة برنامج التشغيل: Parallel Lines في كومة الذاكرة. |
ABADCAFE | "مقهى سيئ" ، يستخدم لتهيئة جميع الذاكرة غير المخصصة (Mungwall، AmigaOS ). |
B16B00B5 | "Big Boobs" ، كان هذا المصطلح مطلوبًا سابقًا من قبل برنامج Hyper-V التابع لشركة مايكروسوفت لاستخدامه من قبل أنظمة لينكس الضيفة كالجزء العلوي من "معرف الضيف" الخاص بها. [ 25 ] |
BAADF00D | "طعام فاسد" ، يستخدمه برنامج تصحيح الأخطاء HeapAlloc() من مايكروسوفت لتمييز ذاكرة الكومة المخصصة غير المهيأة. [ 24 ] |
BAAAAAAD | يشير مصطلح "Baaaaaad" إلى أن سجل نظام التشغيل iOS من Apple هو لقطة مكدس للنظام بأكمله، وليس تقريرًا عن عطل. [ 23 ] |
BAD22222 | يشير مصطلح "سيئ بشكل متكرر" إلى أنه تم إنهاء تطبيق VoIP الخاص بنظام iOS من Apple بسبب استئنافه بشكل متكرر للغاية. [ 23 ] |
BADBADBADBAD | "سيء سيء سيء سيء" ، ذاكرة "غير مهيأة" من شركة Burroughs Large Systems (كلمات 48 بت). |
BADC0FFEE0DDF00D | "قهوة سيئة طعام غريب" ، يستخدم في أنظمة IBM RS/6000 ذات 64 بت للإشارة إلى سجلات وحدة المعالجة المركزية غير المهيأة. |
BADDCAFE | يشير "Bad cafe" في نظام التشغيل Solaris من شركة Sun Microsystems إلى ذاكرة النواة غير المهيأة (KMEM_UNINITIALIZED_PATTERN). |
BBADBEEF | "لحم بقري فاسد" ، مستخدم في WebKit ، للأخطاء التي يصعب إصلاحها بشكل خاص. [ 26 ] |
BEBEBEBE | يستخدمه برنامج AddressSanitizer لملء الذاكرة المخصصة ولكن غير المهيأة. [ 27 ] |
BEEFCACE | "كعكة اللحم البقري" ، يستخدمها Microsoft .NET كرقم سحري في ملفات الموارد. |
C00010FF | يشير مصطلح "Cool off" إلى أن نظام التشغيل قد أغلق تطبيق Apple iOS استجابةً لحدث حراري. [ 23 ] |
CAFEBABE | "Cafe babe" ، يستخدمها جافا لملفات الفئات. يستخدم في ملفات Mach-O الثنائية متعددة البنية . |
CAFED00D | "Cafe dude" ، يستخدمه جافا لضغط ملفات pack200 . |
CAFEFEED | "Cafe feed" ، يستخدم بواسطة نواة تصحيح أخطاء Solaris الخاصة بشركة Sun Microsystems لتمييز الذاكرة kmemfree(). |
CCCCCCCC | يُستخدم هذا الرمز بواسطة مكتبة وقت تشغيل تصحيح أخطاء لغة C++ من مايكروسوفت والعديد من بيئات DOS لتمييز ذاكرة المكدسCC غير المهيأة. وهو رمز العملية لمقاطعة نقطة توقف التصحيح INT 3 على معالجات x86. [ 28 ] |
CDCDCDCD | تستخدمها وظيفة تصحيح الأخطاء malloc() الخاصة بـ Microsoft C/C++ لتمييز ذاكرة الكومة غير المهيأة، وعادة ما يتم إرجاعها من HeapAlloc. [ 24 ] |
0D15EA5E | "مرض الصفر" ، يستخدم كعلامة للإشارة إلى التشغيل العادي على أجهزة GameCube و Wii . |
DDDDDDDD | يستخدمها برنامج SmartHeap من MicroQuill ووظيفة free() الخاصة بتصحيح أخطاء لغة C/C++ من Microsoft لتمييز ذاكرة الكومة المحررة. [ 24 ] |
DEAD10CC | يشير مصطلح "التعطل التام" إلى أن تطبيقًا من تطبيقات Apple iOS قد تم إنهاؤه لأنه احتفظ بمورد من موارد النظام أثناء تشغيله في الخلفية. [ 23 ] |
DEADBABE | "Dead babe" ، مستخدمة في بداية ملفات IRIX arena الخاصة بشركة Silicon Graphics . |
DEADBEEF | يُستخدم مصطلح "Dead beef" (اللحم الميت) بشكل شائع في أنظمة IBM مثل RS/6000 ، كما يُستخدم في أنظمة التشغيل الكلاسيكية Mac OS و OPENSTEP Enterprise و Commodore Amiga . في نظام Solaris من Sun Microsystems ، يُشير إلى تحرير ذاكرة النواة (KMEM_FREE_PATTERN). |
DEADCAFE | "مقهى مهجور" ، يستخدمه Microsoft .NET كرقم خطأ في ملفات DLL . |
DEADC0DE | "Dead code" ، يستخدم كعلامة في البرامج الثابتة OpenWRT للإشارة إلى بداية نظام الملفات jffs2 الذي سيتم إنشاؤه في نهاية البرامج الثابتة الثابتة. |
DEADFA11 | يشير مصطلح "فشل تام" إلى أن المستخدم قد أجبر تطبيقًا من تطبيقات نظام التشغيل iOS من Apple على إغلاقه قسرًا. [ 23 ] |
DEADF00D | "الطعام الميت" ، استخدمه مونغوال على جهاز كومودور أميغا لتمييز الذاكرة المخصصة ولكن غير المهيأة. [ 29 ] |
DEFEC8ED | "Defecated" ، يستخدم لملفات تفريغ الذاكرة الأساسية لنظام OpenSolaris . |
DEADDEAD | يشير مصطلح "Dead Dead" إلى أن المستخدم قد بدأ عمداً عملية تفريغ بيانات الأعطال إما من مصحح أخطاء النواة أو من لوحة المفاتيح في نظام التشغيل مايكروسوفت ويندوز. [ 30 ] |
D00D2BAD | "يا رجل، هذا مؤسف للغاية"، يستخدمه متصفح سفاري ويتسبب في تعطل نظام التشغيل macOS Big Sur. [ 31 ] |
D00DF33D | "Dude feed"، يستخدمه devicetree لتمييز بداية الرؤوس. [ 32 ] |
EBEBEBEB | من برنامج SmartHeap التابع لشركة MicroQuill. |
FADEDEAD | "Fade dead" ، تأتي في النهاية لتحديد كل نص برمجي AppleScript . |
FDFDFDFD | تستخدمها دالة malloc() الخاصة بتصحيح أخطاء لغة C/C++ من مايكروسوفت لتمييز بايتات الحماية "المنطقة غير المخصصة" قبل وبعد تخصيص ذاكرة الكومة، [ 24 ] وبعض دوال تصحيح أخطاء Secure C-Runtime التي نفذتها مايكروسوفت (مثل strncat_s). [ 33 ] |
FEE1DEAD | "Feel dead" ، يستخدم بواسطة استدعاء النظام reboot() في نظام Linux . |
FEEDFACE | "Feed face" ، يظهر في ملفات Mach-O الثنائية على منصة Mac OSX من شركة Apple Inc. أما على نظام Solaris من شركة Sun Microsystems ، فيشير إلى المنطقة الحمراء (KMEM_REDZONE_PATTERN). يستخدم مشغل VLC وبعض كاميرات IP بروتوكول RTP / RTCP لإرسال أربعة بايتات بترتيب البايتات الخاص بالنظام. تتوقع بعض كاميرات IP أن يرسل المشغل هذا الرقم السحري، ولن تبدأ البث إذا لم يتم استلامه. |
FEEEFEEE | "Fee fee" ، يستخدمها برنامج تصحيح الأخطاء HeapFree() من مايكروسوفت لتمييز ذاكرة الكومة المحررة. قد تحتوي بعض قيم التتبع الداخلية المجاورة على الكلمة العليا مضبوطة على FEEE أيضًا. [ 24 ] |
معظم هذه البيانات يبلغ طولها 32 بت - وهو حجم الكلمة لمعظم أجهزة الكمبيوتر ذات بنية 32 بت.
إن شيوع هذه القيم في تقنية مايكروسوفت ليس من قبيل الصدفة؛ فقد نوقشت بالتفصيل في كتاب ستيف ماغواير " كتابة كود متين" الصادر عن دار نشر مايكروسوفت . ويقدم مجموعة متنوعة من المعايير لهذه القيم، مثل:
- لا ينبغي أن تكون هذه الأرقام مفيدة؛ أي أنه من المتوقع أن تقوم معظم الخوارزميات التي تعمل عليها بشيء غير مألوف. أرقام مثل الصفر لا تنطبق عليها هذه المعايير.
- ينبغي أن يتمكن المبرمج من التعرف عليها بسهولة كقيم غير صالحة في مصحح الأخطاء.
- في الأجهزة التي لا تحتوي على محاذاة البايت ، يجب أن تكون أرقامًا فردية ، بحيث يؤدي فك مرجعيتها كعناوين إلى حدوث استثناء.
- ينبغي أن تتسبب في حدوث استثناء، أو ربما حتى توقف برنامج تصحيح الأخطاء، إذا تم تنفيذها ككود برمجي.
وبما أنها كانت تستخدم في كثير من الأحيان لتمييز مناطق الذاكرة التي كانت فارغة بشكل أساسي، فقد تم استخدام بعض هذه المصطلحات في عبارات تعني "ذهب، تم إجهاضه، تم مسحه من الذاكرة"؛ على سبيل المثال "برنامجك ميت تمامًا".
انظر أيضاً
- قيمة الكناري – تقنيات أمان البرمجيات: صفحات تعرض أوصافًا مختصرة لأهداف إعادة التوجيه
- النوع المُعدّد – مجموعة مُسمّاة من قيم أنواع البيانات
- خوارزمية إيجاد الجذر التربيعي العكسي السريع
- الرقم السحري – بنية المعلومات المخزنة على جهاز الكمبيوتر
- FourCC – مُعرِّف لنوع ملف
- البرمجة الثابتة – وضع البيانات في شفرة المصدر للبرنامج
- هيكس سبيك – شكل جديد من أشكال التهجئة الإنجليزية البديلة
- قائمة توقيعات الملفات
- السحر (البرمجة) - مصطلح يشير إلى التجريد في برمجة الحاسوب
- سلسلة سحرية – مدخلات تُفعّل وظائف مخفية.
- NaN – قيمة للبيانات غير القابلة للتمثيل
- رقم لا يحتوي على أي أسرار - رقم تشفير بدون خصائص مخفية. صفحات تعرض أوصافًا مختصرة لأهداف إعادة التوجيه.
- قيمة الحارس – قيمة بيانات مضمنة يجب معالجتها بشكل خاص بواسطة كود الكمبيوتر
- أخطاء تنسيق الوقت وتخزينه – فئة من أخطاء البرامج
- XYZZY (كلمة سحرية) – مصطلح في مجال الحوسبة: صفحات تعرض أوصافًا مختصرة لأهداف إعادة التوجيه
مراجع
- 1 2 3 مارتن ، روبرت سي. (2009). "الفصل 17: الروائح والأساليب الاستدلالية - G25 استبدال الأرقام السحرية بالثوابت المسماة". الكود النظيف - دليل لحرفية البرمجيات الرشيقة . بوسطن: برنتيس هول. ص 300. ISBN 978-0-13-235088-4.
- ↑ مارتن ، روبرت سي. (2009). "الفصل 17: الروائح والأساليب الاستدلالية - G16 النية الخفية". الكود النظيف - دليل لمهارة تطوير البرمجيات الرشيقة . بوسطن: برنتيس هول. ص 295. ISBN 978-0-13-235088-4.
- ↑ ماغواير، جيمس (9 ديسمبر 2008). "بيارن ستروستروب يتحدث عن تعليم مطوري البرمجيات" . Datamation.com . مؤرشف من الأصل بتاريخ 23 يونيو 2018.
- ↑ فوغل، جيف (29 مايو 2007). "ست طرق لكتابة كود أكثر قابلية للفهم" . مطورو IBM . مؤرشف من الأصل في 26 سبتمبر 2018.
- ١ ٢ ٣ ٤ ٥ ٦ بول، ماتياس ر. (٢٠٠٢-٠٤-٠٩). " [ fd-dev ] كيوت ماوس ٢.٠ ألفا ١" . freedos-dev . مؤرشف من الأصل في ٢٠٢٢-٠٤-٠٧ . تم الاسترجاع في ٢٠٢٢-٠٨-٠٤ .
- ↑ "تعليقات غريبة وأفعال عجيبة في نظام يونكس" . مختبرات بيل . 22-06-2002. مؤرشف من الأصل في 04-11-2006.
- ↑ اتصال شخصي مع دينيس م. ريتشي.
- ↑ "The Unix Tree V6/usr/sys/ken/sys1.c" . جمعية تراث يونكس . مؤرشف من الأصل بتاريخ 26-03-2023.
- ↑ "The Unix Tree V7/usr/sys/sys/sys1.c" . جمعية تراث يونكس . مؤرشف من الأصل بتاريخ 26-03-2023.
- ↑ "مواصفات PNG (رسومات الشبكة المحمولة) الإصدار 1.0: 12.11. توقيع ملف PNG" . معهد ماساتشوستس للتكنولوجيا . 1996-10-01. مؤرشف من الأصل في 2023-03-26.
- ↑ تشين، ريموند (24 مارس 2008). "ما الفرق بين امتدادي COM و EXE؟" . . الشيء القديم الجديد . مؤرشف من الأصل في 18 فبراير 2019.
- 1 2 3 بول، ماتياس ر. (2002-04-03). " [ fd-dev ] Ctrl+Alt+Del" . freedos-dev . مؤرشف من الأصل في 2017-05-10 . تم الاسترجاع في 2017-09-09 .(ملاحظة: يذكر عددًا من القيم السحرية المستخدمة بواسطة أنظمة BIOS المتوافقة مع IBM PC (0000h، 1234h)، ومديري ذاكرة DOS مثل EMM386 (1234h)، وذاكرة التخزين المؤقت للقرص مثل SMARTDRV (EBABh، BABEh) وNWCACHE (0EDCh، EBABh، 6756h).)
- ↑ "عملية إقلاع BIOS/MBR" . قاعدة معارف NeoSmart . 25-01-2015. مؤرشف من الأصل في 26-03-2023 . تم الاطلاع عليه في 03-02-2019 .
- ↑ "مجتمع TI E2E: هل يعلم أحدٌ ما إذا كان بالإمكان إجراء التكوينات التالية باستخدام أداة MCP CLI؟" . شركة تكساس إنسترومنتس . 27 أغسطس 2011. مؤرشف من الأصل بتاريخ 7 أكتوبر 2022.
- ↑ نيومر، جوزيف م. (13 أكتوبر 2001). "إدارة الرسائل: ضمان التفرد" . ديفيلوبر فيوجن . مؤرشف من الأصل في 21 أبريل 2005. تم الاطلاع عليه في 16 نوفمبر 2007 .
- ↑ أوسترمان، لاري (21 يوليو 2005). "معرّفات UUID فريدة فقط إذا قمت بإنشائها..." مدونة لاري أوسترمان - اعترافات رجل عجوز . MSDN. مؤرشف من الأصل في 28 مارس 2023. تم الاطلاع عليه في 16 نوفمبر 2007 .
- ↑ "RFC 9562 - المعرفات الفريدة عالميًا (UUIDs)" . ietf.org . مايو 2024. تم الاطلاع عليه بتاريخ 9 أغسطس 2024 .
- ↑ "نشر تطبيقات جافا المصغّرة باستخدام إصدارات JRE العائلية في إضافة جافا لمتصفح إنترنت إكسبلورر" . أوراكل . مؤرشف من الأصل بتاريخ 30 نوفمبر 2022. تم الاطلاع عليه بتاريخ 28 مارس 2023 .
- ↑ "تثبيت GNU GRUB، القسم 3.4: تثبيت BIOS" . Gnu.org . مؤرشف من الأصل بتاريخ 15-03-2023 . تم الاطلاع عليه بتاريخ 26-06-2014 .
- ↑ هيدينغز، لويل (2014-11-03). "الأرقام السحرية: الرموز السرية التي يخفيها المبرمجون في جهاز الكمبيوتر الخاص بك" . How-To Geek . مؤرشف من الأصل في 2023-03-26 . تم الاسترجاع في 2017-10-03 .
- ↑ كافيت، دوغ (24 أبريل 2012). "الحماية من إعادة استخدام مراجع الكائنات القديمة" . مايكروسوفت سكيور . مؤرشف من الأصل في 26 يوليو 2018. تم الاطلاع عليه في 26 يوليو 2018 .
- ↑ بولين، إريك ستيفان (4 أبريل 1995). "تعليقات على مقترح 'معيار الإقلاع المتعدد'" . Uruk.org . مؤرشف من الأصل بتاريخ 26 مارس 2023.
- ١ ٢ ٣ ٤ ٥ ٦ "ملاحظة فنية TN2151: فهم وتحليل تقارير أعطال التطبيقات" . وثائق مطوري Apple . ٢٠٠٩-٠١-٢٩. مؤرشفة من الأصل في ٢٠١٨-١٢-١٣.
- 1 2 3 4 5 6 بيركيت، أندرو. "Win32 Debug CRT Heap Internals" . Nobugs.org .
- ↑ ماكنمارا، بول (19 يوليو 2012). "يحتوي كود مايكروسوفت على عبارة 'صدور كبيرة'... نعم، حقًا" . عالم الشبكات .
- ↑ WebKit ، مشروع WebKit مفتوح المصدر، 2023-01-06 ، تم الاطلاع عليه بتاريخ 2023-01-06
- ↑ "AddressSanitizer - الأسئلة الشائعة" . GitHub . تم الاطلاع عليه بتاريخ 18-05-2022 .
- ↑ "دليل مرجعي لمبرمج معالج إنتل 80386" . معهد ماساتشوستس للتكنولوجيا .
- ↑ شيبنر، كارولين. "دليل بريد أميغا، المجلد الثاني" . Cataclysm.cx . مؤرشف من الأصل بتاريخ 18 يوليو 2011. تم الاطلاع عليه بتاريخ 20 أغسطس 2010 .
- ↑ "خطأ فحص النظام 0xDEADDEAD MANUALLY_INITIATED_CRASH1" . وثائق مايكروسوفت . 19-06-2023.
- ↑ "توقف برنامج Safari الإصدار 14.0.1 بشكل غير متوقع" .
- ↑ "مواصفات شجرة الجهاز" .
- ↑ "strncat_s, _strncat_s_l, wcsncat_s, _wcsncat_s_l, _mbsncat_s, _mbsncat_s_l" . وثائق مايكروسوفت . تم الاطلاع بتاريخ 16 يناير 2019 .
- الأنماط المضادة
- تصحيح الأخطاء
- حكايات شعبية عن برمجة الحاسوب
- حكايات شعبية في هندسة البرمجيات
