title: What does 'callq *(%rax)' mean?
body: <p>I'm in a gdb session to analyze a postmortem crash. I'm looking at disassemble output for a function and I see this:</p>
  
  <pre><code>=&gt; 0x00007f8d354aed52 &lt;+50&gt;:    callq  *(%rax)
  </code></pre>
  
  <p>The <code>=&gt;</code> indicates that this was the instruction called at the time of the crash. So I got a seg fault calling the function at <code>*(%rax)</code>. I'm pretty new to assembly. I see that parens around a register mean to deference (get the value at) that address. Thus <code>(%rax)</code> means to get the value of the pointer currently stored in <code>%rax</code>. What does the star decoration do on that? Does that further dereference that value (thus <code>(%rax)</code> is itself a pointer)? I'm having trouble googling <code>*(</code> assembly syntax.</p>
  
  <p>This is x64 assembly generated from GCC 4.8 compiling C++ code.</p>