Как написать код LLVM, необходимый для выдачи инструкции по системному вызову, специфичной для архитектуры?
Более конкретно, clang
поддерживает встроенную сборку и явно поддерживает испускание системных вызовов (иначе libc
и vdso
не удалось скомпилировать). Как работает перевод для этого, и как я могу пощекотать его, чтобы воспроизвести это поведение?
Я понимаю, что сам LLVM может не понимать интерфейс вызова и расписание регистрации, используемые различными архитектурами, достаточно высокоуровневым образом, чтобы быть выраженным в байт-коде LLVM (например, который может быть заполнен в другом месте). Тем не менее, очевидно, что эта страница может быть добавлена.
Как мне это сделать, начиная с любой стадии после "источника C с встроенной сборкой"?
Удовлетворительный ответ будет включать пример вызова системного вызова с пятью аргументами int 0x80
. Я выбираю пять, так как это требует пролития стека, и я выбираю int 0x80
, так как он легко понимается и на самой распространенной платформе.