ldd шестнадцатеричный номер в скобках

При выполнении ldd для файла он возвращает шестнадцатеричное число в скобках для каждой найденной библиотеки.

Например:

root@server> ldd wpa_supplicant
        linux-gate.so.1 =>  (0xb779b000)
        libnl.so.1 => /usr/lib/libnl.so.1 (0xb774d000)
        libssl.so.1.0.0 => not found
        libcrypto.so.1.0.0 => not found
        libdl.so.2 => /lib/i686/cmov/libdl.so.2 (0xb7748000)
        libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb75ed000)
        libm.so.6 => /lib/i686/cmov/libm.so.6 (0xb75c7000)
        /lib/ld-linux.so.2 (0xb779c000)

Если шестнадцатеричный номер не совпадает с номером библиотеки, с которой когда-то был связан исполняемый файл, может возникнуть ошибка информации о версии.

У меня два вопроса:

  1. Откуда берется это значение?
  2. Как я могу узнать, какое шестнадцатеричное значение ищет исполняемый файл? (то есть тот, с которым он изначально был связан)

person Zulakis    schedule 01.11.2012    source источник
comment
Я не знаю этого точно, но я не думаю, что шестнадцатеричный номер имеет какое-либо отношение к версии библиотеки - я думаю, что это (предлагаемый/ожидаемый) адрес, по которому эта библиотека будет отображаться в адресном пространстве программы. когда вы его выполняете. Чтобы узнать, какая версия библиотеки вам нужна, попробуйте ldd -v.   -  person twalberg    schedule 02.11.2012
comment
Если эти значения не меняются каждый раз, когда вы запускаете ldd, просто разорвите эту систему на части и используйте настоящую, безопасную и обновленную систему Linux.   -  person BatchyX    schedule 02.11.2012
comment
Я думаю, полезно также отметить, что этот шестнадцатеричный адрес может варьироваться, как описано здесь: stackoverflow.com/questions/2217023/   -  person still_learning    schedule 12.04.2018


Ответы (1)


Шестнадцатеричные числа — это адреса памяти, в которые загружается соответствующая библиотека. Подробнее см. https://stackoverflow.com/a/5130690/637284.

person halex    schedule 01.11.2012