---
css: home
layout: default
title: Frama-C
---

<body class="home page-template-default page page-id-7 nonTouch">
  <div id="wrapper" class="hfeed">

	{% include headers.html %}

    <div id="container" class="mainContainer">
      <div class="pageContent titleIn secure" id="content" role="main">
        <section class="section siteIntro fullScreen verticalFlex" id="intro_screen" data-title="SECURE">
          <div class="sectionContent">
            <h2 class="banner-title">Securing the future of your critical activities</h2>

            <p class="banner-desc">The Frama-C source code analysis platform provides tools to make your C/C++ code safer and more
            secure.</p><a class="btn cta-download" href="/html/get-frama-c.html"><span>Download <b>Frama-C</b><span><i class=
            "icon icon-curly-left"></i><i class="icon icon-download-arrow"></i><i class=
            "icon icon-curly-right"></i></span></span></a>
          </div>

          <div id="siteIntro_iv_point" class="inviewCenter"></div><a class="goDown" data-target="code_demo_screen" role=
          "button"><span>Get Started</span><i class="icon icon-arrow-thin-dwn"></i></a>
        </section>

        <section class="section codeDemoScreen textCenter" id="code_demo_screen" data-title="ERROR!">
          <div class="sectionContent">
            <h3>Overview of a Frama-C analysis for<br>
            a simple C program</h3>

            <div class="slideHeader">
              <h4>Browsing the analysis results with Frama-C</h4>

              <div id="home_code_swiper" class="tabSlider swiper-container">
                <div class="sliderWrapper swiper-wrapper">
                  <div class="swiper-slide">
                    <div role="button" class="slideTxt" target="tab_0">
                      <span>Interface Overview</span>
                    </div>
                  </div>

                  <div class="swiper-slide">
                    <div role="button" class="slideTxt" target="tab_1">
                      <span>Value Analysis</span>
                    </div>
                  </div>

                  <div class="swiper-slide">
                    <div role="button" class="slideTxt" target="tab_2">
                      <span>Effects Analysis</span>
                    </div>
                  </div>

                  <div class="swiper-slide">
                    <div role="button" class="slideTxt" target="tab_3">
                      <span>Dependency Analysis</span>
                    </div>
                  </div>

                  <div class="swiper-slide">
                    <div role="button" class="slideTxt" target="tab_4">
                      <span>Impact Analysis</span>
                    </div>
                  </div>
                </div>

                <div class="swiper-button-prev"></div>

                <div class="swiper-button-next"></div>
              </div>
            </div>

            <div class="codeDemoBlock">
              <div id="home_code_detail_swiper" class="swiper-container">
                <div class="swiper-wrapper">
                  <div class="swiper-slide">
                    <div class="codeTips">
                      <div class="title">
                        <b>01</b><span>This command-line creates an analysis project for file <samp>first.c</samp>.</span>
                      </div>

                      <div class="title">
                        <b>02</b><span>Option <samp>-eva</samp> runs the Eva plug-in and prepares its
                        results.</span>
                      </div>

                      <div class="title">
                        <b>03</b><span>Option <tt>-slevel 10</tt> is one of several options that influence the precision of the
                        value analysis.</span>
                      </div>
                    </div>

                    <div class="notebook code">
                      <div>
                        <div class="codeScreen">
                          <div class="codeTab tab-demo">
                            <div style="background: #202020; overflow:auto;width:auto;border:solid transparent;">

                              <pre style="margin: 0; line-height: 125%; background: #202020;">
 <span style="color: #6ab825; font-weight: bold">int</span> <span style="color: #d0d0d0">S=</span><span style=
"color: #3677a9">0</span><span style="color: #d0d0d0">;</span>
 <span style="color: #6ab825; font-weight: bold">int</span> <span style="color: #d0d0d0">T[</span><span style=
"color: #3677a9">5</span><span style="color: #d0d0d0">];</span>
 <span style="color: #6ab825; font-weight: bold">int</span> <span style="color: #447fcf">main</span><span style=
"color: #d0d0d0">(</span><span style="color: #6ab825; font-weight: bold">void</span><span style="color: #d0d0d0">)<span class="arrowTooltip right"><span><span class="title"><b>03</b><span>Option <tt>-slevel 10</tt> is one of several options that influence the precision of the
value analysis.</span></span></span></span></span>
 <span style="color: #d0d0d0">{</span>
   <span class="highlight">int i;</span>
   <span style="color: #6ab825; font-weight: bold">int</span> <span style="color: #d0d0d0">*p</span> <span style=
"color: #d0d0d0">=</span> <span style="color: #d0d0d0">&amp;T[</span><span style="color: #3677a9">0</span><span style=
"color: #d0d0d0">]</span> <span style="color: #d0d0d0">;</span>
   <span style="color: #6ab825; font-weight: bold">for</span> <span style="color: #d0d0d0">(i=</span><span style=
"color: #3677a9">0</span><span style="color: #d0d0d0">;</span> <span style="color: #d0d0d0">i&lt;</span><span style=
"color: #3677a9">5</span><span style="color: #d0d0d0">;</span> <span style="color: #d0d0d0">i++)</span>
     <span style="color: #d0d0d0">{</span> <span style="color: #d0d0d0">S</span> <span style="color: #d0d0d0">=</span> <span style=
"color: #d0d0d0">S+i;</span> <span style="color: #d0d0d0">*p++</span> <span style="color: #d0d0d0">=</span> <span style=
"color: #d0d0d0">S;</span> <span style="color: #d0d0d0">}</span>
   <span style="color: #6ab825; font-weight: bold">return</span> <span style="color: #d0d0d0">S;</span>
 <span style="color: #d0d0d0">}</span>

  <span style="color: #d0d0d0"><span class="arrowTooltip left"><span><span class=
"title"><b>01</b><span>This command-line creates an analysis project for file <samp>first.c</samp>.</span></span></span></span><u></u>frama-c-gui</span> <span style="color: #d0d0d0">-eva</span><span class="tooltip">2</span> <span style="color: #d0d0d0">-slevel</span> <span style="color: #3677a9">10<span class="tooltip">3</span></span> <span style="color: #d0d0d0">first.c</span><span class="tooltip">1</span><span class="arrowTooltip right"><span><span class="title"><b>02</b><span>Option <samp>-eva</samp> runs the Eva plug-in and prepares its results.</span></span></span></span><u></u>

</pre>
                            </div>
                          </div>
                        </div>
                      </div>
                    </div>
                  </div>

                  <div class="swiper-slide">
                    <div class="codeTips">
                      <div class="title">
                        <b>01</b><span>The Evolved Value Analysis (EVA) plug-in computes sets of possible values for every variable
                        at each point of the program.</span>
                      </div>

                      <div class="title">
                        <b>02</b><span>When the execution reaches the highlighted point inside the loop, the variable
                        <samp>S</samp> always contains either 0, 1, 3, or 6. Frama-C guarantees that it does not take any other
                        values at that point.</span>
                      </div>
                    </div>

                    <div class="notebook code">
                      <div>
                        <div class="codeScreen">
                          <div class="codeTab tab-demo">
                            <div style="background: #202020; overflow:auto;width:auto;border:solid transparent;">
                              <pre style="margin: 0; line-height: 125%; background: #202020;">
  <span style="color: #d0d0d0">i</span> <span style="color: #d0d0d0">=</span> <span style="color: #3677a9">0</span><span style=
"color: #d0d0d0">;</span>
  <span style="color: #6ab825; font-weight: bold">while</span> <span style="color: #d0d0d0">(i</span> <span style=
"color: #d0d0d0">&lt;</span> <span style="color: #3677a9">5</span><span style="color: #d0d0d0">)</span> <span style=
"color: #d0d0d0">{</span>
    <span style="color: #d0d0d0">{</span>
      <span style="color: #6ab825; font-weight: bold">int</span> <span style="color: #d0d0d0">*tmp;</span>
      <span class="arrowTooltip left"><span><span class=
"title"><b>01</b><span>The Evolved Value Analysis (EVA) plug-in computes sets of possible values for every variable at each point of the program.</span></span></span></span><u></u><span style="color: #d0d0d0"><span class="highlight">S<span class="tooltip">1</span></span></span> <span style="color: #d0d0d0">+=</span> <span style="color: #d0d0d0">i;</span>
    <span style="color: #d0d0d0">{</span> <span style="color: #999999; font-style: italic">/* sequence */</span>
         <span style="color: #d0d0d0">tmp</span> <span style="color: #d0d0d0">=</span> <span style="color: #d0d0d0">p;</span>
         <span style="color: #d0d0d0">p</span> <span style="color: #d0d0d0">++;</span>
         <span style="color: #d0d0d0">*tmp</span> <span style="color: #d0d0d0">=</span> <span style="color: #d0d0d0">S;</span>
       <span style="color: #d0d0d0">}</span>
    <span style="color: #d0d0d0">}</span>
    <span style="color: #d0d0d0">i++;</span>
  <span style="color: #d0d0d0">}</span>
  <span style="color: #6ab825; font-weight: bold">return</span> <span style="color: #d0d0d0">S;</span>
 <span style="color: #d0d0d0">}</span>

 <span style="color: #d0d0d0">S</span> <span style="color: #a61717; background-color: #e3d2d2">∈</span> <span style=
"color: #d0d0d0">{</span><span style="color: #3677a9">0</span><span style="color: #d0d0d0">;</span> <span style=
"color: #3677a9">1</span><span style="color: #d0d0d0">;</span> <span style="color: #3677a9">3</span><span style=
"color: #d0d0d0">;</span> <span style="color: #3677a9">6</span><span style="color: #d0d0d0">}</span><span class=
"tooltip">2</span><span class="arrowTooltip right"><span><span class=
"title"><b>02</b><span>When the execution reaches the highlighted point inside the loop, the variable <samp>S</samp> always contains either 0, 1, 3, or 6. Frama-C guarantees that it does not take any other values at that point.</span></span></span></span><u></u>
 <span style="color: #d0d0d0">S</span> <span style="color: #d0d0d0">(after)</span> <span style=
"color: #a61717; background-color: #e3d2d2">∈</span> <span style="color: #d0d0d0">{</span><span style=
"color: #3677a9">0</span><span style="color: #d0d0d0">;</span> <span style="color: #3677a9">1</span><span style=
"color: #d0d0d0">;</span> <span style="color: #3677a9">3</span><span style="color: #d0d0d0">;</span> <span style=
"color: #3677a9">6</span><span style="color: #d0d0d0">;</span> <span style="color: #3677a9">10</span><span style=
"color: #d0d0d0">}</span>
</pre>
                            </div>
                          </div>
                        </div>
                      </div>
                    </div>
                  </div>

                  <div class="swiper-slide">
                    <div class="codeTips">
                      <div class="title">
                        <b>01</b><span>For each statement, Frama-C can provide an exhaustive list of the memory cells that may be
                        modified by this statement during the execution, even if the statement uses pointers.</span>
                      </div>

                      <div class="title">
                        <b>02</b><span>Frama-C guarantees that anytime it is executed, the statement <samp>*tmp = S;</samp> does
                        not change any memory location other than the cells of the array <samp>T</samp>.</span>
                      </div>
                    </div>

                    <div class="notebook code">
                      <div>
                        <div class="codeScreen">
                          <div class="codeTab tab-demo">
                            <div style="background: #202020; overflow:auto;width:auto;border:solid transparent;">
                              <pre style="margin: 0; line-height: 125%; background: #202020;">
  <span style="color: #d0d0d0">p</span> <span style="color: #d0d0d0">=</span> <span style="color: #d0d0d0">T;</span>
  <span style="color: #d0d0d0">i</span> <span style="color: #d0d0d0">=</span> <span style="color: #3677a9">0</span><span style=
"color: #d0d0d0">;</span>
  <span style="color: #6ab825; font-weight: bold">while</span> <span style="color: #d0d0d0">(i</span> <span style=
"color: #d0d0d0">&lt;</span> <span style="color: #3677a9">5</span><span style="color: #d0d0d0">)</span> <span style=
"color: #d0d0d0">{</span>
    <span style="color: #d0d0d0">{</span>
      <span style="color: #6ab825; font-weight: bold">int</span> <span style="color: #d0d0d0">*tmp;</span>
      <span style="color: #d0d0d0">S</span> <span style="color: #d0d0d0">+=</span> <span style="color: #d0d0d0">i;</span>
       <span style="color: #d0d0d0">{</span> <span style="color: #999999; font-style: italic">/* sequence */</span>
         <span style="color: #d0d0d0">tmp</span> <span style="color: #d0d0d0">=</span> <span style="color: #d0d0d0">p;</span>
         <span style="color: #d0d0d0">p</span> <span style="color: #d0d0d0">++;</span>
         <span class="arrowTooltip left"><span><span class=
"title"><b>01</b><span>For each statement, Frama-C can provide an exhaustive list of the memory cells that may be modified by this statement during the execution, even if the statement uses pointers.</span></span></span></span><u></u><span class="highlight">*tmp = S;<span class="tooltip">1</span></span>
       <span style="color: #d0d0d0">}</span>
    <span style="color: #d0d0d0">}</span>
    <span style="color: #d0d0d0">i++;</span>
  <span style="color: #d0d0d0">}</span>
  <span style="color: #6ab825; font-weight: bold">return</span> <span style="color: #d0d0d0">S;</span>
 <span style="color: #d0d0d0">}</span>

 <span class="highlight">*tmp = S;</span> <span style="color: #d0d0d0">modifies</span> <span style=
"color: #d0d0d0">T[</span><span style="color: #3677a9">0..4</span><span style="color: #d0d0d0">]</span><span class=
"arrowTooltip right"><span><span class=
"title"><b>02</b><span>Frama-C guarantees that anytime it is executed, the statement <samp>*tmp = S;</samp> does not change any memory location other than the cells of the array <samp>T</samp>.</span></span></span></span><u></u><span class="tooltip">2</span>
</pre>
                            </div>
                          </div>
                        </div>
                      </div>
                    </div>
                  </div>

                  <div class="swiper-slide">
                    <div class="codeTips">
                      <div class="title">
                        <b>01</b><span>The dependencies plug-in highlights the statements that define the value of variable
                        <samp>S</samp> at this point.</span>
                      </div>

                      <div class="title">
                        <b>02</b><span>The value contained in variable <samp>S</samp> at the statement <samp>*tmp = S;</samp> was
                        defined by the statement <samp>S += i;</samp></span>
                      </div>
                    </div>

                    <div class="notebook code">
                      <div>
                        <div class="codeScreen">
                          <div class="codeTab tab-demo">
                            <div style="background: #202020; overflow:auto;width:auto;border:solid transparent;">
                              <pre style="margin: 0; line-height: 125%; background: #202020;">
<span style="color: #6ab825; font-weight: bold">int</span> <span style="color: #447fcf">main</span><span style=
"color: #d0d0d0">(</span><span style="color: #6ab825; font-weight: bold">void</span><span style="color: #d0d0d0">)</span>
<span style="color: #d0d0d0">{</span>
  <span style="color: #6ab825; font-weight: bold">int</span> <span style="color: #d0d0d0">i;</span>
  <span style="color: #6ab825; font-weight: bold">int</span> <span style="color: #d0d0d0">*p;</span>
  <span style="color: #d0d0d0">p</span> <span style="color: #d0d0d0">=</span> <span style="color: #d0d0d0">T;</span>
  <span style="color: #d0d0d0">i</span> <span style="color: #d0d0d0">=</span> <span style="color: #3677a9">0</span><span style=
"color: #d0d0d0">;</span>
  <span style="color: #6ab825; font-weight: bold">while</span> <span style="color: #d0d0d0">(i</span> <span style=
"color: #d0d0d0">&lt;</span> <span style="color: #3677a9">5</span><span style="color: #d0d0d0">)</span> <span style=
"color: #d0d0d0">{</span>
    <span style="color: #d0d0d0">{</span>
      <span style="color: #6ab825; font-weight: bold">int</span> <span style="color: #d0d0d0">*tmp;</span>
      <span class="highlight2">S += i;</span><span class="tooltip">2</span><span class="arrowTooltip right"><span><span class=
"title"><b>02</b><span>The value contained in variable <samp>S</samp> at the statement <samp>*tmp = S;</samp> was defined by the statement <samp>S += i;</samp></span></span></span></span><u></u>
       <span style="color: #d0d0d0">{</span> <span style="color: #999999; font-style: italic">/* sequence */</span>
         <span style="color: #d0d0d0">tmp</span> <span style="color: #d0d0d0">=</span> <span style="color: #d0d0d0">p;</span>
         <span style="color: #d0d0d0">p</span> <span style="color: #d0d0d0">++;</span>
         <span class="arrowTooltip left"><span><span class=
"title"><b>01</b><span>The dependencies plug-in highlights the statements that define the value of variable <samp>S</samp> at this point.</span></span></span></span><u></u><span style="color: #d0d0d0">*tmp</span> <span style="color: #d0d0d0">=</span> <span class="highlight">S<span class="tooltip">1</span></span><span style="color: #d0d0d0">;</span>
       <span style="color: #d0d0d0">}</span>
    <span style="color: #d0d0d0">}</span>
    <span style="color: #d0d0d0">i++;</span>
  <span style="color: #d0d0d0">}</span>
  <span style="color: #6ab825; font-weight: bold">return</span> <span style="color: #d0d0d0">S;</span>
<span style="color: #d0d0d0">}</span>
</pre>
                            </div>
                          </div>
                        </div>
                      </div>
                    </div>
                  </div>

                  <div class="swiper-slide">
                    <div class="codeTips">
                      <div class="title">
                        <b>01</b><span>This analysis highlights all the statements impacted by the selected statement.</span>
                      </div>

                      <div class="title">
                        <b>02</b><span>This statement has repercussions on the statements <samp>tmp = p; p++; *tmp = S;</samp>. It
                        is guaranteed not to affect the statements <samp>S += i;</samp> and <samp>i ++;</samp></span>
                      </div>
                    </div>

                    <div class="notebook code">
                      <div>
                        <div class="codeScreen">
                          <div class="codeTab tab-demo">
                            <div style="background: #202020; overflow:auto;width:auto;border:solid transparent;">
                              <pre style="margin: 0; line-height: 125%; background: #202020;">
<span style="color: #6ab825; font-weight: bold">int</span> <span style="color: #447fcf">main</span><span style=
"color: #d0d0d0">(</span><span style="color: #6ab825; font-weight: bold">void</span><span style="color: #d0d0d0">)</span>
<span style="color: #d0d0d0">{</span>
  <span style="color: #6ab825; font-weight: bold">int</span> <span style="color: #d0d0d0">i;</span>
  <span style="color: #6ab825; font-weight: bold">int</span> <span style="color: #d0d0d0">*p;</span>
  <span class="arrowTooltip left"><span><span class=
"title"><b>01</b><span>This analysis highlights all the statements impacted by the selected statement.</span></span></span></span><u></u><span class="highlight">p = T;</span><span class="tooltip">1</span>
  <span style="color: #d0d0d0">i</span> <span style="color: #d0d0d0">=</span> <span style="color: #3677a9">0</span><span style=
"color: #d0d0d0">;</span>
  <span style="color: #6ab825; font-weight: bold">while</span> <span style="color: #d0d0d0">(i</span> <span style=
"color: #d0d0d0">&lt;</span> <span style="color: #3677a9">5</span><span style="color: #d0d0d0">)</span> <span style=
"color: #d0d0d0">{</span>
    <span style="color: #d0d0d0">{</span>
      <span style="color: #6ab825; font-weight: bold">int</span> <span style="color: #d0d0d0">*tmp;</span>
      <span style="color: #d0d0d0">S</span> <span style="color: #d0d0d0">+=</span> <span style="color: #d0d0d0">i;</span>
       <span style="color: #d0d0d0">{</span> <span style="color: #999999; font-style: italic">/* sequence */</span>
         <span class="highlight2">tmp = p;</span>
         <span class="highlight2">p++;</span>
         <span class="highlight2">*tmp = S;</span><span class="tooltip">2</span><span class="arrowTooltip right"><span><span class=
"title"><b>02</b><span>This statement has repercussions on the statements <samp>tmp = p; p++; *tmp = S;</samp>. It is guaranteed not to affect the statements <samp>S += i;</samp> and <samp>i ++;</samp></span></span></span></span><u></u>
       <span style="color: #d0d0d0">}</span>
    <span style="color: #d0d0d0">}</span>
    <span style="color: #d0d0d0">i++;</span>
  <span style="color: #d0d0d0">}</span>
  <span style="color: #6ab825; font-weight: bold">return</span> <span style="color: #d0d0d0">S;</span>
<span style="color: #d0d0d0">}</span>
</pre>
                            </div>
                          </div>
                        </div>
                      </div>
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </div>

          <div id="code_demo_iv_point" class="inviewCenter"></div>
        </section>

        <section class="section aboutScreen fullScreen verticalFlex" id="about_screen" data-title="ABOUT">
          <div class="sectionContent">
            <div class="circleBlock">
              <h2>What is<br>
              Frama-C<br>
              used for?</h2>

              <div class="circle robustness"></div>

              <div class="circle codeStandard"></div>

              <div class="circle security"></div><a href="/html/using-frama-c.html" class="robustness" role=
              "button"><span class="icon"><i class=" icon-thumb"></i></span> <span class="txt">Test your software's
              <b>robustness</b></span></a><a href="/html/using-frama-c.html" class="codeStandard" role=
              "button"><span class="icon"><i class=" icon-code"></i></span> <span class="txt">Enforce <b>code
              requirements</b></span></a><a href="/html/using-frama-c.html" class="security" role=
              "button"><span class="icon"><i class=" icon-lock"></i></span> <span class="txt">Detect <b>security
              defects</b></span></a>
            </div>
          </div>

          <div id="about_iv_point" class="inviewCenter"></div>
        </section>

        <section id="latest_events" class="section calendarScreen fullScreen" data-title="TIMELINE">
          <div class="sectionContent">
            <h2>Frama-C Timeline</h2>

            <div class="eventScaleBlock">
              <div class="scaleBg">
                <u></u>
              </div>

              <div id="event_calender_swiper" class="swiper-container">
                <div class="swiper-wrapper">
                  {% for event in site.events %}
                  <div class="swiper-slide"
                       {% if forloop.last %}
                       data-eventdate="latest"
                       {% endif %}
                       >
                    <a role="button" class="eventLink"><time>{{ event.date | date: "<b>%Y</b>" }}</time><span>{{ event.event }}</span></a>
                  </div>
                  {% endfor %}
                </div>
              </div>
            </div>

            <div id="events_iv_point" class="inviewCenter"></div>

            <div id="event_detail_swiper" class="eventDetailsBlock swiper-container">
              <div class="swiper-wrapper">
                {% for event in site.events %}
                <div class="swiper-slide">
                  <div class="eventDetail" id="post_details_486">

                    <div class="contentBlk">
                      <time>{{ event.date | date: "<b>%-d</b><b>%B</b><small>%Y</small>" }}</time>
                      <div>
                        <h3>{{ event.title }}</h3>

                        <p>{{ event.content }}</p>
                      </div>
                    </div>
                  </div>
                </div>
                {% endfor %}
              </div>
            </div>
          </div>
        </section>

        <section class="section downloadSection fullScreen verticalFlex" id="download_screen" data-title="DOWNLOAD">
          <div class="sectionContent">
            <div class="head">
              <h3>Get Frama-C</h3>

              <nav>
                <span class="currentVersion">Latest Version</span><a role="button" href="/html/get-frama-c.html">{{ site.fc-versions.last.name }}</a><a href="/html/framac-versions.html" class="previousVersion">Previous Versions</a>
              </nav>
            </div>

            <div class="linkBlk">
              <p>Frama-C is only available for Desktop</p><a class="btn mobileLink" href="/html/get-frama-c.html"><span>Discover
              more about <b>Frama-C</b></span></a> <a class="btn cta-download" href="/html/get-frama-c.html"><span>Download
              <b>Frama-C</b><span><i class="icon icon-curly-left"></i><i class="icon icon-download-arrow"></i><i class=
              "icon icon-curly-right"></i></span></span></a>
            </div>
          </div>

          <div id="download_iv_point" class="inviewCenter"></div>
        </section>

      {% include footer.html %}

        <section class="bgTitleBlk titleIn white">
          <div class="upperBlk">
            <div class="upperType">
              SECURE
            </div>
          </div>

          <div class="lowerBlk">
            <div class="lowerType">
              SECURE
            </div>
          </div>
        </section>
      </div>
	  <script>
		var homeLabels = {secure_label    : 'Secure',error_label     : 'Error',about_label     : 'About',follow_label    : 'Follow',footer_label    : 'Get Frama-C',};
      </script>

      <div class="clear"></div>
    </div>
  </div>
<body>