На устройствах интернета вещей (IoT) зачастую слишком мало ресурсов, и их не хватает, чтобы подтягивать и использовать тяжеловесные образы Docker. В этой статье будет показано, как можно уменьшить образ Docker на 36-91% при помощи инструментов patchelf
и strace
, не перекомпилируя при этом контейнеризованные приложения. Также рассмотрим, как создавать минимальные образы для собственных приложений, написанных на Rust, Go, C/C++.
Рубрика «elf»
Как уменьшить образ Docker для работы с устройствами IoT
2024-09-12 в 7:55, admin, рубрики: docker, elf, fortran, Guix, home assistant, IoT, linux, nix, Raspberry Pi, timeweb_статьи_переводРеверс-инжиниринг нативно скомпилированных .NET-приложений
2024-05-18 в 8:01, admin, рубрики: .net, .net 7, AOT, Binary Ninja, ecma, elf, Ghidra, hello world, mach-o, path, pe, timeweb_статьи_перевод, реверс-инжиниринг, С++Изучение внутреннего устройства приложений, созданных с использованием нативной опережающей компиляции (AOT).
На платформе .NET 7 впервые была представлена новая модель развертывания: опережающая нативная компиляция. Когда приложение .NET компилируется нативно по методу AOT, оно превращается в автономный нативный исполняемый файл, оснащённый собственной минимальной средой исполнения для управления выполнением кода.Читать полностью »
Выполняем сторонние программы на микроконтроллерах с Гарвардской архитектурой: как загружать программы без знания ABI?
2024-01-05 в 8:01, admin, рубрики: Atmega, attiny, avr, bodyawm_ништячки, C, c++, cc, dll, elf, esp32, esp8266, exe, executable, gcc, gnu ld, ld, linker, pic, timeweb_статьи, xtensa, бинарные файлы, загрузчик, исполняемый файл, компоновщик, микроконтроллеры, микропроцессоры, программа, программы, системное программированиеЗачастую в процессе разработки собственных устройств или моддинга уже существующих, встаёт задача выполнения стороннего кода: будь то ваши собственные программы с SD-флэшек, или программы, написанные другими пользователями с помощью SDK для вашего устройства. Тема компиляторов и кодогенерации достаточно сложная: чтобы просто загрузить ELF или EXE (PE) программу, вам нужно досконально разбираться в особенностях вашей архитектуры: что такое ABI, релокации, GOT, отличие -fPIE от -fPIC, как писать скрипты для ld и т. п. Недавно я копал SDK для первых версий Symbian и основываясь на решениях из этой ОС понял, каким образом можно сделать крайне «дешевую» загрузку любого нативного кода практически на любом микроконтроллере, совершенно не вникая в особенности кодогенерации под неё! Сегодня мы с вами: узнаем, что происходит в процессе загрузки программы ядром Linux, рассмотрим концепцию, предложенную Symbian Foundation и реализуем её на практике для относительно малоизвестной архитектуры — XTensa (хотя она используется в ESP32, детали её реализации «под капотом» для многих остаются загадкой). Интересно? Тогда добро пожаловать под кат!
Читать полностью »
Пишем микро-shellcode в формате ELF вручную
2023-07-21 в 0:23, admin, рубрики: AmateursCTF, AmateursCTF 2023, ctf, elf, ELFcrafting-v2, golf, python, shellcode, ненормальное программированиеНа Хабре уже не раз публиковались статьи про устройство формата ELF и написание файлов в таком формате вручную, но я не считаю лишним опубликовать и свой вариант решения этой задачи. В результате получился файл, вызывающий /bin/sh
и занимающий всего 76 байт (что на 8 байт меньше, чем сумма длин заголовков ELF, необходимых для запуска).
Постановка задачи
Начну с того, откуда взялась задача. На этой неделе проходил AmateursCTF 2023, одной из задач на pwn была «ELFcrafting-v2»:
The smallest possible 64 bit ELF is 80 bytes. Can you golf it down to 79 bytes?
Bad Apple на телефоне Siemens CX75
2022-01-26 в 16:13, admin, рубрики: bad apple, diy или сделай сам, elf, sgold, siemens, Демосцена, ненормальное программирование, ПрограммированиеВ этом посте я расскажу о том, как я в 2022 году смог написать и скомпилировать эльф на macOS на М1, и покажу, что из этого получилось.
Создание исполняемого файла ELF вручную
2021-02-22 в 9:26, admin, рубрики: elf, Reversing, ненормальное программирование, отладка, реверс-инжинирингПривет, класс, и добро пожаловать в x86 Masochism 101. Здесь вы узнаете, как использовать опкоды непосредственно для создания исполняемого файла, даже не прикасаясь к компилятору, ассемблеру или компоновщику. Мы будем использовать только редактор, способный изменять двоичные файлы (т.е. шестнадцатеричный редактор), и «chmod», чтобы сделать файл исполняемым.
Если это вас не заводит, то я даже не знаю...
Немного о релокациях в ядре Linux
2020-05-29 в 10:58, admin, рубрики: C, elf, kernel, relocations, системное программированиеРешим простую задачу — выделим в пространстве ядра Linux блок памяти, поместим в него какой-нибудь бинарный код и выполним его. Для этого напишем модуль ядра, в нем определим функцию foo, которая будет играть роль нужного нам бинарного кода, далее при помощи функции module_alloc выделим блок памяти, скопируем в него через memcpy эту функцию целиком и передадим ей управление.
Вот как это выглядит:
Читать полностью »
Создание упаковщика x86_64 ELF файлов под linux
2020-01-09 в 18:17, admin, рубрики: C, elf, Разработка под Linux, СиВведение
В данном посте будет описано создание простого упаковщика исполняемых файлов под linux x86_64. Предполагается, что читатель знаком с языком программирования си, языком ассемблера для архитектуры x86_64 и с устройством ELF файлов. В целях обеспечения ясности из приведённого в статье кода была убрана обработка ошибок и не были показаны реализации некоторых функций, с полным кодом можно ознакомится перейдя по ссылкам на github (загрузчик, упаковщик).
Идея состоит в следующем — мы передаём упаковщику ELF файл, на выходе получаем новый со следующей структурой:
ELF заголовок | |
Заголовок программы | |
Сегмент с кодом | Загрузчик упакованных ELF файлов |
Упакованный ELF файл | |
256 байт случайных данных |
Введение в ELF-файлы в Linux: понимание и анализ
2020-01-06 в 18:14, admin, рубрики: elf, Анализ и проектирование систем, Программирование, системное программированиеЕсть в мире вещи, которые мы принимаем как нечто само собой разумеющееся, хотя они являются истинными шедеврами. Одними из таких вещей являются утилиты Linux, такие, как ls и ps. Хотя они обычно воспринимаются как простые, это оказывается далеко не так, если мы заглянем внутрь. И таким же оказывается ELF, Executable and Linkable Format. Формат файлов, который используется повсеместно, но мало кто его понимает. Это краткое руководство поможет вам достичь понимания.
Прочтя это руководство, вы изучите:
- Зачем нужен формат ELF и для каких типов файлов он используется
- Структуру файла ELF и детали его формата
- Как читать и анализировать бинарное содержимое файла ELF
- Какие инструменты используются для анализа бинарных файлов
ELFийские трюки в Go
2019-12-29 в 15:56, admin, рубрики: asm, debug, disasm, elf, Go, golang, x86, zydis, Компиляторы, ненормальное программирование, системное программирование
В этой заметке мы научимся получать машинный код Go функции прямо в рантайме, распечатаем его с помощью дизассемблера и по пути узнаем несколько фокусов вроде получения адреса функции без её вызова.
Предупреждение: ничему полезному эта мини-статья вас не научит.