我有一个文件范围内核扩展,它在启动应用程序时通知守护程序。守护进程需要在 main() 中的第一条指令开始时暂停已启动的应用程序。
当使用 PT_ATTACH 调用 ptrace 时,守护程序似乎连接得太早并且位于动态链接器 (dyld) 中。
这是附加时线程0的调用堆栈的示例:-
Thread 0:
0 dyld 0x00007fff6e4cd35e mach_reply_port + 10
1 dyld 0x00007fff6e4cd4d4 _mig_init + 13
2 dyld 0x00007fff6e4cd17f mach_init + 46
3 dyld 0x00007fff6e4aa239 dyldbootstrap::start(macho_header const*, int, char const**, long, macho_header const*, unsigned long*) + 411
4 dyld 0x00007fff6e4aa05e _dyld_start + 54
因此,有什么方法可以确保在加载库完成后守护进程可以附加到 main 函数的开头,或者重复单步到该点,在这种情况下,我怎么能找到 main 的地址,考虑到启动的应用程序可能没有可用的符号?
谢谢。