Адрес DL_info не совпадает с исполняемыми адресами

Я написал простую программу на C, которая использует объект DL_info для получения информации об адресе текущего фрейма функции, как показано ниже:

#include <execinfo.h>
#include <dlfcn.h>
#include <stdio.h>

int main(void) {
  void* callstack[128];
  int frames = backtrace(callstack, 128);

  Dl_info info;
  dladdr(callstack[0], &info);
  printf("%s %p\n", info.dli_sname, info.dli_saddr);
  return 0;
}

Запустив эту программу я получаю:

main 0x105d94ec0

Однако, изучая исполняемый файл, я обнаружил, что адрес main на самом деле:

a.out:
(__TEXT,__text) section
_main:
0000000100000ec0    pushq   %rbp

Мне было интересно, почему это так? Кажется, что адрес, найденный info.dli_saddr, на самом деле является смещением 5d94000 от фактической позиции функций.

0 ответов

Другие вопросы по тегам