title: binary not running on debian wheezy
body: <p>I am compiling the following assembly program on debian wheezy, but it will not run giving me the error:</p>
  <p><strong>-bash: ./power: cannot execute binary file</strong></p>
  <h1>Code</h1>
  <pre><code>.section data
  
  .section text
  
  .global _start
      _start:
          # do first calc and save the answer
          pushl $3
          pushl $2
          call power
          addl $8, %esp
          pushl %eax
  
          # do second calc
          pushl $2
          pushl $5
          call power
          addl $8, %esp
  
          # add both together
          popl %ebx
          addl %eax, %ebx
  
          # exit with answer as return status
          movl $1, %eax
          int $0x80
  
  .type power,  @function
      power:
          # ?
          pushl %ebp
          movl %esp, %ebp
          subl $4, %esp
  
          # load params
          movl 8(%ebp), %ebx
          movl 12(%ebp), %ecx
          movl %ebx, -4(%ebp)
  
      power_loop_start:
          # have we looped down to 1?
          cmpl $1, %ecx
          je end_power
  
          # multiply prev result by base and store
          movl -4(%ebp), %eax
          imull %ebx, %eax
          movl %eax, -4(%ebp)
  
          # go again
          decl %ecx
          jmp power_loop_start
  
      end_power:
          movl -4(%ebp), %eax
          movl %ebp, %esp
          popl %ebp
          ret
  </code></pre>
  <p>I run with:</p>
  <pre><code>as power.s -o power.o
  ld power.o -o power
  ./power
  </code></pre>
  <p>Both <code>uname -m</code> and <code>arch</code> give me <strong>i686</strong>, and the binary outputs this on <code>objdump -x</code>:</p>
  <pre><code>$ objdump -x power
  
  power:     file format elf32-i386
  power
  architecture: i386, flags 0x00000012:
  EXEC_P, HAS_SYMS
  start address 0x00000000
  
  Sections:
  Idx Name          Size      VMA       LMA       File off  Algn
    0 text          0000004a  00000000  00000000  00000034  2**0
                    CONTENTS, READONLY
  SYMBOL TABLE:
  00000000 l    d  text   00000000 text
  00000023 l     F text   00000000 power
  00000032 l       text   00000000 power_loop_start
  00000043 l       text   00000000 end_power
  00000000 g       text   00000000 _start
  08049034 g       *ABS*  00000000 __bss_start
  08049034 g       *ABS*  00000000 _edata
  08049034 g       *ABS*  00000000 _end
  </code></pre>
  <p>Not sure what I am doing wrong.</p>
  <h1>Further note :</h1>
  <p>This example is from the book &quot;Programming from the ground up&quot;. I have tried on a Red Hat <strong>x86_64</strong> machine, with <code>as</code> flags <code>--32</code> and <code>ld</code> flags <code>-m elf_i386</code>, it all compiles fine just like on the x86 machine, but when executing gives the same error.</p>