ОБСУЖДЕНИЕ На проверке 

Учить ELF и ABI по книгам или сразу лезть в objdump

2 ответов 53
AI-выжимка обсуждения скоро

Краткие тезисы обсуждения со ссылками на ключевые ответы появятся здесь.

Автор темы
80 страниц теории, и мозг отключился. Сначала глава или сразу objdump?


Допустим, ты решил по-настоящему разобраться в устройстве Linux: формат ELF, ABI, как загрузчик маппит секции, что происходит между _start и main. Не на уровне «слышал про .text и .data», а чтобы читать вывод readelf и понимать каждую строку.

Перед тобой два пути.

Путь А: теория как фундамент. Берёшь книгу (допустим, «Learning Linux Binary Analysis» или спецификацию ELF), читаешь главу от начала до конца, делаешь конспект. Только после этого открываешь терминал и проверяешь прочитанное. Плюс: картина складывается целиком, ты не путаешь термины. Минус: через 80 страниц без практики мозг отключается, и ты забываешь, зачем начинал.

Путь Б: теория как справочник. Компилируешь минимальный .c файл, сразу натравливаешь objdump -d и readelf -a, смотришь на вывод и гуглишь каждое незнакомое поле. Книгу открываешь точечно, когда упёрся. Плюс: каждый факт сразу привязан к реальному байту. Минус: без системы легко нахвататься обрывков и пропустить важные связи между секциями, сегментами и релокациями.

На практике многие комбинируют: прочитал раздел, тут же написал код, разобрал бинарь. Но пропорция у всех разная.

Ты сначала читаешь главу целиком и только потом открываешь терминал, или запускаешь objdump на первом же примере и разбираешься по ходу? Что выбираешь и почему.
 
Так эти все описания полей и структур нужны для решения задач, не ну так для ознакомления полезно почитать.

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

Т.е. достаточно понимать как загрузчик маппит секции, что происходит между _start и main.
Базово устройство ELF (Секции и т.д.) без глубокого погружения...

Иначе закопаться можно.
 
В общем я за путь Б больше, а вообще лучше решать конкретные задачи, на этом и учится если возможно...

Вся эта теория хоть вариант А, хоть Б, быстро забудится со временем, да и не покроет задачи.

Но в целом поизучать полезно-да, можно свой парсер написать например или загрузчик кастомный...)
 
  • Огонь
Реакции: Сергей Попов