Комментарии 19
Спасибо большое, в закладки!
В большинстве случаев примеры можно выполнить как на Linux, так и на Windows
А MacOS нет?)
Пока в маках столкнулся с тем что strip требует другие опции. Ну и идеология у утилиты немного другая.
objcopy позволяет добавить секцию, но эта секция не будет относиться ни к одному сегменту и не будет загружаться в ОЗУ при запуске приложения
А есть ли простые способы из загружаемого кода библиотеки добраться до этой секции? Может быть можно включить загрузку этой секции?
С маками все печально, это одна из причин по которой я пересел на линукс. В брю либо старье, либо нет, либо просто не ставится. А добраться до секции элементарно, просто парсингом самого файла.
А MacOS нет?)
А слона-то я и не заметил. Объективно — не было под рукой Мака, чтобы всё полностью проверить.
И как уже отметили, в Маках бывают какие-то странности в binutils.
Из простых способов — воспользоваться LIEF — ей ничего кроме Python не надо.
К сожалению, objcopy "не обладает коровьей суперсилой" и даже если указать флаги --set-section-flags .section=alloc,load
, сегмент от этого не отрастёт.
Ну или писать что-то своё с использованием libelf.
Правильно понимаю, что ОСь есть, но elf-loader'а нет? То есть задача — написать elf-loader под эту ОСь?
По идее, не должно быть запредельно сложно — взять спеку по ELF, посмотреть "кишки" ОСи, объединить их (понимаю, что это звучит как ответ на вопрос "как нарисовать сову?").
Архитектура: ns32k. Есть бесплатная реализация на HDL/FPGA, вполне бодрая и рабочая, 25K LE. Так что процессоры доступны. Последняя живая ОС под нее была NetBSD 1.5x, формат exe-шника a.out. Следующая NetBSD 1.6 уже выпилила эту архитектуру. Параллельно существовала также фирменная System V R3 под NS32000, с exe-шниками COFF. Как мы знаем, ELF (как механизм ОС) появился в System V R4 (влившись туда из работ SUN над прототипом Solaris c динамически загружаемыми библиотеками DSO). Системы Systtem V R4 in wild под NS32000 обнаружить не удалось… Хотя, кто знает, может где-то в архивах и лежит ленточка…
Познакомится можно тут:
www.cpu-ns32k.net
Детский сад какой-то. Лучше бы начали с (неполного) описания ELF и соответствующих опций ld, потом механизма загрузки (включая ifunc) и затем dwarf3.
Отсылка к "библиотеке Oracle" тоже доставляет )
Вы в теме больше чем автор. Пилите статью ;)
Давайте будем грамотно критиковать и давать обратную связь.
Мне обычно неловко в ситуации, когда у оппонента есть "своё правильное мнение". Выше немного опередели с комментариями — если понимаете ЧТО действительно нужно, напишите статью.
Рад, что Вам "доставила" библиотека Oracle. А можно уточнить, что с ней не так? Можете порекомендовать хороший ресурс?
Мне лично было интересно узнать несколько новых инструментов.
Что касается описания ELF — это тема тяжелая и там надо мини-книжку писать.
У меня впечатление, что ELF на порядок сложнее современного PE.
Минимальная работоспособная ручная загрузка PE (VirtualAlloс, релоки, импорты) доступна даже студенту.
А вот ELF…
Небольшое добавление к статье. Возможности checksec (и даже больше) уже есть в упомянутом инструменте radare2 — https://github.com/radareorg/radare2/issues/818. Информация о файле (в том числе mitigations) выводится командой i
. Или можно так i~pic,canary,nx,crypto,stripped,static,relocs
Рецепты для ELFов