У меня есть программа, для которой я хотел понять состояние стека во время его выполнения.Мой пример программы достаточно прост,
#include <stdio.h>
int main(){
setuid(0);
system("/bin/bash");
return 1;
}
Теперь, когда я отлаживаю эту программу с помощью gdb, я получаю адрес функции setuid (), но когда я смотрю на стек, я не могу определить его адрес.
Состояние моего стека после начала выполнения main (),
Ajai@ubuntu:/tmp$ gdb -q mal
Reading symbols from /tmp/mal...done.
(gdb) b 2
Breakpoint 1 at 0x80483fd: file mal.c, line 2.
(gdb) r
Starting program: /tmp/mal
Breakpoint 1, main () at mal.c:4
4 setuid(0);
(gdb) x/32xw $esp
0xbffff3a0: 0x0015ed35 0x0011ea50 0x0804842b 0x0028bff4
0xbffff3b0: 0x08048420 0x00000000 0xbffff438 0x00145e37
0xbffff3c0: 0x00000001 0xbffff464 0xbffff46c 0x0012e414
0xbffff3d0: 0xffffffff 0x0012cff4 0x08048243 0x00000001
0xbffff3e0: 0xbffff420 0x0011da31 0x0012dad0 0xb7fffb48
0xbffff3f0: 0x00000001 0x0028bff4 0x00000000 0x00000000
0xbffff400: 0xbffff438 0xb68cac87 0x61d0d5f8 0x00000000
0xbffff410: 0x00000000 0x00000000 0x00000001 0x08048340
(gdb) p setuid
$1 = {<text variable, no debug info>} 0x1c8ee0 <setuid>
Неужели я смотрю на стек неправильно?
Я также хотел знать, как будет выглядеть адресВызов функции setuid () и ее параметра, а также вызов функции system () и ее параметра будут сохранены в стеке, когда функция main () начнет выполняться.
Извините, если вопрос такого рода уже задавалсяно я не смог найти.