BinaryVision

תכנות בטוח ב Windows

מאת בתאריך 15/05/09, תחת כללי

מי שעוקב אחרי חדשות טכנולוגיות ברשת, בוודאי שם לב ל http://www.theregister.co.uk/2009/05/15/microsoft_banishes_memcpy/
אז כן, אחרי שמיקרוסופט הגבילה (מנעה?) את השימוש בפונקציות strcpy, strcat ודומיהן, הגיע הזמן של memcpy.

אז מה הם בעצם עשו? הם החליפו את memcpy ב memcpy_s שזה בעצם פונקציה שמקבלת עוד פרמטר, גודל זכרון היעד, ומעתיקה זכרון בגודל של המינימום בין גודל זכרון היעד לבין גודל הזכרון שצריך להעתיק, ואז, היא קוראת ל memcpy (זה מימוש אפשרי, ובטח לא רחוק ממה שהם עושים, אם הבנתי אותי נכון).

אז בעצם, מה שמיקרוסופט אומרת, זה שהמפתחים בפלטפורמה שלהם לא יודעים לבדוק דברים טריויאלים כמו אם יש לנו מספיק מקום להעתיק, אז היא מכריחה אותם לבדוק?
אני מאמין שבקרוב נמצא ברשת קוד כזה:

#define memcpy(a,b,c) memcpy_s(a,b,c,c)

שהוא פשוט האק לגרום ל memcpy_s כמו שאנשים רגילים… מי שלא רוצה לעבוד בטוח, לא יעבוד בטוח, מתכנת לא מנוסה, יעשה שטויות.
מה היה רע ב warning בקומפילציה?

שלא תבינו אותי לא נכון, אני חושב שנכון לכתוב בטוח, אבל אני לא בטוח שלהכין את הקרקע לקופים שלא שעושים שטויות היא הדרך הכי טובה.
מה בקשר ל pritnf? הם גם מונעים את השימוש בזה? צריך לחשוש שאיזה אידיוט יכניס לשם מחרוזת… אולי צריך לכתוב
printf_s שאחראית להקפיץ שאלה בקומפילציה עבור כל printf וככה לוודא שהמתכנת וידא שהוא לא עשה טעות.

יש לי אלטרנטיבה אחרת, תשכרו מתכנתים שיודעים לתכנת… כי בסופו של יום גם memcpy_s לא בטוחה לגמרי…

יום טוב.

:, , ,
5 תגובות:
  1. Fate

    רגע, רגע…. אבל כבר יש שם גודל, לא?
    הם באמת חושבים שזה ימנע מאנשים לעשות:

    memcpy_s(dest_buffer,strlen(srcstr),srcstr,strlen(srcstr))
    
  2. TAsn

    זה בדיוק מה שאני אמרתי (סתכל על המאקרו) רק אני הנחתי שאת הגדלים הם ישימו בסוף, ואתה הנחת שכל אחד אחרי הגודל המתאים… 🙂

  3. spdr

    מתי שנתחיל לראות
    memcpy_s(a,b,c,c)
    נראה גם הרבה off-by-one 🙂

  4. חברת אבטחה

    וואו איזו תבנית בלוג יפה. היכן משיגים כזאת?

  5. Fate

    כתוב בתחתית הדף.

השאר תגובה

מחפש משהו?

תשתמש בטופס למטה כדי לחפש באתר: