Assigner le retour d'une fonction C sans passer par une variable temporaire
Bonjours à tous, je suis en train de faire un projet secu pour l'école. Voici ma question.
Est-il possible d'assigner le retour d'une fonction sans passer par une variable temporaire ?
Quelque chose comme ça :
Code:
(char)(strchr(buff, '\n')) = '\0';
:ptdr:
J'explique pourquoi cette question. :oops:
Voici l'asm d'une partie du code de mon projet scolaire :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| 0x080484b4 <+0>: push ebp
0x080484b5 <+1>: mov ebp,esp
0x080484b7 <+3>: sub esp,0x1018
0x080484bd <+9>: mov eax,DWORD PTR [ebp+0xc]
0x080484c0 <+12>: mov DWORD PTR [esp],eax
0x080484c3 <+15>: call 0x80483b0 <puts@plt>
0x080484c8 <+20>: mov DWORD PTR [esp+0x8],0x1000
0x080484d0 <+28>: lea eax,[ebp-0x1008]
0x080484d6 <+34>: mov DWORD PTR [esp+0x4],eax
0x080484da <+38>: mov DWORD PTR [esp],0x0
0x080484e1 <+45>: call 0x8048380 <read@plt>
0x080484e6 <+50>: mov DWORD PTR [esp+0x4],0xa
0x080484ee <+58>: lea eax,[ebp-0x1008]
0x080484f4 <+64>: mov DWORD PTR [esp],eax
0x080484f7 <+67>: call 0x80483d0 <strchr@plt>
0x080484fc <+72>: mov BYTE PTR [eax],0x0
0x080484ff <+75>: lea eax,[ebp-0x1008]
0x08048505 <+81>: mov DWORD PTR [esp+0x8],0x14
0x0804850d <+89>: mov DWORD PTR [esp+0x4],eax
0x08048511 <+93>: mov eax,DWORD PTR [ebp+0x8]
0x08048514 <+96>: mov DWORD PTR [esp],eax
0x08048517 <+99>: call 0x80483f0 <strncpy@plt>
0x0804851c <+104>: leave
0x0804851d <+105>: ret |
Dans ce bout de code, le strcpy recherche un '\n' dans une chaîne de caractères et assigne la valeur ou le pointeur pointe a '\0' sans passer par une tmp (il faut me le dire si je me trompe :aie:).
J'ai reproduit le même comportement, mais pas exactement le meme asm (ce n'est pas obligatoire, mais j'aimerais bien avoir le même asm ;)).
Voici mon code C qui a le même comportement :
Code:
1 2 3 4 5 6 7 8 9 10
| char *p(char *ptr, char *str)
{
char buff[0x1000];
puts(str);
read(STDIN_FILENO, buff, 0x1000);
str = strchr(buff, '\n');
*str = '\0';
return (strncpy(ptr, buff, 0x14));
} |
Mon problème est à la ligne du strchr et de la ligne suivante, j'ai trop d'ASM car je passe par une tmp contrairement au binaire de l'école.
Avez-vous une idée de comment faire ça sans passer par une variable tmp ?
Merci :)