title: Segfault shows up only in GDB
body: <p>Why does the following program not crash when it is executed, but crash with a segfault in GDB? Compiled with GCC 4.5.2 on a 32-bit x86 (Athlon 64, if it should matter).</p>
  
  <pre><code>#include &lt;stdio.h&gt;
  #include &lt;string.h&gt;
  
  int modify(void)
  {
          __asm__("mov $0x41414141, %edx"); // Stray value.
          __asm__("mov $0xbffff2d4, %eax"); // Addr. of ret pointer for function().
          __asm__("mov %edx, (%eax)");
  }
  
  int function(void)
  {
          modify();
  
          return 0;
  }
  
  int main(int argc, char **argv)
  {
          function();
  
          return 0;
  }
  </code></pre>
  
  <p>The mov $0xbffff2d4, %eax was determined using GDB to find the address where the return pointer was stored for the "function" function. This will probably be different on a different system. ASLR was disabled for this.</p>
  
  <p>When I execute the program, nothing happens. There is no report of a crash in dmesg either. However when I execute the same program in GDB:</p>
  
  <pre><code>Program received signal SIGSEGV, Segmentation fault.
  0x41414141 in ?? ()
  =&gt; 0x41414141:  Cannot access memory at address 0x41414141
  </code></pre>
  
  <p>This is what I expect should happen when I execute the program normally as well. I do indeed get segfaults as usual when other programs crash, and I can easily write a small program that crashes with a nice segfault. But why does this particular program not crash with a segfault?</p>