title: Function address in ARM assembly have one byte offset?
body: <p>For example, I have the following assembly code got by <code>objdump</code>. The address of <code>f()</code> is <code>080001d4</code>. But <code>printf("%x", f)</code> outputs <code>080001d5</code>. And <code>f()</code> can be done by <code>(*((int (*)())080001d5))()</code> but <code>(*((int (*)())080001d4))()</code>.</p>
  
  <p>Why there is one byte offset in function address?</p>
  
  <pre><code>080001d4 &lt;f&gt;:
   80001d4:   2000        movs    r0, #0
   80001d6:   4770        bx  lr
  </code></pre>