I'm new in it fields, recently I played a bit with debugger and disassemblers. Looking at the binary inside hopper tool I noticed that we have memory addressesaassigned to it statically. My question is: why if the operating systems manage the memory (that change the address of functions etc every time I run a binary) we have also a static memory addresses in a binary(?) pratical example:
Open the binary in hopper and show that a printf is at address 0x11ed, next run the program in gdb and obviously we have the printf at different address. Is the compiler that assign static address to the binary and why? Any recommended resources to know more?