Open
Description
[from a blog comment]
I believe for Mac OS X you need to use -Wl,-pie
even with gcc. If you use gcc -v
when linking on Mac OS X you won't see -pie
being passed to the linker. Here's the output of otool -h
on an executable built with -pie
in LDFLAGS
on Mac OS X 10.6:
Mach header
magic cputype cpusubtype caps filetype ncmds sizeofcmds flags
0xfeedfacf 16777223 3 0x80 2 11 1776 0x00000085
Compare that to one built with -Wl,-pie
Mach header
magic cputype cpusubtype caps filetype ncmds sizeofcmds flags
0xfeedfacf 16777223 3 0x80 2 11 1776 0x00200085
In /usr/include/mach-o/loader.h
we find this:
#define MH_PIE 0x200000 /* When this bit is set, the OS will
load the main executable at a
random address. Only used in
MH_EXECUTE filetypes. */