Итак, я хочу попрактиковаться в выполнении атаки ret2lib c, и я играю с gdb в этой простой программе
// File: retlib.c
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("system = %p\n", system);
char c[] = "echo 123";
system(c);
return 0;
}
Теперь обратите внимание на это
Reading symbols from ./retlib...(no debugging symbols found)...done.
(gdb) p system
$1 = {<text variable, no debug info>} 0x4004b0 <system@plt>
(gdb) b main
Breakpoint 1 at 0x4005ea
(gdb) r
Starting program: /home/users/mickey/retlib
Breakpoint 1, 0x00000000004005ea in main ()
(gdb) p system
$2 = {<text variable, no debug info>} 0x7ffff7a523a0 <__libc_system>
(gdb) c
Continuing.
system = 0x4004b0
123
[Inferior 1 (process 11593) exited normally]
Мой вопрос почему я получаю 2 разных выхода адреса функции system
. И даже после того, как я запускаю программу, команда gdb говорит одно, а printf - другое. Я заметил, что теги для каждого адреса разные, но почему это происходит? Любая помощь будет оценена!