Я не думаю, что вы можете заставить эту работу даже ограничиться одной платформой под Linux: современный способ для Linux создавать системные вызовы - через заглушку, предоставляемую ядром и связанную через VDSO. Даже библиотека, с которой вы ссылаетесь, не знает (не нужно , чтобы знать ), что такое соглашение о системных вызовах - она просто извлекает ссылку из VDSO. Он получает ссылку на VDSO через магический параметр, который скрывается сразу после environ
, а затем обрабатывает его как любую другую динамическую библиотеку. Ядро выбирает соглашение о системных вызовах на основе возможностей процессора.
Я знаю (потому что я пытался это сделать!), Что трудно получить доступ к этим символам VDSO. glibc не экспортирует их (или любые полезные ссылки на них) для вас. Единственный работающий способ, который я видел, это проверить свой собственный /proc/self/maps
, чтобы найти VDSO, а затем использовать для этого dl
функции (повторяя некоторые из настроек glibc).