As chamadas do sistema são dependentes da arquitetura, mas todas compartilham características semelhantes.
Em x86, as chamadas do sistema são feitas por meio de interrupções de software ou por meio de uma instrução especial "systenter". O Linux também pode usar, mas uma interrupção de software é mais comum. No tempo de inicialização, o kernel configura manipuladores para interrupções, ambas as interrupções geradas pelo hardware e aquelas geradas pelo software. No x86 há uma instrução de montagem especial 'int' que gera uma interrupção de software. O kernel configurou um manipulador para que a interrupção do software 0x80 seja a interrupção da chamada do sistema.
Esta tabela mostra cada possível chamada do sistema e seus parâmetros e como eles pode ser passado. Como você pode ver, um número no registro eax indica qual chamada de sistema. Os outros registradores apontam para algum parâmetro para a chamada do sistema.
Assim, o software do usuário simplesmente configura os parâmetros corretos nos registradores e, em seguida, emite a interrupção 0x80. O kernel tem o manipulador configurado para interpretar a chamada do sistema, executar a função e retornar os registros modificados com qualquer valor de retorno possível.
Embora as funções de invólucro façam isso e geralmente de maneira portátil, não há motivo para você não poder escrever algum assembly embutido em nenhum código C / C ++ para emitir uma chamada de sistema diretamente. Você só precisa de um conhecimento básico de montagem: Mova os dados corretos nos registros corretos e, em seguida, emita 'int 0x80'