(Я написал расширенную версию этой функции, которая истощает данные NETLINK, следуя удивительной детективной работе Саши Пачева, выясняющей, какую функцию перехватывать. Я рад видеть, что люди нашли код полезным.)
Из другого потока я вижу, что кто-то использовал «nm», чтобы найти аналогичный обработчик обратного вызова для OSX, и вы пытаетесь создать подходящую функцию для его замены. Насколько я понимаю, OSX вообще не предоставляет интерфейс NETLINK, поэтому очень маловероятно, что версия AnyConnect для OSX сохраняет контроль над таблицей маршрутизации так же, как это делает клиент Linux. Я не знаю, какой механизм OSX обеспечивает, чтобы сигнализировать AnyConnect о том, что произошло изменение маршрутизации, но поскольку он не основан на NETLINK, код, используемый для слива сообщения netlink, неприменим.
По иронии судьбы, оригинальный стиль функции заглушки, предоставляемый Сашей, скорее всего, будет всем, что вам нужно, чтобы помешать ему заменить ваши маршруты своими собственными. Эта функция выглядела так:
int __ZN25CInterfaceRouteMonitorMac20routeCallbackHandlerEv() { return 0; }
В linux эта оригинальная функция приводила к высокому использованию процессора, поскольку событие NETLINK, которое инициировало вызов к обработчику обратного вызова, никогда не будет очищено этим бесполезным кодом. тот же эффект может произойти для клиента OSX, где любое событие, вызывающее запуск этой функции, также не очищается. Но если эта функция является правильной функцией-обработчиком для перехвата, и вы можете сделать свою собственную библиотеку для переопределения этой функции и загрузить эту библиотеку вместо реальной, по крайней мере, вы остановите ее для сброса таблицы маршрутизации каждый раз. раз вы пытаетесь изменить это самостоятельно. Если вы зайдете так далеко, возможно, стоит пожертвовать некоторым процессором.
Удачи!