Вы можете использовать следующий простой скрипт dTrace для получения трассировки стека от любого процесса, который вызывает chmod()
(или любой из его вариантов, таких как fchmod()
или fchmodat()
):
#!/usr/sbin/dtrace -s
syscall::fchmodat:entry
{
printf{ "\nExecname: %s\n", execname );
ustack();
}
Вы можете фильтровать по execname, чтобы печатать только стеки вызовов chmod
из вашего исполняемого файла с помощью
#!/usr/sbin/dtrace -s
syscall::fchmodat:entry
/ execname == "yourExecName" /
{
ustack();
}
Вы можете добавить больше или меньше кадров стека с помощью ustack( 10 );
, чтобы напечатать, например, 10 кадров стека.Если вы хотите использовать более длинные или более короткие имена функций в трассировке стека, вы можете указать длину строки с помощью ustack( 10, 50 );
для печати 10 кадров стека, при этом каждое имя функции печатает до 50 символов.
Если ваш двоичный файл полностью заполненбез имен символов вы можете не получить имена функций, только адреса.
Поскольку это двоичный файл C ++, вам, возможно, придется разобрать имена функций.
После того, как вы получите трассировку стека, вы можетеначать работать над тем, что именно происходит.