זוהי הפקודה dpkg-buildflags שניתן להריץ בספק האירוח החינמי של OnWorks באמצעות אחת מתחנות העבודה המקוונות החינמיות שלנו כגון Ubuntu Online, Fedora Online, אמולטור מקוון של Windows או אמולטור מקוון של MAC OS.
תָכְנִית:
שֵׁם
dpkg-buildflags - מחזירה דגלי בנייה לשימוש במהלך בניית החבילה
תַקצִיר
dpkg-buildflags [אוֹפְּצִיָה...] [הפקודה]
תיאור
dpkg-buildflags הוא כלי לאחזור דגלי קומפילציה לשימוש במהלך בניית דביאן
חבילות. דגלי ברירת המחדל מוגדרים על ידי הספק אך ניתן להרחיב/לעקוף אותם
בכמה דרכים:
1. כלל-מערכתית עם /etc/dpkg/buildflags.conf;
2. עבור המשתמש הנוכחי עם $XDG_CONFIG_HOME/dpkg/buildflags.conf איפה
$XDG_CONFIG_HOME ברירת מחדל ל $HOME/.config;
3. באופן זמני על ידי המשתמש עם משתני סביבה (ראה סעיף הסביבה);
4. באופן דינמי על ידי מתחזק החבילה עם משתני סביבה המוגדרים דרך
דביאן/כללים (ראה סעיף הסביבה).
קבצי התצורה יכולים להכיל שני סוגים של הנחיות:
SET דגל ערך
עקוף את הדגל ששמו דגל לקבל את הערך ערך.
לְהִתְפַּשֵׁט דגל ערך
פס מהדגל ששמו דגל כל דגלי הבנייה המפורטים ב ערך.
הוסף דגל ערך
הרחב את הדגל ששמו דגל על ידי הוספת האפשרויות שניתנו ב ערךרווח הוא
נוסף לערך המצורף אם הערך הנוכחי של הדגל אינו ריק.
הוסף לפני דגל ערך
הרחב את הדגל ששמו דגל על ידי הוספת האפשרויות שניתנו ב ערךרווח הוא
נוסף לערך שהוסיף את הדגל אם הערך הנוכחי של הדגל אינו ריק.
קבצי התצורה יכולים להכיל הערות על שורות המתחילות בסימן גיבוב (#). ריק
גם קווים מתעלמים מהם.
פקודות
--מזבלה הדפס לפלט סטנדרטי את כל דגלי הקומפילציה ואת הערכים שלהם. זה מדפיס דגל אחד
לכל שורה מופרד מערכה על ידי סימן שוויון ("דגל=ערך"). זהו ה-
פעולת ברירת מחדל.
--רשימה הדפס את רשימת הדגלים הנתמכים על ידי הספק הנוכחי (אחד בכל שורה). ראה את
נתמך דגלים סעיף לקבלת מידע נוסף עליהם.
--סטָטוּס
הצג כל מידע שיכול להיות שימושי להסבר ההתנהגות של
dpkg-buildflags (מאז dpkg 1.16.5): משתני סביבה רלוונטיים, נוכחי
ספק, מצב כל דגלי התכונות. הדפס גם את דגלי המהדר שנוצרו עם
מוצאם.
זה נועד להתנהל מ דביאן/כללים, כך שיומן הבנייה ישמור על מידע ברור
עקבות של דגלי הבנייה שבהם נעשה שימוש. זה יכול להיות שימושי לאבחון בעיות הקשורות ל-
אותם.
--ייצוא=פוּרמָט
הדפס לפקודות פלט סטנדרטיות בהן ניתן להשתמש כדי לייצא את כל הקומפילציה
דגלים עבור כלי מסוים. אם ה- פוּרמָט ערך לא ניתן, sh מניחים.
רק דגלי קומפילציה המתחילים באות גדולה כלולים, אחרים
מניחים שאינם מתאימים לסביבה. פורמטים נתמכים:
sh פקודות מעטפת להגדרה ויצוא של כל דגלי הקומפילציה ב-
סביבה. ערכי הדגל מופיעים בציטוטים כך שהפלט מוכן ל
הערכה על ידי קליפה.
קו ס"מ
ארגומנטים שיש להעביר לשורת הפקודה של תוכנית בנייה כדי להשתמש בכל ה-
דגלי קומפילציה (מאז dpkg 1.17.0). ערכי הדגלים מצוטטים במעטפת
תחביר.
להגדיר
זהו כינוי מורשת עבור קו ס"מ.
לעשות צור הנחיות להגדרה ויצוא של כל דגלי הקומפילציה ב-
סביבה. ניתן לכתוב את הפלט לקטע makefile ולנתח אותו
באמצעות לכלול הוראה.
--לקבל דגל
הדפס את ערך הדגל בפלט הסטנדרטי. יוצא עם 0 אם הדגל ידוע
אחרת יוצא עם 1.
--מָקוֹר דגל
הדפס את מקור הערך המוחזר על ידי --לקבליוצא עם 0 אם הדגל
ידוע אחרת יוצא עם 1. נקודת המוצא יכולה להיות אחת מהערכים הבאים:
מוכר הדגל המקורי שנקבע על ידי הספק מוחזר;
מערכת הדגל נקבע/משתנה על ידי תצורה כלל-מערכתית;
המשתמש הדגל מוגדר/משונה על ידי תצורה ספציפית למשתמש;
env הדגל מוגדר/משונה על ידי תצורה ספציפית לסביבה.
--תכונות-שאילתה אזור
הדפס את התכונות הזמינות עבור אזור נתון (מאז dpkg 1.16.2). היחיד
התחומים המוכרים כיום בדביאן ובנגזרים מהם הם qa, לשחזור, לטהר
ו התקשות, ראה FEATURE שטחים סעיף לפרטים נוספים. יוצא עם 0 אם ה-
השטח ידוע אחרת יוצא עם 1.
הפלט הוא בפורמט RFC822, עם מקטע אחד לכל תכונה. לדוגמה:
תכונה: פאי
מופעל: לא
תכונה: מגן מחסנית
מופעל: כן
- עזרה הצג את הודעת השימוש וצא.
--גִרְסָה
הצג את הגרסה וצא.
נתמך דגלים
CFLAGS אפשרויות עבור מהדר C. ערך ברירת המחדל שנקבע על ידי הספק כולל -g ו
רמת אופטימיזציה ברירת מחדל (-O2 בדרך כלל, או -O0 אם DEB_BUILD_OPTIONS
משתנה סביבתי מגדיר לא).
CPPFLAGS
אפשרויות עבור קדם-מעבד C. ערך ברירת מחדל: ריק.
CXXFLAGS
אפשרויות עבור המהדר של C++. זהה ל CFLAGS.
דגלי OBJC
אפשרויות עבור המהדר של Objective C. זהה ל CFLAGS.
דגלי OBJCXX
אפשרויות עבור המהדר של Objective C++. זהה ל CXXFLAGS.
GCJFLAGS
אפשרויות עבור מהדר ג'אווה של גנו (gcj). תת-קבוצה של CFLAGS.
דגלים אפשרויות עבור המהדר של Fortran 77. תת-קבוצה של CFLAGS.
FCFLAGS
אפשרויות עבור המהדר של Fortran 9x. זהה ל- דגלים.
LDFLAGS
אפשרויות המועברות למהדר בעת קישור קבצי הרצה או אובייקטים משותפים (אם ה-
המקשר נקרא ישירות, לאחר מכן -וול ו , יש להסירם מהאפשרויות הללו).
ערך ברירת מחדל: ריק.
דגלים חדשים עשויים להתווסף בעתיד אם יעלה הצורך (לדוגמה, כדי לתמוך באחרים)
שפות).
FEATURE שטחים
ניתן להפעיל ולהשבית כל תכונה באזור DEB_BUILD_OPTIONS ו
DEB_BUILD_MAINT_OPTIONS ערך השטח של משתנה הסביבה עם ה-'+'ו'-' משנה.
לדוגמה, כדי לאפשר את התקשות תכונת "פאי" והשבתת תכונת "חיזוק"
יכול לעשות את זה ב דביאן/כללים:
ייצוא DEB_BUILD_MAINT_OPTIONS=הקשחה=+עוגה,-ביצור
התכונה המיוחדת את כל (תקף בכל אזור) ניתן להשתמש בו כדי להפעיל או להשבית את כל האזורים
תכונות בו זמנית. ובכך משביתים את כל מה שיש ב התקשות אזור ומאפשר
רק "עיצוב" ו"חיזוק" ניתנים להשגה באמצעות:
ייצוא DEB_BUILD_MAINT_OPTIONS=הקשחה=-הכל,+פורמט,+חיזוק
qa
ניתן להשתמש במספר אפשרויות בזמן קומפילציה (מפורטות בהמשך) כדי לסייע בזיהוי בעיות ב-
קוד מקור או מערכת בנייה.
באג הגדרה זו (מושבת כברירת מחדל) מוסיפה כל אפשרות אזהרה שמזהה באופן אמין
קוד מקור בעייתי. האזהרות קטלניות.
כנרית הגדרה זו (מושבת כברירת מחדל) מוסיפה אפשרויות קנריות דמה לדגלי הבנייה, כך
שניתן לבדוק את יומני הבנייה כדי לוודא כיצד דגלי הבנייה מתפשטים ולאפשר
מציאת השמטה של הגדרות דגל בנייה רגילות. היחיד הנתמך כרגע
הדגלים הם CPPFLAGS, CFLAGS, דגלי OBJC, CXXFLAGS ו דגלי OBJCXX עם דגלים מוגדרים ל
-D__DEB_CANARY_דגל_מזהה אקראי__, ו LDFLAGS מכוון ל -וול,-ז,דב-קנרי-מזהה אקראי.
לטהר
ניתן להשתמש במספר אפשרויות בזמן קומפילציה (מפורטות בהמשך) כדי לסייע בניקוי תוצאה
בינארי נגד השחתות זיכרון, דליפות זיכרון, שימוש לאחר שחרור, מרוצי נתונים בהשראת שרשור ו
באגי התנהגות לא מוגדרים.
כתובת
הגדרה זו (מושבת כברירת מחדל) מוסיפה -fsanitize=כתובת ל LDFLAGS ו
-fsanitize=כתובת -fno-omit-frame-pointer ל CFLAGS ו CXXFLAGS.
חוט הגדרה זו (מושבת כברירת מחדל) מוסיפה -fsanitize=חוט ל CFLAGS, CXXFLAGS ו
LDFLAGS.
לדלוף הגדרה זו (מושבת כברירת מחדל) מוסיפה -fsanitize=דליפה ל LDFLAGSזה נהיה
מושבת אוטומטית אם אחד מה- כתובת או חוט תכונות מופעלות, כפי
הם רומזים על כך.
לא מוגדר
הגדרה זו (מושבת כברירת מחדל) מוסיפה -fsanitize=לא מוגדר ל CFLAGS, CXXFLAGS
ו LDFLAGS.
התקשות
ניתן להשתמש במספר אפשרויות בזמן קומפילציה (מפורטות בהמשך) כדי לסייע בהקשחת תוצאה
בינארי נגד התקפות פגיעה בזיכרון, או לספק הודעות אזהרה נוספות במהלך
קומפילציה. למעט כפי שצוין להלן, אלה מופעלים כברירת מחדל עבור ארכיטקטורות אשר
לתמוך בהם.
פוּרמָט הגדרה זו (מופעלת כברירת מחדל) מוסיפה - -שגיאה=פורמט-אבטחה ל CFLAGS,
CXXFLAGS, דגלי OBJC ו דגלי OBJCXXפעולה זו תזהיר מפני מחרוזת בפורמט לא תקין
שימושים, ויכשל כאשר פונקציות עיצוב משמשות באופן המייצג אפשרי
בעיות אבטחה. נכון לעכשיו, זה מזהיר מפני שיחות אל הדפס ו scanf פונקציות
כאשר מחרוזת הפורמט אינה ליטרלית מחרוזת ואין ארגומנטים של פורמט,
כמו ב הדפס (foo); במקום הדפס("%s", פו); ייתכן שזו פרצת אבטחה אם
מחרוזת הפורמט הגיעה מקלט לא אמין ומכילה '%n'.
לְחַזֵק
הגדרה זו (מופעלת כברירת מחדל) מוסיפה -D_FORTIFY_SOURCE=2 ל CPPFLAGSבמהלך קוד
דור זה, המהדר יודע מידע רב על גדלי מאגר (כאשר
אפשרי), ומנסה להחליף קריאות פונקציית מאגר לא מאובטחות באורך בלתי מוגבל
עם קוד מוגבל באורך. זה שימושי במיוחד עבור קוד ישן ומלוכלך.
בנוסף, מחרוזות עיצוב בזיכרון הניתן לכתיבה המכילות '%n' חסומות. אם
יישום תלוי במחרוזת פורמט כזו, יהיה צורך לעקוף אותה.
שים לב שכדי שאפשרות זו תשפיע, יש לקמפל גם את הקוד המקורי עם
-O1 או גבוה יותר. אם משתנה הסביבה DEB_BUILD_OPTIONS מכיל לא, לאחר מכן
לְחַזֵק התמיכה תושבת, עקב אזהרות חדשות שפורסמו על ידי glibc 2.16
ואחר כך.
מגן מחסנית
הגדרה זו (מופעלת כברירת מחדל אם stackprotectorstrong אינו בשימוש) מוסיפה
-מגן מחסנית --param=ssp-buffer-size=4 ל CFLAGS, CXXFLAGS, דגלי OBJC,
דגלי OBJCXX, GCJFLAGS, דגלים ו FCFLAGSזה מוסיף בדיקות בטיחות כנגד מחסנית
דורס. זה גורם להרבה התקפות הזרקת קוד פוטנציאליות להפסקה
מצבים. במקרה הטוב, זה הופך פגיעויות הזרקת קוד לדחייה.
של שירות או לבעיות שאינן קשורות (בהתאם ליישום).
תכונה זו דורשת קישור מול glibc (או ספק אחר של
__stack_chk_fail), לכן יש להשבית אותו בעת בנייה עם -נוסטדליב or
-עומד בפני עצמו או דומה.
מגן מחסנית חזק
הגדרה זו (מופעלת כברירת מחדל) מוסיפה -fstack-protector-חזק ל CFLAGS,
CXXFLAGS, דגלי OBJC, דגלי OBJCXX, GCJFLAGS, דגלים ו FCFLAGSזה חזק יותר
גרסה של מגן מחסנית, אך ללא פגיעות ביצועים משמעותיות.
משבית מגן מחסנית יבטל גם הגדרה זו.
לתכונה זו יש אותן דרישות כמו מגן מחסנית, ובנוסף גם
דורש gcc 4.9 ואילך.
relro הגדרה זו (מופעלת כברירת מחדל) מוסיפה -Wl,-z,relro ל LDFLAGSבמהלך התוכנית
טעינה, המקשר צריך לכתוב למספר מקטעי זיכרון ELF. זה מדגיש
הטוען להפוך את הקטעים הללו לקריאה בלבד לפני העברת השליטה אליהם
תוכנית. באופן בולט ביותר, זה מונע התקפות כתיבה חוזרת של GOT. אם אפשרות זו מופעלת
נָכֶה, בינדנו יהפוך גם הוא לנכה.
בינדנו
הגדרה זו (מושבת כברירת מחדל) מוסיפה -Wl,-z,עכשיו ל LDFLAGSבמהלך טעינת התוכנית,
כל הסמלים הדינמיים נפתרו, מה שמאפשר לסמן את כל ה-PLT כקריאה
רק (בגלל relro לעיל). האפשרות לא יכולה להיות מופעלת אם relro לא
מאופשר.
פאי הגדרה זו (מושבת כברירת מחדל) מוסיפה -fPIE ל CFLAGS, CXXFLAGS, דגלי OBJC,
דגלי OBJCXX, GCJFLAGS, דגלים ו FCFLAGS, ו -fPIE -פַּאִי ל LDFLAGS. עמדה
נדרשים קבצי הפעלה עצמאיים כדי לנצל את פריסת מרחב הכתובות
אקראיות, נתמכת על ידי חלק מגרסאות הליבה. בעוד ש-ASLR כבר יכול להיות
נאכף עבור אזורי נתונים במחסנית ובערימה (brk ו-mmap), אזורי הקוד חייבים להיות
ניתן לקמפל אותם ללא תלות במיקום. ספריות משותפות כבר עושות זאת (-fPIC), כך
הם מקבלים ASLR באופן אוטומטי, אבל אזורי טקסט בינאריים צריכים להיבנות ב-PIE כדי לקבל
ASLR. כאשר זה קורה, התקפות ROP (תכנות החזרה) קשות הרבה יותר.
מכיוון שאין מיקומים סטטיים שניתן להקפץ מהם במהלך פגיעה בזיכרון
לִתְקוֹף.
זה לא תואם ל -fPIC לכן יש לנקוט משנה זהירות בעת בניית מבנה משותף
חפצים.
בנוסף, מכיוון ש-PIE מיושם באמצעות אוגר כללי, חלק מהארכיטקטורות
(בעיקר i386) יכול לראות אובדן ביצועים של עד 15% בקטעי טקסט מאוד-
עומסי עבודה כבדים של יישומים; רוב עומסי העבודה רואים פחות מ-1%. ארכיטקטורות עם
רישומים כלליים יותר (למשל amd64) לא רואים עונש גבוה כל כך במקרה הגרוע ביותר.
לשחזור
ניתן להשתמש באפשרויות זמן הקומפילציה המפורטות להלן כדי לשפר את יכולת השחזור של הבנייה.
או לספק הודעות אזהרה נוספות במהלך הקומפילציה. למעט כפי שצוין להלן, אלה
מופעלים כברירת מחדל עבור ארכיטקטורות התומכות בהם.
נצחי
הגדרה זו (מופעלת כברירת מחדל) מוסיפה -Wdate-time ל CPPFLAGS. זה יגרום
אזהרות כאשר ה- __זְמַן__, __תַאֲרִיך__ ו __חותמת זמן__ נעשה שימוש בפקודות מאקרו.
הסביבה
ישנן שתי קבוצות של משתני סביבה המבצעות את אותן פעולות, הראשונה
(DEB_דגל_op) לעולם אין להשתמש בתוך דביאן/כלליםזה מיועד לכל משתמש שרוצה
לבנות מחדש את חבילת המקור עם דגלי בנייה שונים. הקבוצה השנייה
(DEB_דגל_MAINT_op) יש להשתמש בו רק ב דביאן/כללים על ידי מתחזקי החבילה כדי לשנות
דגלי הבנייה שהתקבלו.
DEB_דגל_מַעֲרֶכֶת
DEB_דגל_MAINT_SET
ניתן להשתמש במשתנה זה כדי לאלץ את הערך המוחזר עבור הנתון דגל.
DEB_דגל_לְהִתְפַּשֵׁט
DEB_דגל_MAINT_STRIP
ניתן להשתמש במשתנה זה כדי לספק רשימה מופרדת ברווחים של אפשרויות שיהיו
הוסר מקבוצת הדגלים שהוחזרה עבור הנתון דגל.
DEB_דגל_לְצַרֵף
DEB_דגל_MAINT_APPEND
ניתן להשתמש במשתנה זה כדי להוסיף אפשרויות משלימות לערך המוחזר עבור
הנתון דגל.
DEB_דגל_הוסף לפני
DEB_דגל_MAINT_PREPEND
ניתן להשתמש במשתנה זה כדי להוסיף אפשרויות משלימות לערך המוחזר
על הנתון דגל.
DEB_BUILD_OPTIONS
DEB_BUILD_MAINT_OPTIONS
משתנים אלה יכולים לשמש משתמש או מתחזק כדי להשבית/להפעיל אזורים שונים
תכונות המשפיעות על דגלי בנייה. DEB_BUILD_MAINT_OPTIONS עקיפות משתנות
כל הגדרה ב- DEB_BUILD_OPTIONS אזורי תכונה. ראה את FEATURE שטחים סעיף
לקבלת פרטים.
השתמש ב-dpkg-buildflags באופן מקוון באמצעות שירותי onworks.net