Недавно я рассматривал дополнительные аргументы для main и обнаружил, что кроме argc, argv и envp в macOS есть также дополнительная опция char ** apple.
Очевидно, что первое, что я сделал, быстро перебрал его:
int main(int argc, char ** argv, char ** envp, char ** apple)
{
puts("-----------------Apple-----------------");
for(char **a = apple; *a != 0; a++)
{
printf("%s\n", *a);
}
return 0;
}
и посмотрите, что там было:
-----------------Apple-----------------
executable_path=bin/apple
ptr_munge=
main_stack=
executable_file=0x1901000004,0x2ea3d0
dyld_file=0x1901000004,0xab575
Если предположить, что они не полностью вводят в заблуждение имена, я могу догадаться, что это за остальные, но я был немного озадачен ptr_munge
- что это такое и что с этим можно сделать? (Кроме того, для чего там все лишние пробелы?)
EDIT:
ОК. Я нашел этот файл: kern_exec.c , который содержит это:
/*
* libplatform needs a random pointer-obfuscation value when it is initialized.
*/
#define PTR_MUNGE_VALUES 1
#define PTR_MUNGE_KEY "ptr_munge="
...
/*
* Supply libpthread & libplatform with a random value to use for pointer
* obfuscation.
*/
error = exec_add_entropy_key(imgp, PTR_MUNGE_KEY, PTR_MUNGE_VALUES, FALSE);
if (error) {
goto bad;
}
imgp->ip_applec++;
Так что я до сих пор не совсем уверен, что это значит в контексте (в моем нет ничего), но я могу следовать этой теме.