Je trouve cette source dans le livre de Jon Erickson, Hacking: The Art of Exploitation,C, appel système écrire, écrire int
userid = getuid(); // get the real user ID
// Writing data
if(write(fd, &userid, 4) == -1) // write user ID before note data
fatal("in main() while writing userid to file");
write(fd, "\n", 1); // terminate line
j'ai essayé de compiler ce code, et a constaté que sur le fichier que j'écris, userid (ce que J'écris dans le code ci-dessus) n'est pas juste; ils ont juste écrit un personnage étrange (je pense qu'il n'est pas important de l'écrire ici). Donc, le problème est que j'essaie de passer un int
à une fonction qui nécessitait char *
, à cause de cela le résultat sur le fichier que je veux écrire est faux.
Donc c'est un bug, non?
'write (fd, & userid, 4)' écrit la représentation binaire dans le fichier. Votre éditeur de texte ne le comprendra pas. –
utilise 'man write' (ou google it). L'appel système 'write' prend un' const void * ', pas un' char * '. C'est un problème avec la représentation binaire (c'est-à-dire que votre entier n'est pas encodé en char) et non l'entier. – RageD