[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"page-ru-/guides/linux/ldd-usage":3,"mdc-qmz6w3-key":834,"mdc-ocn1c8-key":844,"mdc-v7rnzz-key":852,"mdc-5sye3s-key":876,"mdc--d6juuf-key":906,"mdc-7he2ja-key":936,"mdc-rlp47n-key":961,"mdc--s82nq0-key":969,"mdc-v6tk54-key":993,"related-/guides/linux/checking-library-dependencies,/guides/linux/understanding-elf-format":1023},{"id":4,"title":5,"appliesTo":6,"author":9,"body":10,"canonical":765,"code":765,"createdAt":766,"description":767,"difficulty":768,"draft":769,"estimatedTime":770,"extension":771,"faq":772,"howToSteps":785,"howToTotalTime":801,"image":765,"keywords":802,"locale":813,"meta":814,"navigation":815,"path":816,"platform":817,"related":818,"section":821,"seo":822,"severity":765,"stem":823,"summary":824,"tags":825,"twitterCreator":765,"twitterSite":765,"type":832,"updatedAt":766,"__hash__":833},"content_ru/guides/linux/ldd-usage.md","Как использовать ldd для анализа зависимостей библиотек в Linux",[7,8],"Linux (Ubuntu 22.04+, CentOS 7+, Debian 11+)","Любой дистрибутив с установленной утилитой ldd","FixPedia Team",{"type":11,"value":12,"toc":751},"minimark",[13,18,40,64,67,71,74,140,144,149,152,165,170,178,181,212,216,253,257,264,407,411,481,485,568,571,575,578,605,608,612,738,747],[14,15,17],"h2",{"id":16},"введение-зачем-это-нужно","Введение / Зачем это нужно",[19,20,21,22,26,27,31,32,35,36,39],"p",{},"Утилита ",[23,24,25],"code",{},"ldd"," (List Dynamic Dependencies) — это стандартный инструмент в Linux для просмотра ",[28,29,30],"strong",{},"динамических зависимостей"," исполняемого файла. Она показывает, какие ",[28,33,34],{},"разделяемые библиотеки"," (файлы ",[23,37,38],{},".so",") требуется загрузить программе при запуске. Это незаменимо для:",[41,42,43,51,54],"ul",{},[44,45,46,47,50],"li",{},"Диагностики ошибок ",[23,48,49],{},"error while loading shared libraries: libXYZ.so: cannot open shared object file",".",[44,52,53],{},"Понимания, какие пакеты нужно установить на чистую систему.",[44,55,56,57,60,61,50],{},"Проверки целостности бинарника и обнаружения потенциальных проблем с ",[23,58,59],{},"RPATH","/",[23,62,63],{},"RUNPATH",[19,65,66],{},"После выполнения этого гайда вы сможете быстро находить и устранять проблемы с отсутствующими библиотеками.",[14,68,70],{"id":69},"требования-подготовка","Требования / Подготовка",[19,72,73],{},"Перед началом убедитесь, что:",[75,76,77,84,119,130],"ol",{},[44,78,79,80,83],{},"У вас есть доступ к ",[28,81,82],{},"терминалу Linux"," (Ubuntu, CentOS, Fedora, Debian и т.д.).",[44,85,86,87,89,90,93,94,97,98],{},"Установлена утилита ",[23,88,25],{},". Обычно она входит в пакет ",[23,91,92],{},"libc6"," (Debian/Ubuntu) или ",[23,95,96],{},"glibc"," (RHEL/CentOS). Проверить можно командой:\n",[99,100,105],"pre",{"className":101,"code":102,"language":103,"meta":104,"style":104},"language-bash shiki shiki-themes github-light github-dark","ldd --version\n","bash","",[23,106,107],{"__ignoreMap":104},[108,109,112,115],"span",{"class":110,"line":111},"line",1,[108,113,25],{"class":114},"sScJk",[108,116,118],{"class":117},"sj4cs"," --version\n",[44,120,121,122,125,126,129],{},"У вас есть ",[28,123,124],{},"исполняемый файл"," (ELF-формат), который нужно проанализировать. Это может быть любой бинарник в системе, например ",[23,127,128],{},"/usr/bin/ls"," или ваш собственный скомпилированный файл.",[44,131,121,132,135,136,139],{},[28,133,134],{},"права на чтение"," файла. Если файл принадлежит другому пользователю, используйте ",[23,137,138],{},"sudo"," или скопируйте его в свою директорию.",[14,141,143],{"id":142},"пошаговая-инструкция","Пошаговая инструкция",[145,146,148],"h3",{"id":147},"шаг-1-базовый-запуск-ldd","Шаг 1: Базовый запуск ldd",[19,150,151],{},"Просто укажите путь к исполняемому файлу:",[99,153,155],{"className":101,"code":154,"language":103,"meta":104,"style":104},"ldd /bin/ls\n",[23,156,157],{"__ignoreMap":104},[108,158,159,161],{"class":110,"line":111},[108,160,25],{"class":114},[108,162,164],{"class":163},"sZZnC"," /bin/ls\n",[19,166,167],{},[28,168,169],{},"Пример вывода:",[99,171,176],{"className":172,"code":174,"language":175},[173],"language-text","linux-vdso.so.1 (0x00007ffd6d7f9000)\nlibselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f8c1a400000)\nlibc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f8c19e00000)\nlibpcre2-8.so.0 => /lib/x86_64-linux-gnu/libpcre2-8.so.0 (0x00007f8c19a00000)\n/lib64/ld-linux-x86-64.so.2 (0x00007f8c1a800000)\n","text",[23,177,174],{"__ignoreMap":104},[19,179,180],{},"Каждая строка содержит:",[41,182,183,193,206],{},[44,184,185,188,189,192],{},[28,186,187],{},"Имя библиотеки"," (например, ",[23,190,191],{},"libc.so.6",").",[44,194,195,201,202,205],{},[28,196,197,198],{},"Стрелка ",[23,199,200],{},"=>"," и ",[28,203,204],{},"полный путь",", по которому библиотека будет загружена.",[44,207,208,211],{},[28,209,210],{},"Адрес в памяти"," (в скобках), если библиотека уже загружена в текущем процессе (может отличаться при каждом запуске).",[145,213,215],{"id":214},"шаг-2-интерпретация-ключевых-элементов","Шаг 2: Интерпретация ключевых элементов",[41,217,218,226,234],{},[44,219,220,225],{},[28,221,222],{},[23,223,224],{},"linux-vdso.so.1"," — виртуальная динамическая библиотека, предоставляемая ядром (не реальный файл на диске).",[44,227,228,233],{},[28,229,230],{},[23,231,232],{},"/lib64/ld-linux-x86-64.so.2"," — динамический загрузчик (интерпретатор), без него программа не запустится.",[44,235,236,237,242,243,246,247,246,250,192],{},"Если вместо пути указано ",[28,238,239],{},[23,240,241],{},"not found",", библиотека отсутствует в стандартных путях поиска (",[23,244,245],{},"/lib",", ",[23,248,249],{},"/usr/lib",[23,251,252],{},"LD_LIBRARY_PATH",[145,254,256],{"id":255},"шаг-3-обработка-отсутствующих-библиотек","Шаг 3: Обработка отсутствующих библиотек",[19,258,259,260,263],{},"Если в выводе есть строки вида ",[23,261,262],{},"libsomething.so => not found",", выполните:",[75,265,266,339,382,399],{},[44,267,268,271,272,288,291,292,294,295,50,298,300,301,320,322,323],{},[28,269,270],{},"Найдите пакет",", содержащий библиотеку. Для Debian/Ubuntu:",[99,273,275],{"className":101,"code":274,"language":103,"meta":104,"style":104},"apt-file search libsomething.so\n",[23,276,277],{"__ignoreMap":104},[108,278,279,282,285],{"class":110,"line":111},[108,280,281],{"class":114},"apt-file",[108,283,284],{"class":163}," search",[108,286,287],{"class":163}," libsomething.so\n",[289,290],"br",{},"Если ",[23,293,281],{}," не установлен,先 установите его: ",[23,296,297],{},"sudo apt update && sudo apt install apt-file && sudo apt-file update",[289,299],{},"Для RHEL/CentOS/Fedora:",[99,302,304],{"className":101,"code":303,"language":103,"meta":104,"style":104},"yum provides */libsomething.so\n",[23,305,306],{"__ignoreMap":104},[108,307,308,311,314,317],{"class":110,"line":111},[108,309,310],{"class":114},"yum",[108,312,313],{"class":163}," provides",[108,315,316],{"class":117}," *",[108,318,319],{"class":163},"/libsomething.so\n",[289,321],{},"или",[99,324,326],{"className":101,"code":325,"language":103,"meta":104,"style":104},"dnf provides */libsomething.so\n",[23,327,328],{"__ignoreMap":104},[108,329,330,333,335,337],{"class":110,"line":111},[108,331,332],{"class":114},"dnf",[108,334,313],{"class":163},[108,336,316],{"class":117},[108,338,319],{"class":163},[44,340,341,344,345],{},[28,342,343],{},"Установите найденный пакет",":",[99,346,348],{"className":101,"code":347,"language":103,"meta":104,"style":104},"sudo apt install имя_пакета   # Debian/Ubuntu\nsudo yum install имя_пакета   # RHEL/CentOS\n",[23,349,350,367],{"__ignoreMap":104},[108,351,352,354,357,360,363],{"class":110,"line":111},[108,353,138],{"class":114},[108,355,356],{"class":163}," apt",[108,358,359],{"class":163}," install",[108,361,362],{"class":163}," имя_пакета",[108,364,366],{"class":365},"sJ8bj","   # Debian/Ubuntu\n",[108,368,370,372,375,377,379],{"class":110,"line":369},2,[108,371,138],{"class":114},[108,373,374],{"class":163}," yum",[108,376,359],{"class":163},[108,378,362],{"class":163},[108,380,381],{"class":365},"   # RHEL/CentOS\n",[44,383,384,344,387],{},[28,385,386],{},"Обновите кэш библиотек",[99,388,390],{"className":101,"code":389,"language":103,"meta":104,"style":104},"sudo ldconfig\n",[23,391,392],{"__ignoreMap":104},[108,393,394,396],{"class":110,"line":111},[108,395,138],{"class":114},[108,397,398],{"class":163}," ldconfig\n",[44,400,401,404,405,50],{},[28,402,403],{},"Повторно проверьте"," файл командой ",[23,406,25],{},[145,408,410],{"id":409},"шаг-4-использование-опций-для-расширенного-анализа","Шаг 4: Использование опций для расширенного анализа",[41,412,413,441,471],{},[44,414,415,421,422,425,426],{},[28,416,417,420],{},[23,418,419],{},"-v"," (verbose)"," — показывает ",[28,423,424],{},"все"," совпадения библиотек, включая дубликаты, и версии.",[99,427,429],{"className":101,"code":428,"language":103,"meta":104,"style":104},"ldd -v /usr/bin/ssh\n",[23,430,431],{"__ignoreMap":104},[108,432,433,435,438],{"class":110,"line":111},[108,434,25],{"class":114},[108,436,437],{"class":117}," -v",[108,439,440],{"class":163}," /usr/bin/ssh\n",[44,442,443,448,449,452,453,456,457],{},[28,444,445],{},[23,446,447],{},"-u"," — выводит ",[28,450,451],{},"неиспользуемые"," прямые зависимости (полезно для очистки ",[23,454,455],{},"DT_NEEDED"," в ELF-заголовке).",[99,458,460],{"className":101,"code":459,"language":103,"meta":104,"style":104},"ldd -u /usr/bin/ssh\n",[23,461,462],{"__ignoreMap":104},[108,463,464,466,469],{"class":110,"line":111},[108,465,25],{"class":114},[108,467,468],{"class":117}," -u",[108,470,440],{"class":163},[44,472,473,478,479,50],{},[28,474,475],{},[23,476,477],{},"--version"," — показывает версию утилиты ",[23,480,25],{},[145,482,484],{"id":483},"шаг-5-безопасность-и-альтернативы","Шаг 5: Безопасность и альтернативы",[486,487,488,512,538,540,561],"blockquote",{},[19,489,490,491,494,495,497,498,501,502,60,505,508,509,511],{},"⚠️ ",[28,492,493],{},"Важно",": Запуск ",[23,496,25],{}," на ",[28,499,500],{},"недоверенных"," исполняемых файлах может быть опасен! Некоторые бинарники могут выполнить код через ",[23,503,504],{},"DT_RPATH",[23,506,507],{},"DT_RUNPATH",". Вместо ",[23,510,25],{}," для безопасности используйте:",[99,513,515],{"className":101,"code":514,"language":103,"meta":104,"style":104},"objdump -p /path/to/file | grep NEEDED\n",[23,516,517],{"__ignoreMap":104},[108,518,519,522,525,528,532,535],{"class":110,"line":111},[108,520,521],{"class":114},"objdump",[108,523,524],{"class":117}," -p",[108,526,527],{"class":163}," /path/to/file",[108,529,531],{"class":530},"szBVR"," |",[108,533,534],{"class":114}," grep",[108,536,537],{"class":163}," NEEDED\n",[19,539,322],{},[99,541,543],{"className":101,"code":542,"language":103,"meta":104,"style":104},"readelf -d /path/to/file | grep NEEDED\n",[23,544,545],{"__ignoreMap":104},[108,546,547,550,553,555,557,559],{"class":110,"line":111},[108,548,549],{"class":114},"readelf",[108,551,552],{"class":117}," -d",[108,554,527],{"class":163},[108,556,531],{"class":530},[108,558,534],{"class":114},[108,560,537],{"class":163},[19,562,563,564,567],{},"Эти команды только ",[28,565,566],{},"читают"," ELF-заголовок, не выполняя никакого кода.",[569,570],"in-article-ad",{},[14,572,574],{"id":573},"проверка-результата","Проверка результата",[19,576,577],{},"Успешный результат:",[41,579,580,592,598],{},[44,581,582,583,585,586,589,590,50],{},"В выводе ",[23,584,25],{}," ",[28,587,588],{},"отсутствуют"," строки с ",[23,591,241],{},[44,593,594,595,50],{},"Все библиотеки имеют ",[28,596,597],{},"полные пути",[44,599,600,601,604],{},"Динамический загрузчик (",[23,602,603],{},"ld-linux.so",") указан корректно.",[19,606,607],{},"Если вы устанавливали недостающие библиотеки, перезапустите программу, чтобы убедиться, что она запускается без ошибок.",[14,609,611],{"id":610},"возможные-проблемы","Возможные проблемы",[613,614,615,631],"table",{},[616,617,618],"thead",{},[619,620,621,625,628],"tr",{},[622,623,624],"th",{},"Проблема",[622,626,627],{},"Симптомы",[622,629,630],{},"Решение",[632,633,634,653,671,690,713],"tbody",{},[619,635,636,642,647],{},[637,638,639],"td",{},[28,640,641],{},"Библиотека не найдена",[637,643,644],{},[23,645,646],{},"libXYZ.so => not found",[637,648,649,650,50],{},"Установите пакет, содержащий библиотеку, и выполните ",[23,651,652],{},"sudo ldconfig",[619,654,655,660,665],{},[637,656,657],{},[28,658,659],{},"Неправильная архитектура",[637,661,662],{},[23,663,664],{},"ldd: /path/file: failed to load module: invalid ELF header",[637,666,667,668,192],{},"Файл скомпилирован для другой архитектуры (например, 32-битный на 64-битной системе). Установите совместимые библиотеки (например, ",[23,669,670],{},"libc6-i386",[619,672,673,678,684],{},[637,674,675],{},[28,676,677],{},"Статический бинарник",[637,679,680,683],{},[23,681,682],{},"statically linked"," в выводе",[637,685,686,687,689],{},"Библиотеки встроены в файл. Зависимости отсутствуют, ",[23,688,25],{}," не применим.",[619,691,692,697,702],{},[637,693,694],{},[28,695,696],{},"Нет прав на чтение",[637,698,699],{},[23,700,701],{},"ldd: /path/file: Permission denied",[637,703,704,705,708,709,712],{},"Добавьте права: ",[23,706,707],{},"chmod +r /path/file"," или используйте ",[23,710,711],{},"sudo ldd /path/file"," (осторожно!).",[619,714,715,720,723],{},[637,716,717],{},[28,718,719],{},"Устаревшая версия ldd",[637,721,722],{},"Неожиданный формат вывода или ошибки",[637,724,725,726,60,728,730,731,734,735,50],{},"Обновите пакет ",[23,727,92],{},[23,729,96],{},": ",[23,732,733],{},"sudo apt upgrade libc6"," или ",[23,736,737],{},"sudo yum update glibc",[19,739,740,741,201,743,746],{},"Если проблема не решена, проверьте переменные окружения ",[23,742,252],{},[23,744,745],{},"LD_DEBUG"," для детальной диагностики загрузки библиотек.",[748,749,750],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":104,"searchDepth":369,"depth":369,"links":752},[753,754,755,763,764],{"id":16,"depth":369,"text":17},{"id":69,"depth":369,"text":70},{"id":142,"depth":369,"text":143,"children":756},[757,759,760,761,762],{"id":147,"depth":758,"text":148},3,{"id":214,"depth":758,"text":215},{"id":255,"depth":758,"text":256},{"id":409,"depth":758,"text":410},{"id":483,"depth":758,"text":484},{"id":573,"depth":369,"text":574},{"id":610,"depth":369,"text":611},null,"2026-02-17 11:10:27","Узнайте, как с помощью ldd найти все зависимости исполняемого файла. Пошаговая инструкция с примерами и советами по безопасности. Начните анализировать библиотеки за 5 минут!","easy",false,"5-10 мин","md",[773,776,779,782],{"question":774,"answer":775},"Зачем вообще нужна команда ldd?","ldd показывает, какие динамические библиотеки (.so файлы) требует для работы исполняемый файл. Это помогает диагностировать ошибки 'library not found' и понять, какие пакеты нужно установить.",{"question":777,"answer":778},"Можно ли использовать ldd для статических бинарников?","Нет. Для статически скомпилированных файлов ldd выведет сообщение 'statically linked', так как все библиотеки уже встроены в бинарник.",{"question":780,"answer":781},"Безопасно ли запускать ldd на неизвестных файлах?","Не всегда. ldd может выполнить код из библиотек, если бинарник содержит специальные директивы (например, DT_RPATH). Для безопасности используйте `ldd --verify` или анализатор `objdump -p`.",{"question":783,"answer":784},"Что делать, если ldd показывает 'not found' для библиотеки?","Установите соответствующий пакет (например, `sudo apt install libssl1.1`), проверьте переменную окружения `LD_LIBRARY_PATH` или обновите кэш библиотек командой `sudo ldconfig`.",[786,789,792,795,798],{"name":787,"text":788},"Проверьте наличие утилиты ldd","Откройте терминал и выполните `ldd --version`. Если команда не найдена, установите пакет `libc6` (Debian/Ubuntu) или `glibc` (RHEL/CentOS).",{"name":790,"text":791},"Запустите ldd на целевом исполняемом файле","Введите `ldd /путь/к/файлу`. Убедитесь, что у вас есть права на чтение файла (используйте `ls -l` для проверки).",{"name":793,"text":794},"Проанализируйте вывод","Каждая строка вывода показывает имя библиотеки и адрес, по которому она будет загружена. Обратите внимание на записи 'not found' — они указывают на отсутствующие зависимости.",{"name":796,"text":797},"Установите недостающие библиотеки","Для каждой библиотеки с 'not found' найдите принадлежащий ей пакет. В Debian/Ubuntu используйте `apt-file search имя_библиотеки.so`, в RHEL/CentOS — `yum provides */имя_библиотеки.so`.",{"name":799,"text":800},"Используйте дополнительные опции для детального анализа","Добавьте флаг `-v` для вывода версий библиотек или `-u` для отображения неиспользуемых прямых зависимостей. Пример: `ldd -v /usr/bin/ssh`.","PT10M",[803,804,805,806,807,808,809,810,811,812],"ldd команда","как использовать ldd","зависимости библиотек linux","анализ исполняемого файла ldd","ldd вывод","недостающие библиотеки linux","динамические библиотеки ldd","проверка зависимостей linux","ldd примеры","утилита ldd","ru_RU",{},true,"/guides/linux/ldd-usage","linux",[819,820],"/guides/linux/checking-library-dependencies","/guides/linux/understanding-elf-format","Гайды Linux",{"title":5,"description":767},"guides/linux/ldd-usage","Это руководство объясняет, как использовать утилиту ldd для отображения зависимостей динамических библиотек в Linux. Вы научитесь анализировать исполняемые файлы и находить недостающие библиотеки.",[826,827,828,829,25,830,831],"линукс","библиотеки","команда","зависимости","dynamic linking","shared libraries","guide","CBxc7sXYsXVTa5vXPCFvnLrTGkY5z5ZBjMzTme_WU58",{"data":835,"body":836},{},{"type":837,"children":838},"root",[839],{"type":840,"tag":19,"props":841,"children":842},"element",{},[843],{"type":175,"value":775},{"data":845,"body":846},{},{"type":837,"children":847},[848],{"type":840,"tag":19,"props":849,"children":850},{},[851],{"type":175,"value":778},{"data":853,"body":854},{},{"type":837,"children":855},[856],{"type":840,"tag":19,"props":857,"children":858},{},[859,861,867,869,875],{"type":175,"value":860},"Не всегда. ldd может выполнить код из библиотек, если бинарник содержит специальные директивы (например, DT_RPATH). Для безопасности используйте ",{"type":840,"tag":23,"props":862,"children":864},{"className":863},[],[865],{"type":175,"value":866},"ldd --verify",{"type":175,"value":868}," или анализатор ",{"type":840,"tag":23,"props":870,"children":872},{"className":871},[],[873],{"type":175,"value":874},"objdump -p",{"type":175,"value":50},{"data":877,"body":878},{},{"type":837,"children":879},[880],{"type":840,"tag":19,"props":881,"children":882},{},[883,885,891,893,898,900,905],{"type":175,"value":884},"Установите соответствующий пакет (например, ",{"type":840,"tag":23,"props":886,"children":888},{"className":887},[],[889],{"type":175,"value":890},"sudo apt install libssl1.1",{"type":175,"value":892},"), проверьте переменную окружения ",{"type":840,"tag":23,"props":894,"children":896},{"className":895},[],[897],{"type":175,"value":252},{"type":175,"value":899}," или обновите кэш библиотек командой ",{"type":840,"tag":23,"props":901,"children":903},{"className":902},[],[904],{"type":175,"value":652},{"type":175,"value":50},{"data":907,"body":908},{},{"type":837,"children":909},[910],{"type":840,"tag":19,"props":911,"children":912},{},[913,915,921,923,928,929,934],{"type":175,"value":914},"Откройте терминал и выполните ",{"type":840,"tag":23,"props":916,"children":918},{"className":917},[],[919],{"type":175,"value":920},"ldd --version",{"type":175,"value":922},". Если команда не найдена, установите пакет ",{"type":840,"tag":23,"props":924,"children":926},{"className":925},[],[927],{"type":175,"value":92},{"type":175,"value":93},{"type":840,"tag":23,"props":930,"children":932},{"className":931},[],[933],{"type":175,"value":96},{"type":175,"value":935}," (RHEL/CentOS).",{"data":937,"body":938},{},{"type":837,"children":939},[940],{"type":840,"tag":19,"props":941,"children":942},{},[943,945,951,953,959],{"type":175,"value":944},"Введите ",{"type":840,"tag":23,"props":946,"children":948},{"className":947},[],[949],{"type":175,"value":950},"ldd /путь/к/файлу",{"type":175,"value":952},". Убедитесь, что у вас есть права на чтение файла (используйте ",{"type":840,"tag":23,"props":954,"children":956},{"className":955},[],[957],{"type":175,"value":958},"ls -l",{"type":175,"value":960}," для проверки).",{"data":962,"body":963},{},{"type":837,"children":964},[965],{"type":840,"tag":19,"props":966,"children":967},{},[968],{"type":175,"value":794},{"data":970,"body":971},{},{"type":837,"children":972},[973],{"type":840,"tag":19,"props":974,"children":975},{},[976,978,984,986,992],{"type":175,"value":977},"Для каждой библиотеки с 'not found' найдите принадлежащий ей пакет. В Debian/Ubuntu используйте ",{"type":840,"tag":23,"props":979,"children":981},{"className":980},[],[982],{"type":175,"value":983},"apt-file search имя_библиотеки.so",{"type":175,"value":985},", в RHEL/CentOS — ",{"type":840,"tag":23,"props":987,"children":989},{"className":988},[],[990],{"type":175,"value":991},"yum provides */имя_библиотеки.so",{"type":175,"value":50},{"data":994,"body":995},{},{"type":837,"children":996},[997],{"type":840,"tag":19,"props":998,"children":999},{},[1000,1002,1007,1009,1014,1016,1022],{"type":175,"value":1001},"Добавьте флаг ",{"type":840,"tag":23,"props":1003,"children":1005},{"className":1004},[],[1006],{"type":175,"value":419},{"type":175,"value":1008}," для вывода версий библиотек или ",{"type":840,"tag":23,"props":1010,"children":1012},{"className":1011},[],[1013],{"type":175,"value":447},{"type":175,"value":1015}," для отображения неиспользуемых прямых зависимостей. Пример: ",{"type":840,"tag":23,"props":1017,"children":1019},{"className":1018},[],[1020],{"type":175,"value":1021},"ldd -v /usr/bin/ssh",{"type":175,"value":50},[1024],{"id":1025,"title":1026,"appliesTo":1027,"author":9,"body":1030,"canonical":765,"code":765,"createdAt":1527,"description":1528,"difficulty":1529,"draft":769,"estimatedTime":1530,"extension":771,"faq":1531,"howToSteps":1541,"howToTotalTime":1557,"image":765,"keywords":1558,"locale":813,"meta":1564,"navigation":815,"path":820,"platform":817,"related":1565,"section":821,"seo":1569,"severity":1529,"stem":1570,"summary":1571,"tags":1572,"twitterCreator":765,"twitterSite":765,"type":832,"updatedAt":1527,"__hash__":1578},"content_ru/guides/linux/understanding-elf-format.md","Понимание ELF формата: Полное руководство для Linux",[1028,1029],"Linux (любые дистрибутивы)","GNU Binutils",{"type":11,"value":1031,"toc":1512},[1032,1036,1039,1041,1044,1055,1058,1083,1087,1090,1112,1115,1119,1126,1137,1140,1146,1153,1157,1163,1177,1180,1197,1201,1204,1218,1221,1259,1263,1266,1324,1327,1329,1333,1336,1350,1353,1364,1366,1369,1417,1420,1422,1426,1429,1444,1448,1451,1472,1476,1479,1506,1509],[1033,1034,1026],"h1",{"id":1035},"понимание-elf-формата-полное-руководство-для-linux",[19,1037,1038],{},"ELF (Executable and Linkable Format) — это стандартный формат исполняемых файлов, объектных файлов и разделяемых библиотек в Unix-подобных системах. Понимание ELF формата необходимо для разработчиков, системных администраторов и всех, кто работает с низкоуровневыми аспектами Linux.",[14,1040,70],{"id":69},[19,1042,1043],{},"Перед началом работы вам понадобятся:",[41,1045,1046,1049,1052],{},[44,1047,1048],{},"Дистрибутив Linux (любой)",[44,1050,1051],{},"Права доступа root или sudo",[44,1053,1054],{},"Установленные GNU Binutils (обычно предустановлены)",[19,1056,1057],{},"Установите необходимые инструменты, если они отсутствуют:",[99,1059,1061],{"className":101,"code":1060,"language":103,"meta":104,"style":104},"sudo apt update\nsudo apt install binutils\n",[23,1062,1063,1072],{"__ignoreMap":104},[108,1064,1065,1067,1069],{"class":110,"line":111},[108,1066,138],{"class":114},[108,1068,356],{"class":163},[108,1070,1071],{"class":163}," update\n",[108,1073,1074,1076,1078,1080],{"class":110,"line":369},[108,1075,138],{"class":114},[108,1077,356],{"class":163},[108,1079,359],{"class":163},[108,1081,1082],{"class":163}," binutils\n",[14,1084,1086],{"id":1085},"шаг-1-установка-необходимых-инструментов","Шаг 1: Установка необходимых инструментов",[19,1088,1089],{},"GNU Binutils — это набор утилит для работы с бинарными файлами, включая ELF формат. Убедитесь, что у вас установлены основные инструменты:",[99,1091,1093],{"className":101,"code":1092,"language":103,"meta":104,"style":104},"which readelf objdump nm file\n",[23,1094,1095],{"__ignoreMap":104},[108,1096,1097,1100,1103,1106,1109],{"class":110,"line":111},[108,1098,1099],{"class":117},"which",[108,1101,1102],{"class":163}," readelf",[108,1104,1105],{"class":163}," objdump",[108,1107,1108],{"class":163}," nm",[108,1110,1111],{"class":163}," file\n",[19,1113,1114],{},"Если какой-либо инструмент отсутствует, установите пакет binutils. Эти утилиты предоставляют полный набор функций для анализа и работы с ELF файлами.",[14,1116,1118],{"id":1117},"шаг-2-проверка-типа-файла","Шаг 2: Проверка типа файла",[19,1120,1121,1122,1125],{},"Первым шагом при работе с любым бинарным файлом является определение его типа. Команда ",[23,1123,1124],{},"file"," показывает информацию о формате файла:",[99,1127,1129],{"className":101,"code":1128,"language":103,"meta":104,"style":104},"file /bin/ls\n",[23,1130,1131],{"__ignoreMap":104},[108,1132,1133,1135],{"class":110,"line":111},[108,1134,1124],{"class":114},[108,1136,164],{"class":163},[19,1138,1139],{},"Вывод будет примерно таким:",[99,1141,1144],{"className":1142,"code":1143,"language":175},[173],"/bin/ls: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=..., stripped\n",[23,1145,1143],{"__ignoreMap":104},[19,1147,1148,1149,1152],{},"Это говорит нам, что ",[23,1150,1151],{},"/bin/ls"," — 64-битный ELF файл для архитектуры x86-64, динамически связанный и без отладочной информации (stripped).",[14,1154,1156],{"id":1155},"шаг-3-анализ-заголовка-elf-файла","Шаг 3: Анализ заголовка ELF файла",[19,1158,1159,1160,1162],{},"Заголовок ELF файла содержит основную информацию о файле. Используйте ",[23,1161,549],{}," для его анализа:",[99,1164,1166],{"className":101,"code":1165,"language":103,"meta":104,"style":104},"readelf -h /bin/ls\n",[23,1167,1168],{"__ignoreMap":104},[108,1169,1170,1172,1175],{"class":110,"line":111},[108,1171,549],{"class":114},[108,1173,1174],{"class":117}," -h",[108,1176,164],{"class":163},[19,1178,1179],{},"Вы увидите информацию о:",[41,1181,1182,1185,1188,1191,1194],{},[44,1183,1184],{},"Типе файла (исполняемый, объектный, разделяемая библиотека)",[44,1186,1187],{},"Архитектуре (x86-64, ARM и т.д.)",[44,1189,1190],{},"Версии ELF",[44,1192,1193],{},"Точке входа (entry point)",[44,1195,1196],{},"Расположении заголовков программ и секций",[14,1198,1200],{"id":1199},"шаг-4-изучение-секций","Шаг 4: Изучение секций",[19,1202,1203],{},"ELF файлы состоят из секций, каждая из которых выполняет определенную функцию. Проанализируйте секции:",[99,1205,1207],{"className":101,"code":1206,"language":103,"meta":104,"style":104},"readelf -S /bin/ls\n",[23,1208,1209],{"__ignoreMap":104},[108,1210,1211,1213,1216],{"class":110,"line":111},[108,1212,549],{"class":114},[108,1214,1215],{"class":117}," -S",[108,1217,164],{"class":163},[19,1219,1220],{},"Ключевые секции включают:",[41,1222,1223,1229,1235,1241,1247,1253],{},[44,1224,1225,1228],{},[23,1226,1227],{},".text"," — исполняемый код",[44,1230,1231,1234],{},[23,1232,1233],{},".data"," — инициализированные данные",[44,1236,1237,1240],{},[23,1238,1239],{},".rodata"," — константы",[44,1242,1243,1246],{},[23,1244,1245],{},".bss"," — неинициализированные данные",[44,1248,1249,1252],{},[23,1250,1251],{},".symtab"," — таблица символов",[44,1254,1255,1258],{},[23,1256,1257],{},".strtab"," — строковая таблица",[14,1260,1262],{"id":1261},"шаг-5-просмотр-импортов-и-экспортов","Шаг 5: Просмотр импортов и экспортов",[19,1264,1265],{},"Для понимания зависимостей и интерфейсов ELF файла используйте:",[99,1267,1269],{"className":101,"code":1268,"language":103,"meta":104,"style":104},"# Просмотр динамических зависимостей\nreadelf -d /bin/ls\n\n# Просмотр символов\nnm /bin/ls\n\n# Или более подробно\nreadelf -s /bin/ls\n",[23,1270,1271,1276,1284,1289,1295,1303,1308,1314],{"__ignoreMap":104},[108,1272,1273],{"class":110,"line":111},[108,1274,1275],{"class":365},"# Просмотр динамических зависимостей\n",[108,1277,1278,1280,1282],{"class":110,"line":369},[108,1279,549],{"class":114},[108,1281,552],{"class":117},[108,1283,164],{"class":163},[108,1285,1286],{"class":110,"line":758},[108,1287,1288],{"emptyLinePlaceholder":815},"\n",[108,1290,1292],{"class":110,"line":1291},4,[108,1293,1294],{"class":365},"# Просмотр символов\n",[108,1296,1298,1301],{"class":110,"line":1297},5,[108,1299,1300],{"class":114},"nm",[108,1302,164],{"class":163},[108,1304,1306],{"class":110,"line":1305},6,[108,1307,1288],{"emptyLinePlaceholder":815},[108,1309,1311],{"class":110,"line":1310},7,[108,1312,1313],{"class":365},"# Или более подробно\n",[108,1315,1317,1319,1322],{"class":110,"line":1316},8,[108,1318,549],{"class":114},[108,1320,1321],{"class":117}," -s",[108,1323,164],{"class":163},[19,1325,1326],{},"Это покажет, какие библиотеки используются и какие функции экспортируются или импортируются.",[569,1328],{},[14,1330,1332],{"id":1331},"шаг-6-анализ-программных-заголовков","Шаг 6: Анализ программных заголовков",[19,1334,1335],{},"Программные заголовки описывают, как операционная система должна загрузить файл в память:",[99,1337,1339],{"className":101,"code":1338,"language":103,"meta":104,"style":104},"readelf -l /bin/ls\n",[23,1340,1341],{"__ignoreMap":104},[108,1342,1343,1345,1348],{"class":110,"line":111},[108,1344,549],{"class":114},[108,1346,1347],{"class":117}," -l",[108,1349,164],{"class":163},[19,1351,1352],{},"Вы увидите сегменты, такие как:",[41,1354,1355,1358,1361],{},[44,1356,1357],{},"LOAD — загружаемые сегменты",[44,1359,1360],{},"DYNAMIC — динамическая секция",[44,1362,1363],{},"INTERP — интерпретатор",[14,1365,574],{"id":573},[19,1367,1368],{},"Чтобы убедиться, что вы правильно анализируете ELF файлы, попробуйте применить эти команды к разным типам файлов:",[99,1370,1372],{"className":101,"code":1371,"language":103,"meta":104,"style":104},"# Анализ объектного файла\ngcc -c test.c\nreadelf -h test.o\n\n# Анализ разделяемой библиотеки\nreadelf -h /usr/lib/libc.so.6\n",[23,1373,1374,1379,1390,1399,1403,1408],{"__ignoreMap":104},[108,1375,1376],{"class":110,"line":111},[108,1377,1378],{"class":365},"# Анализ объектного файла\n",[108,1380,1381,1384,1387],{"class":110,"line":369},[108,1382,1383],{"class":114},"gcc",[108,1385,1386],{"class":117}," -c",[108,1388,1389],{"class":163}," test.c\n",[108,1391,1392,1394,1396],{"class":110,"line":758},[108,1393,549],{"class":114},[108,1395,1174],{"class":117},[108,1397,1398],{"class":163}," test.o\n",[108,1400,1401],{"class":110,"line":1291},[108,1402,1288],{"emptyLinePlaceholder":815},[108,1404,1405],{"class":110,"line":1297},[108,1406,1407],{"class":365},"# Анализ разделяемой библиотеки\n",[108,1409,1410,1412,1414],{"class":110,"line":1305},[108,1411,549],{"class":114},[108,1413,1174],{"class":117},[108,1415,1416],{"class":163}," /usr/lib/libc.so.6\n",[19,1418,1419],{},"Сравните выводы и убедитесь, что понимаете различия между типами файлов.",[14,1421,611],{"id":610},[145,1423,1425],{"id":1424},"права-доступа","Права доступа",[19,1427,1428],{},"Если у вас нет прав на чтение файла, команды не будут работать:",[99,1430,1432],{"className":101,"code":1431,"language":103,"meta":104,"style":104},"sudo readelf -h /bin/ls\n",[23,1433,1434],{"__ignoreMap":104},[108,1435,1436,1438,1440,1442],{"class":110,"line":111},[108,1437,138],{"class":114},[108,1439,1102],{"class":163},[108,1441,1174],{"class":117},[108,1443,164],{"class":163},[145,1445,1447],{"id":1446},"битая-архитектура","Битая архитектура",[19,1449,1450],{},"При попытке анализа файла для другой архитектуры может возникнуть ошибка:",[99,1452,1454],{"className":101,"code":1453,"language":103,"meta":104,"style":104},"# Для кросс-платформенного анализа\nsudo apt install binutils-multiarch\n",[23,1455,1456,1461],{"__ignoreMap":104},[108,1457,1458],{"class":110,"line":111},[108,1459,1460],{"class":365},"# Для кросс-платформенного анализа\n",[108,1462,1463,1465,1467,1469],{"class":110,"line":369},[108,1464,138],{"class":114},[108,1466,356],{"class":163},[108,1468,359],{"class":163},[108,1470,1471],{"class":163}," binutils-multiarch\n",[145,1473,1475],{"id":1474},"stripped-файлы","Stripped файлы",[19,1477,1478],{},"Если файл был stripped (без отладочной информации), некоторые секции могут отсутствовать:",[99,1480,1482],{"className":101,"code":1481,"language":103,"meta":104,"style":104},"# Проверить, stripped ли файл\nfile /bin/ls\n# Если stripped, таблица символов будет пуста\nnm /bin/ls\n",[23,1483,1484,1489,1495,1500],{"__ignoreMap":104},[108,1485,1486],{"class":110,"line":111},[108,1487,1488],{"class":365},"# Проверить, stripped ли файл\n",[108,1490,1491,1493],{"class":110,"line":369},[108,1492,1124],{"class":114},[108,1494,164],{"class":163},[108,1496,1497],{"class":110,"line":758},[108,1498,1499],{"class":365},"# Если stripped, таблица символов будет пуста\n",[108,1501,1502,1504],{"class":110,"line":1291},[108,1503,1300],{"class":114},[108,1505,164],{"class":163},[19,1507,1508],{},"Понимание ELF формата — фундаментальный навык для работы с Linux на низком уровне. С этими инструментами и знаниями вы сможете анализировать любые бинарные файлы в вашей системе.",[748,1510,1511],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":104,"searchDepth":369,"depth":369,"links":1513},[1514,1515,1516,1517,1518,1519,1520,1521,1522],{"id":69,"depth":369,"text":70},{"id":1085,"depth":369,"text":1086},{"id":1117,"depth":369,"text":1118},{"id":1155,"depth":369,"text":1156},{"id":1199,"depth":369,"text":1200},{"id":1261,"depth":369,"text":1262},{"id":1331,"depth":369,"text":1332},{"id":573,"depth":369,"text":574},{"id":610,"depth":369,"text":611,"children":1523},[1524,1525,1526],{"id":1424,"depth":758,"text":1425},{"id":1446,"depth":758,"text":1447},{"id":1474,"depth":758,"text":1475},"2026-04-09 14:29:27","Узнайте, как работает ELF формат в Linux. Пошаговое руководство по анализу и работе с исполняемыми файлами ELF. Проверенные методы для разработчиков и системных администраторов.","medium","15-25 мин",[1532,1535,1538],{"question":1533,"answer":1534},"Что такое ELF формат?","ELF (Executable and Linkable Format) — стандартный формат исполняемых файлов, объектных файлов и разделяемых библиотек в Unix-подобных системах, включая Linux.",{"question":1536,"answer":1537},"Как проверить, что файл имеет ELF формат?","Используйте команду `file filename`, которая покажет 'ELF' в выводе, если файл имеет этот формат.",{"question":1539,"answer":1540},"Какие инструменты нужны для анализа ELF файлов?","Основные инструменты: `readelf`, `objdump`, `nm`, `file`, `hexdump` — все они входят в состав GNU Binutils.",[1542,1545,1548,1551,1554],{"name":1543,"text":1544},"Установка необходимых инструментов","Установите GNU Binutils для получения основных утилит анализа ELF файлов.",{"name":1546,"text":1547},"Проверка типа файла","Используйте команду file для определения типа и архитектуры ELF файла.",{"name":1549,"text":1550},"Анализ заголовка ELF файла","Используйте readelf -h для получения информации о заголовке файла.",{"name":1552,"text":1553},"Изучение секций","Проанализируйте секции ELF файла с помощью readelf -S.",{"name":1555,"text":1556},"Просмотр импортов и экспортов","Используйте nm и readelf -d для изучения символов и динамических секций.","PT20M",[1559,1560,1561,1562,1563],"ELF формат Linux","анализ исполняемых файлов","ELF структура","Linux бинарники","ELF файлы",{},[1566,1567,1568],"/guides/linux/compiling-c-programs","/guides/linux/debugging-with-gdb","/guides/linux/file-permissions",{"title":1026,"description":1528},"guides/linux/understanding-elf-format","Полное руководство по ELF формату в Linux, которое поможет вам понять структуру исполняемых файлов, проанализировать их содержимое и эффективно работать с бинарниками.",[1573,1574,1575,1576,1577],"ELF","Linux","executable","binary","format","AEVz55VRnpAUiHN5byLavv-lMIE8lSTwnqC6oQ1JEmk"]