Quel est le rôle de cette invocation d’un casting de tableau de caractères?

Je suis tombé sur ce morceau de code:

char code[] = "\xb0\x01\x31\xdb\xcd\x80"; int main(int argc, char **argv) { int (*func)(); func = (int (*)()) code; (int)(*func)(); } 

Il est copié à partir du Writing Shellcode for Linux and Windows Tutorial .

Quelqu’un pourrait-il expliquer ce que cette fonction invocation (int)(*func)(); fait?

Il appelle une fonction dont le code machine est dans le code du tableau. La chaîne contient des instructions au niveau de la machine ((trois je pense, jetez un coup d’œil au jeu d’instructions x86). func est déclaré en tant que pointeur sur une fonction qui ne prend pas d’argument et retourne un int . premier octet de cette chaîne (les instructions machine se rappellent), puis on appelle func , ainsi un appel de fonction à la première instruction de la chaîne est effectué.

Je ne maîsortingse pas très bien les instructions x86, mais il semble effectuer un appel système (je ne sais pas lequel); 0xcd 0x80 est un piège pour le système.


Comme @etheranger l’a dit, il s’agit d’un appel à l’ _exit système _exit .

Notez que cela dépend de Linux, voir Que signifie “int 0x80” dans le code assembleur?

Une brève explication de ce mécanisme est disponible ici: http://www.linfo.org/system_call_number.html