"call" instruction that seemingly jumps into itself

Posted by Checkers on Stack Overflow See other posts from Stack Overflow or by Checkers
Published on 2010-03-31T06:04:02Z Indexed on 2010/03/31 6:23 UTC
Read the original article Hit count: 472

Filed under:
|
|
|

I have gcc 4 compiling some C++ code into the following (from objdump):

00000030 <func()>:
  30:   55                      push   %ebp
  31:   89 e5                   mov    %esp,%ebp
  33:   56                      push   %esi
  34:   31 f6                   xor    %esi,%esi
  36:   53                      push   %ebx
  37:   bb 00 00 00 00          mov    $0x0,%ebx
  3c:   83 ec 40                sub    $0x40,%esp
  3f:   c7 04 24 01 00 00 00    movl   $0x1,(%esp)
  46:   e8 fc ff ff ff          call   47 <func()+0x17>
  4b:   8d 55 ec                lea    0xffffffec(%ebp),%edx
  4e:   89 14 24                mov    %edx,(%esp)
  51:   89 5c 24 04             mov    %ebx,0x4(%esp)
  55:   89 74 24 08             mov    %esi,0x8(%esp)
  59:   89 44 24 0c             mov    %eax,0xc(%esp)
  ; the rest of the function is omitted

I can't understand the operand of call instruction here, why does it call into itself, but with one byte off?

© Stack Overflow or respective owner

Related posts about gcc

Related posts about c++