gdb показывает разные адреса для одной и той же функции? - PullRequest
1 голос
/ 10 июля 2020

Итак, я хочу попрактиковаться в выполнении атаки 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 - другое. Я заметил, что теги для каждого адреса разные, но почему это происходит? Любая помощь будет оценена!

1 Ответ

1 голос
/ 10 июля 2020

Перед запуском программы gdb даст вам адрес таблицы связи процедур (.plt), после запуска адрес функции lib c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...