Что такое раздел <.got> в ELF? - PullRequest
       81

Что такое раздел <.got> в ELF?

0 голосов
/ 28 августа 2018

Насколько я знаю, PLT и GOT - это раздел для работы с динамически связанной функцией.

Если код вызывает printf, который является функцией libc,
1. Сначала он вызывает PLT, чтобы получить адрес printf.
2. И запишите этот адрес в раздел GOT.
3. После второго вызова код использует функцию, записанную в GOT.

Когда я внимательно изучаю двоичный файл ELF,
- Я нашел название раздела PLT в ELF <.plt>.
- И название секции GOT в ELF - <.got.plt>.

Но ... В ELF был также раздел <.got>.
И я не мог понять, как этот раздел используется.



Q. Что такое использование <.got> раздела?
А в чем разница между <.got> и <.got.plt> секцией?



PS 1. Этот раздел <.got> был очень маленьким (в моем двоичном образце он содержит только 4 байта).
И здесь я прикрепляю представление IDA раздела <.got>:

.got:08049FFC ; ===========================================================================
.got:08049FFC
.got:08049FFC ; Segment type: Pure data
.got:08049FFC ; Segment permissions: Read/Write
.got:08049FFC _got            segment dword public 'DATA' use32
.got:08049FFC                 assume cs:_got
.got:08049FFC                 ;org 8049FFCh
.got:08049FFC __gmon_start___ptr dd offset __imp___gmon_start__
.got:08049FFC                                         ; DATA XREF: _init_proc+F↑r
.got:08049FFC                                         ; __gmon_start__↑r
.got:08049FFC _got            ends
.got:08049FFC


PS2. Я также проверил здесь , но мне не хватило ответа, чтобы понять использование раздела <.got>.

...