Het gaat er niet om of de shellcode wel of niet werkt met
een NULL byte er in.
Nee, Het ging erom dat je alle functies in c moest afsluiten met een NULL
byte. Dat je het niet kan injecteren via shellcode is een heel ander verhaal
en dan ben ik het met je eens. Dat stukje programma code zou een
overflow moeten geven omdat die geen NULL byte heeft. Want execve is
wel aangeroepen. Dus zou er ook een NULL byte bij hadden gemoeten.
Gezien het een c functie is.
Wanneer je push 0 toevoegd geeft die bij gdb aan
xor %edx,%edx
mov $0xb,%al
mov $0x804809a,ebx
push $0x0 mov %esp,%ecx
push %edx
int $0x80
Execve aanroep zonder NULL
xor %edx,%edx
mov $0xb,%al
mov $0x804809a,ebx
mov %esp,%ecx
push %edx
int $0x80
Hoe kan die dan toch execve uitvoeren?
Waneer ik die dan run in gdb geeft die aan. Bij label_one+9
0x80408b (label_one+9) add %al,0x0Is dat waar die de NULL toevoegd dan?
Jij maakt hier gebruik van een db waarbij je gewoon een fixed size array
van bytes declareert, dan wordt het gewoon door de compiler afgehandeld.
Daar was ik dus nieuwschierig na of die compiler dit wil dee. Gezien assembly anders is als gcc.