compilationarchitecturestatic-linkingdynamic-linkingintel-pin

instruction point value of dynamic linking and static linking


By using Intel's pin, I printed out the instruction pointer (ip) values for a program with dynamic linking and static linking.

And I've found that their ip values are quite different, even though they are the same program.

A program with static linking shows 0x400f50 for its very first ip value.

but a program with dynamic linking shows 0x7f94f0762090 for its first ip value

I am not sure why they have that quite a large gap.

It would be appreciated if anyone could help me find out the reason


Solution

  • I am not sure why they have that quite a large gap.

    Because a dynamically linked program does not start executing in the binary: the first few thousands of instructions are executed in the dynamic linker (ld-linux), before control is transferred to _start in the main executable.

    See also this answer.