Meestal wordt alleen een pointer naar de string op de stack
gepushed.
Ik was al bezig met zoeken na die pointer trouwens maar was opgevement
de draad kwijt. Was zo ver gekomen dat hetwel duidelijk is wat er gebeurd
met printf onder assembly.
push 0x804845b
call 0x8048268 (printf)
Bij het commando x/s 0x804845b gaf die weer:
0x80485b (_IO_stdin_used +11): "%sn";
Dat had ik ook gedeclared in printf("%sn",msg); Maar msg kan ik nergens
terug vinden.
Staat klaasje dan alleen maar in de pointer ?
Want waneer je onder GDB disas 0x8048268 zegt ie:
0x80486268 (printf): jmp *0x80955c
0x8048626e (printf+6): push $0x8
0x80486273 (printf+11): jmp 0x8048148 <_init+24);
Nu lijkt het erop dat die 8 bytes gerserveerd voor klaasje. Maar 0x80955c
verwijs na _global_offset_table_16 en niet na msg. Ook inet_24 niet want
dat adress van 0x8048148 verwijs na een string met iets als "y5[25504
bij%T25504b"
Ps. Heb het al gevonden. Met disals 0x804845b wat %sn was geeft die nu aan:
0x8048450 (_IO_stdin_used) add eax,(eax)
0x8048452 (_IO_stdin_used+2) add (eax),al
0x8048454 (_IO_stdin_used+4) push $0x6f6c6c65
0x8048459 (_IO_stdin_used+9) and eax,(eax)
0x804845b (_IO_stdin_used+11) and $0xa73,eax
Nu staat klaasje op het adress van 0x8048454 want bij x/s geeft die
0x8048454 (_IO_stdin_used+4) "klaasje"
Bij disas 0x804845b staat achter (_IO_stdin_used+4) push $0x6f6c6c65
betekend dat $0x6f6c6c65 de pointer is ?
char name[] Heb ik trouwens nog steeds niet terug kunnen vinden.