Jumps can be characterized by several properties:
Direct or indirect (i.e. whether the address is given in the instruction or retrieved from a memory pointer).
Relative (address is given as an increment, relative to where the CALL
opcode is) or absolute (jump to the actual, provided address). Indirect jumps are always absolute.
Near (in the same segment) or far (in a different segment). Far jumps are always absolute.
Now, E8
is direct, near, and relative. In contrast, FF
is indirect, near, and absolute. There is a variant of FF
that's far rather than near, which is used mainly for call gates AFAIK. See here for a succinct table of CALL
s.
See also this: How can I tell if jump is absolute or relative?.
So to your questions:
how to find the address the call point to
The 15
indicates that the pointer is relative to RIP
(if it were relative e.g. to RAX
then you'd have ff 90
). The offset relative to RIP
is in the four bytes immediately following the 15
- in your example, these are 0x00200b76
. See Why call instruction opcode is represented as FF15? for additional explanation on decoding.
the address of return of that call
The return address is always the instruction immediately following the CALL
instruction. So if the CALL
is at address 0x100000
then the return address will be 0x100006
.