זוהי הפקודה frama-c.byte שניתן להריץ בספק האירוח החינמי של OnWorks באמצעות אחת מתחנות העבודה המקוונות המרובות שלנו, כגון Ubuntu Online, Fedora Online, אמולטור מקוון של Windows או אמולטור מקוון של MAC OS
תָכְנִית:
שֵׁם
frama-c[.byte] - מנתח סטטי עבור תוכניות C
frama-c-gui[.byte] - הממשק הגרפי של frama-c
תַקצִיר
frama-c [ אפשרויות ] קבצים
תיאור
frama-c היא חבילת כלים המוקדשת לניתוח קוד המקור שנכתב ב-C. It
אוסף מספר טכניקות ניתוח סטטי במסגרת שיתופית אחת. זֶה
ניתן להרחיב את המסגרת על ידי תוספים נוספים המוצבים ב- $FRAMAC_PLUGIN במדריך.
הפקודה
frama-c -עזרה
יספק את הרשימה המלאה של התוספים המותקנים כעת.
frama-c-gui הוא ממשק המשתמש הגרפי של frama-c. הוא כולל את אותן אפשרויות כמו
גרסת שורת הפקודה.
frama-c.byte ו frama-c-gui.byte הן גרסאות ה-ocaml bytecode של שורת הפקודה ו
ממשק משתמש גרפי בהתאמה.
כברירת מחדל, Frama-C מזהה .c קבצים כקבצי C הזקוקים לעיבוד מקדים ו .i קבצים כ
קבצי C כבר עברו עיבוד מראש. תוספים מסוימים עשויים להרחיב את רשימת המוכרים
קבצים. ניתן להתאים עיבוד מקדים דרך ה -cpp-פקודה ו -cpp-extra-args
אפשרויות.
אפשרויות
תחביר
אפשרויות שלוקחים פרמטר נוסף ניתן לכתוב גם מתחת לטופס
-אוֹפְּצִיָה=להפסיק
אפשרות זו היא חובה כאשר להפסיק מתחיל במקף ('-')
לרוב האפשרויות שאינן לוקחות פרמטר מקביל
-לא-אוֹפְּצִיָה
אפשרות שיש לה השפעה הפוכה.
עֶזרָה אפשרויות
עזרה נותן הודעת שימוש קצרה ואת רשימת התוספים המותקנים.
-קרנל-עזרה
מדפיס את רשימת האפשרויות המוכרות על ידי הליבה של Frama-C
-שורש n
מגדיר רמת מילוליות (ברירת המחדל היא 1). הגדרתו ל-0 תפיק פחות התקדמות
הודעות. ניתן להגדיר רמה זו גם על פר חיבור בסיס, עם אופציה -חיבור-
מִלוּלִי n. ניתן לשלוט ברמת המלל של הליבה עם אפשרות
-קרנל-רבות n.
-לנפות n
מגדיר רמת ניפוי באגים (ברירת המחדל היא 0, כלומר אין הודעות איתור באגים). אפשרות זו
יש את אותה התמחויות לכל תוסף (ולקרנל) כמו -שורש.
-שֶׁקֶט מגדיר את רמת המילוליות ואת רמת ניפוי הבאגים ל-0.
אפשרויות שליטה של Frama-C גרעין
-טווח חוקי-מוחלט
סבור שכל הכתובות המספריות בטווח מינימום מקסימום תקפים. גבולות הם
מנותח כקבועים שלמים של ocaml. כברירת מחדל, כל הכתובות המספריות הן
נחשב לא חוקי.
-הוסף-נתיב p1[,p2[...,pn]]
מוסיף ספריות דרך לרשימת הספריות שבהן יש תוספים
חיפש
[-לא]-לאפשר-כפילות
מאפשר שכפול של בלוקים קטנים במהלך נורמליזציה של בדיקות ולולאות.
אחרת, נורמליזציה השתמש בתוויות וב-gotos. בלוקים גדולים יותר ובלוקים עם לא-
זרימת בקרה טריוויאלית לעולם אינה משוכפלת. ברירת המחדל היא כן.
[-לא]-לא
קורא הערת ACSL. זוהי ברירת המחדל. ההערות אינן מעובדות מראש על ידי
בְּרִירַת מֶחדָל. להשתמש -pp-annot בשביל זה.
-ביג-ints-hex מקסימום
מספרים שלמים גדולים מ מקסימום מוצגים בהקסדצימלי (כברירת מחדל, כל המספרים השלמים הם
מוצג בעשרוני)
-חשבון מבצע בדיקות תקינות ב-AST הפנימי (למפתחים בלבד).
[-לא]-התמוטטות-קריאה-קאסט
מאפשר השלכה מרומזת בין הערך המוחזר על ידי פונקציה לבין ה-lvalue שהוא
שהוקצה ל. אחרת, נעשה שימוש במשתנה זמני והקאסט נעשה מפורש.
ברירת המחדל היא כן.
[-לא]-constfold
מקפל את כל הביטויים הקבועים תחבירית בקוד לפני ניתוחים. ברירות מחדל
לא.
[-לא]-המשך-שגיאה
בעת ניתוח הערה, התנהגות ברירת המחדל (ה -לא גרסה של אפשרות זו)
כאשר מתרחשת שגיאת בדיקת טיפוס היא לדחות את קובץ המקור כפי שקורה עבור
שגיאות בדיקת סוג בתוך קוד C. עם אפשרות זו מופעלת, בודק הסוג יעשה זאת
רק פלט אזהרה ובטל את ההערה אבל בדיקת הסוג תימשך
(אם כי שגיאות בקוד C עדיין קטלניות).
-cpp-פקודה cmd
אתה משתמש cmd בתור הפקודה לעיבוד מקדים של קבצי C. ברירת מחדל ל- CPP סביבה
משתנה או ל
gcc -C -E -I.
אם הוא לא מוגדר. על מנת לשמר הערות ACSL, על המעבד המקדים לשמור
הערות (ה -C אפשרות עבור gcc). %1 ו %2 ניתן להשתמש ב cmd כדי לציין את
קובץ המקור המקורי והקובץ המעובד מראש בהתאמה
-cpp-extra-args טוען
נותן טיעונים נוספים למעבד הקדם. זה שימושי רק כאשר
-preprocess-annot מוגדר. עיבוד מוקדם של הערות נעשה בשני קדם-
שלבי עיבוד. הראשון הוא מעבר רגיל על קוד C ששומר על מאקרו
הגדרות. אלה משמשים לאחר מכן במעבר השני שבמהלכו ההערות
מעובד מראש. טוען משמשים רק עבור המעבר הראשון, כך הטיעונים כי
אין להשתמש פעמיים (כגון הנחיות כוללות נוספות או מאקרו
הגדרות) חייב אפוא ללכת לשם במקום -cpp-פקודה.
[-לא]-dynlink
כאשר פועל, טען את כל התוספים הדינמיים שנמצאו בנתיב החיפוש (ראה -תוסף-הדפסה-
נתיב למידע נוסף על נתיב החיפוש המוגדר כברירת מחדל). אחרת, רק תוספים
התבקש על ידי -עומס-מודולים ייטען. התנהגות ברירת המחדל מופעלת.
-מספרים נציג
בחר את האופן שבו ייצוג הטיפוסים המצוינים ייקבע. frama-c
-מספרים לעזור נותן את רשימת האפשרויות הזמינות. ברירת המחדל היא gcc-enums
-צף-ספרות n
בעת הפלט של מספרי נקודה צפה, הצג n ספרות. ברירת המחדל היא 12.
-צף-שטוף-לאפס
פעולות נקודה צפה שוטפות לאפס
-צף-הקס
הצג מצופים כהקסדצימליים
-צף-נורמלי
מצופים לתצוגה עם שגרת Ocaml סטנדרטית
-צף-קרוב
הצג מרווח צף בתור [ חסם תחתון++רוחב ]
[-לא]-force-rl-arg-eval
מאלץ סדר הערכה מימין לשמאל עבור ארגומנטים של קריאות לפונקציה. אחרת
סדר ההערכה נותר לא מוגדר, כמו בתקן C. ברירת המחדל היא לא.
-journal-disable
אל תוציא יומן של הפגישה הנוכחית. לִרְאוֹת -אפשרות יומן.
-אפשרות יומן
פועל כברירת מחדל, משליך יומן של כל הפעולות שבוצעו במהלך הנוכחי
סשן Frama-C בצורה של סקריפט ocaml שניתן לשחק איתו מחדש -לִטעוֹן-
תסריט. ניתן להגדיר את שם התסריט באמצעות ה- -שם-יומן אוֹפְּצִיָה.
-שם-יומן שם
הגדר את שם קובץ היומן (ללא .ml סיומת). ברירת מחדל ל
frama_c_journal.
-אתחול-ריפוד-מקומיים
אתחול מרומז של מקומיים מגדיר את סיביות הריפוד ל-0. אם לא נכון, סיביות ריפוד
נותרו ללא אתחול (ברירת המחדל היא כן).
[-לא]-שמור-הערות
מנסה לשמר הערות בעת הדפסת יפה של קוד המקור (ברירת המחדל היא לא).
[-לא]-לשמור-מתג
מתי -לפשט-cfg מוגדר, שומר על הצהרות מתג. ברירת המחדל היא לא.
-לשמור-unused-specificated-functions
לִרְאוֹת -הסר פונקציות שצוינו שאינן בשימוש
[-no]-lib-entry
מציין שנקודת הכניסה נקראת במהלך ביצוע התוכנית. זה מרמז ב
במיוחד שלא ניתן להניח שלמשתנים גלובליים יש את הערכים ההתחלתיים שלהם.
ברירת המחדל היא -אין כניסת ליב: נקודת הכניסה היא גם נקודת ההתחלה של
לתוכנית ולגלובלים יש את הערך הראשוני שלהם.
- טען פילה
טען את המצב (שנשמר בעבר) הכלול ב פילה.
-עומס-מודול m1[,m2[...,mn]]
טוען את מודולי ocaml דרך . מודולים אלה חייבים להיות .cmxsקבצים עבור
גרסת קוד מקורית של Frama-c ו .cmoor.cmaקבצים עבור גרסת bytecode (ראה
סעיף Dynlink במדריך של Ocaml למידע נוסף). כל המודולים שהם
נתיבי החיפוש הקיימים בתוסף נטענים אוטומטית.
-טען-סקריפט s1[,s2,[...,sn]]
טוען את הסקריפטים של ocaml דרך . התסריטים חייבים להיות .mlקבצים. הֵם
חייב להיות בר קומפילציה בהסתמך רק על הספרייה הסטנדרטית של Ocaml ועל ה-API של Frama-C. אם
יש צורך באיזשהו שלב קומפילציה מותאם אישית, הידור אותם מחוץ ל-Frama-C והשתמש
-עומס-מודול במקום.
-מאדפ מכונה
שימושים מכונה בתור התצורה הנוכחית התלויה במכונה (גודל השונות
סוגי מספרים שלמים, סופיות, ...). רשימת המכונות הנתמכות כעת היא
זמין דרך -מאדפ לעזור אוֹפְּצִיָה. ברירת המחדל היא x86_32
-רָאשִׁי f
סטים f כנקודת הכניסה של הניתוח. ברירת המחדל היא 'ראשית'. כברירת מחדל, זה כן
נחשבת כנקודת המוצא של התוכנית הנבדקת. להשתמש -כניסה-lib if f
אמור להיקרא באמצע הוצאה להורג.
-לְעַרְפֵּל
מדפיס גרסה מעורפלת של הקוד (כאשר המזהים המקוריים מוחלפים
על ידי חסר משמעות) ויוצא. טבלת ההתאמה בין מקורי לחדש
סמלים נשמרים בתחילת התוצאה.
-ocode פילה
מפנה קוד מודפס יפה אל פילה במקום פלט רגיל.
[-לא]-שם-מקור
במהלך שלב הנורמליזציה, שמות משתנים מסוימים עשויים להשתנות כאשר הם שונים
משתנה בעל אותו שם יכול להתקיים במקביל (למשל משתנה גלובלי ופורמלי
פָּרָמֶטֶר). כאשר אפשרות זו מופעלת, מודפסת הודעה בכל פעם שזה מתרחש.
ברירת המחדל היא לא.
[-לא]-להזהיר-חתום-הורדה
ליצור אזעקות כאשר הורדות חתומות עשויות לחרוג מטווח היעד (ברירת מחדל ל
לֹא).
[-לא]-להזהיר-חתום-הצפת
ליצור אזעקות עבור פעולות חתומות שעולות על גדותיה (ברירת המחדל היא כן).
[-לא]-להזהיר-לא חתום-הורדה
ליצור אזעקות כאשר הורדות לא חתומות עשויות לחרוג מטווח היעד (ברירת מחדל
לא).
[-לא]-להזהיר-לא חתום-על הצפת
ליצור אזעקות עבור פעולות לא חתומות שעולות על גדותיהן (ברירת המחדל היא לא).
[-לא]-pp-annot
הערות לפני תהליך. זה אפשרי כרגע רק בעת שימוש ב-gcc (או GNU
cpp) מראש מעבד. ברירת המחדל היא לא לעבד הערות מראש.
[-לא]-הדפס
pretty-מדפיס את קוד המקור כמנורמל על ידי CIL (ברירת המחדל היא לא).
-print-libpath
מפלט את הספרייה שבה מותקנת ספריית הליבה של Frama-C
-הדפס-נתיב
כינוי של -הדפס-שיתוף-נתיב
-הדפס-תוסף-נתיב
מפלט את הספרייה שבה Frama-C מחפש את התוספים שלה (ניתן לעקוף את ה-
FRAMAC_PLUGIN משתנה ו -הוסף-נתיב אוֹפְּצִיָה)
-הדפס-שיתוף-נתיב
מפלט את הספרייה שבה Frama-C מאחסנת את הנתונים שלה (ניתן לעקוף את ה-
FRAMAC_SHARE מִשְׁתַנֶה)
-הסר פונקציות שצוינו שאינן בשימוש
שומר על אבות טיפוס של פונקציות שיש להם מפרט ACSL אך אינם בשימוש ב-
קוד. זוהי ברירת המחדל. פונקציות בעלות התכונה FRAMAC_BUILTIN תמיד
שמר.
-מערכים בטוחים
עבור מערכים רב מימדיים או מערכים שהם שדות בתוך מבנים , הנחה זאת
כל הגישה חייבת להיות קשורה (מוגדרת כברירת מחדל). האפשרות ההפוכה היא -מְסוּכָּן-
מערכים
-לשמור פילה
מציל את המצב של Frama-C לתוך פילה לאחר ביצוע ניתוחים.
[-לא]-לפשט-cfg
מסיר הצהרת הפסקה, המשך והחלפה לפני ניתוחים. ברירת המחדל היא לא.
-לאחר מכן מאפשר לחבר ניתוחים: הפעלה ראשונה של Frama-C תתרחש עם האפשרויות
לפני -לאחר מכן ותעשה ריצה שנייה עם האפשרויות לאחר מכן -לאחר מכן על
הפרויקט הנוכחי מההפעלה הראשונה.
-ואילך prj
דומה -לאחר מכן אלא שהריצה השנייה מתבצעת בפרויקט prj אם אין כזה
הפרויקט קיים, Frama-C יוצא עם שגיאה.
-time פילה
מוסיף זמן ותאריך של המשתמש בנתון פילה כאשר Frama-C יוצא.
-בדיקת סוג
מאלץ בדיקת סוגים של קבצי המקור. אפשרות זו רלוונטית רק אם לא עוד
ניתוח מתבקש (כיוון שבדיקת סוגים תתרחש באופן מרומז לפני הניתוח
מושק).
-רמה n
לפתוח לולאות תחביריות n פעמים לפני הניתוח. זה יכול להיות די יקר
וכמה תוספים (למשל ניתוח הערך) מספקים דרכים יעילות יותר לביצוע
אותו הדבר. עיין במדריכים המתאימים למידע נוסף. זה יכול גם
להיות מופעל על בסיס לולאה באמצעות לולאה פרגמה לְגוֹלֵל הוֹרָאָה. א
ערך שלילי עבור n יעכב פרגמות כאלה.
[-לא]-unicode
מפלט נוסחאות ACSL עם תווי utf8. זוהי ברירת המחדל. כאשר ניתן את ה
-ללא יוניקוד אפשרות, Frama-C תשתמש בגרסת ASCII במקום זאת. עיין במדריך ACSL
עבור ההתכתבות.
-מערכים לא בטוחים
לִרְאוֹת -מערכים בטוחים
[-לא]-גישה לא מוגדרת
בודק שגישות קריאה/כתיבה מתרחשות בסדר לא מוגדר (על פי ה-C
המושג של תקן של נקודת רצף) מבוצעים במקומות נפרדים. עם
-אין-לא-מוגדר-גישה, מניח שזה תמיד המצב (זו ברירת המחדל).
-הפך
מפלט את מחרוזת הגרסה של Frama-C
-הזהיר-עשרוני-צף
מזהיר כאשר קבוע נקודה צפה לא ניתן לייצג במדויק (למשל 0.1).
יכול להיות אחד מ אף לא אחד, פעם, או את כל
[-לא]-להזהיר-לא-מוצהר
מזהיר כאשר פונקציה נקראת לפני שהוכרזה (מוגדר כברירת מחדל).
פרמה-סי
תוספים ספציפי אפשרויות
עבור כל חיבור, הפקודה
frama-c -חיבורעזרה
ייתן את רשימת האפשרויות הספציפיות לפלאגין.
יְצִיאָה סטָטוּס
0 ביצוע מוצלח
1 קלט משתמש לא חוקי
2 הפרעה למשתמש (הרג או שווה ערך)
3 תכונה לא מיושמת
4 5 6 שגיאה פנימית
125 שגיאה לא ידועה
סטטוס יציאה גדול מ-2 יכול להיחשב כבאג (או בקשת תכונה למקרה
של סטטוס יציאה 3) ועשוי להיות מדווח ב-BTS של Frama-C (ראה להלן).
הסביבה וריאציות
אפשר לשלוט במקומות שבהם Frama-C מחפשת את הקבצים שלה דרך ה-
המשתנים הבאים.
FRAMAC_LIB
הספרייה שבה מותקנים ממשקי ההידור של הקרנל
FRAMAC_PLUGIN
הספרייה שבה Frama-C יכולה למצוא תוספים סטנדרטיים. אם אתה רוצה תוספים
בכמה מקומות, השתמש -הוסף-נתיב במקום.
FRAMAC_SHARE
הספרייה שבה מותקנים נתוני Frama-C.
השתמש ב-frama-c.byte באינטרנט באמצעות שירותי onworks.net