קומפילציה היא פעולה חד כיוונית ברובה, והיא לא דטרמיניסטית, לפחות לא בצורה חזקה.
אתה יכול להדור מחדש את קוד המקור ובדוק אם הוא מניב את אותו בינארי. עם זאת, הבינארי המדויק יכול להשתנות בהתאם להרבה פרמטרים, כולל אפשרויות הקומפילציה והגרסה המדויקת של המהדר המשומש. יתר על כן, כמה מהדרים משבצים כמה "הערות" בקבצים בינאריים, הערות הכוללות בדרך כלל את גרסת המהדר אך גם עשויות לכלול את "מספר הבנייה" (אם מספר כזה נשמר) ואולי גם תאריך ובזמן הבנייה - בכך במקרה, אתה לא תקבל את אותו בינארי, לא עד הבית האחרון. אם ברצונך לראות אם קיבלת את אותו "בינארי", ייתכן שיהיה עליך להסיר אותם תחילה מהערות כאלה (הפקודה Unix רצועה
עשויה להיות שימושית).
בהחלט אם כבר מדברים, אוסף יכול להיות אקראי; מכיוון שיצירת קוד אופטימלי היא בעיה קשה, ישנם מהדרים המשתמשים באלגוריתמים אקראיים אשר היוריסטית הם טובים בממוצע. מהדר כזה יכול ליצור כל פעם בינארי מובהק. מכיוון שהתנהגות כזו מקשה על ניפוי באגים הרבה יותר, מהדרים רבים אשר מתמכרים לאלגוריתמים היוריסטיים עדיין ינסו להיות ניתנים לשחזור (כלומר הם יקבלו את האקראיות שלהם מ- PRNG שזרע ערך ספציפי הניתן להגדרה).
יש פיתרון הרבה יותר פשוט: אם יש לך את קוד המקור ואתה יכול לקמפל אותו מחדש, פשוט השתמש בפלט של שלך אוסף מחדש.
כמובן, זה לא פותר לחלוטין את בעיית האמון; זה פשוט מסובב את זה. בעת הידור ממקור:
- אתה צריך לסמוך על כך ש קוד המקור אינו מכיל דלתות אחוריות;
- עליך לסמוך על המהדר עצמו עבור לא משחק עליך טריקים מגעילים.
לפחות, מקור המקור ניתן לקריאה נומינלית על ידי בני אדם (זו הנקודה של קוד המקור), כך שתוכל לבצע ניתוח כלשהו של הקוד על ידי קריאתו (או קריאתו על ידי מומחה כלשהו שאתה סומך עליו). אין דרך ידועה לוודא כי פיסת קוד נתונה אינה מכילה דלת אחורית או פגיעות (אחרת, פירוש הדבר שידענו כיצד לייצר קוד ללא באגים); עם זאת, הרבה יותר קשה להסתיר דלת אחורית בקוד המקור מאשר בינארי מקומפל.
באשר למהדר, עיין ב מאמר קלאסי מאוד זה.