Как вы заметили, интерфейс между пользовательским пространством и пространством ядра в Linux - INT 0x80.
В Unix, с точки зрения философии, (почти) все является файлом, поэтому звуковые карты рассматриваются как «Файлы символов». Системные вызовы ядра соответствуют спецификации POSIX, поэтому «open», «close», «ioctl», «read», «write».
Доступ к звуковой карте осуществляется через интерфейс драйвера в виде файла в / dev /. Некоторые примеры документации находятся по адресу Документация OSS , но я не уверен, что это актуально.
Чтобы наблюдать это общение, вы можете использовать 'strace', чтобы увидеть, какие системные вызовы используются любым существующим приложением.
Вероятно, вы увидите последовательность вроде:
open("/dev/dsp", ... )
ioctl()
write()
...
write()
close()
Обычно вы можете «открыться» через библиотеку C, но так как вы хотите пропустить это, вы можете найти системные вызовы несколькими способами - одним из способов будет
objdump -d /usr/lib/libc.a
Например, вы можете обнаружить, что open - это системный вызов 0x5, выполнив поиск <<code>__libc_ open>:
Вы заметите, что eax равно 5, а остальные параметры находятся в ebx, ecx и edx.
(Использование и параметры также перечислены в Системные вызовы Linux )