7
votes

Est-il possible d'implémenter un programme C qui n'effectue aucun appels système?

Mon professeur m'a demandé d'écrire une fonction C qui n'effectue aucun système SysCalls. Peu importe que la fonction ne réalise rien.

Est-ce que la fonction suivante effectue n'importe quel système SYSCALL? P>

int func() {
  return 0;
}


10 commentaires

Ce n'est pas clair; Vous demandez si ce code, qui ne fait rien, fait quelque chose?


Est-ce une sorte de question piège? En fin de compte, oui, votre code va appeler _exit (0).


Mon professeur me demande d'écrire Func sans SysCall. Peu importe que cela ne fait rien.


Ou de mettre d'une autre manière, tout programme qui se termine doit avoir un système SYSCALL, car il n'y a pas d'instruction un programme (non indéfini) peut utiliser pour rendre le processeur arrêter d'exécuter des instructions!


@nikita_em ajoutez cette ligne dans votre question en premier, expliquez toujours votre question bien que vous pouvez comprendre et réagir.


Il a dit "Je sais comment écrire Func, cela n'a pas d'appel SYS", alors je suis en difficulté :(


Une fonction? Ou un programme entier?


La première ligne dit Func .


Bien sûr, mais l'exemple est principal , qui est spécial, et tous les autres commentaires semblent parler des programmes entiers de Baout.


Une fonction! Mon erreur :( fixe


3 Réponses :


1
votes

Oui ce qui précède a des appels système. Vous pouvez utiliser pTrace () pour arrêter chaque fois qu'il existe un appel système et vous verrez qu'il y a des appels système. Comment le programme serait-il chargé et déchargé de la mémoire sans le système d'exploitation?


1 commentaires

La question originale avait une fonction vide . At-il un appel système? Cela dépend de ce que vous entendez par "avoir". L'environnement d'appel effectue sans aucun doute des appels système, mais la fonction elle-même ne le fait pas. La question révisée a une fonction vide appelée func . Cette fonction ne fait clairement pas explicitement aucun appels de système - mais pour tout ce que nous savons, la mise en œuvre pourrait nécessiter un appel système pour allouer un enregistrement d'activation d'appel de la fonction. S'il est possible de disposer d'une fonction qui n'a pas "d'avoir" des appels système, une fonction vide vide est certainement qualifiée.



2
votes

Non, votre exemple fonction ne fait pas d'appels système. Vous pouvez simplement compiler et démonter cela pour être sûr:

$ cc -c example.c 
$ objdump -d example.o 

example.o:     file format elf64-x86-64


Disassembly of section .text:

0000000000000000 <func>:
   0:   55                      push   %rbp
   1:   48 89 e5                mov    %rsp,%rbp
   4:   b8 00 00 00 00          mov    $0x0,%eax
   9:   5d                      pop    %rbp
   a:   c3                      retq   


1 commentaires

Je suis curieux de cette réponse, car je pense qu'un programme ne peut pas fonctionner sans SysCalls. Avez-vous vu les autres réponses?