Does anybody have a link to a documentation what exactly is randomized in what cases for latest Mac OS (10.7) and iOS (6.0)?
I mean. I want to see a list (something like
No PIE:
Executable - Fixed
Data - Fixed
Heap - Randomized per execution
Stack - Fixed
Libraries - Randomized per device boot
Linker - Fixed
With PIE:
Executable - Randomized per execution
Data - Randomized per execution
Heap - Randomized per execution(more entropy)
Stack - Randomized per execution
Libraries - Randomized per device boot
Linker - Randomized per execution
The list you are looking for can easily be generated by you, as follows:
int global_j = 0;
void main ()
{
char *h = malloc(10);
int j = 0;
printf ("Globals are : %p, text is %p, stack is %p, heap is %p\n",
&global_j, main, &j, h);
}
On mountain lion, this yields:
bash-3.2# ./a
Globals are : 0x10fa55020, text is 0x10fa54eb0, stack is 0x7fff501ab864, heap is 0x7f9b294000e0
bash-3.2# ./a
Globals are : 0x106bbe020, text is 0x106bbdeb0, stack is 0x7fff59042864, heap is 0x7f9752c000e0
bash-3.2# ./a
Globals are : 0x108673020, text is 0x108672eb0, stack is 0x7fff5758d864, heap is 0x7fecc34000e0
bash-3.2# ./a
Globals are : 0x1059d2020, text is 0x1059d1eb0, stack is 0x7fff5a22e864, heap is 0x7f8f81c000e0
Showing ample randomization on all (note that due to alignment restrictions the offset within the page doesn't get randomized, but you still get some 16-20-bit randomization, as implied by the 4-5 hex digits which change).
Hope this helps,
TG