Assembler → Минималистичная программа в формате ELF из песочницы
Вдохновившись статьёй Привет из свободного от libc мира, я так же решил проделать нечто подобное. Чтобы не заниматься этим бесцельно, я решил поставить перед собой следующую задачу. Сделать программу, выводящую какую-нибудь простую строку, вроде «ELF, hello!». Разобраться с тем, как именно она будет представлена в исполняемом файле. Ну и попутно, постараться уложиться в 100 байт.
Linux для всех → Несколько подробностей о функции main из песочницы
Однажды заинтересовался, содержимым стека функции main процесса в linux. Провел некоторые изыскания и теперь представляю вам результат.
Варианты описания функции main:
1. int main()
2. int main(int argc, char **argv)
3. int main(int argc, char **argv, char **env)
4. int main(int argc, char **argv, char **env, ElfW(auxv_t) auxv[])
5. int main(int argc, char **argv, char **env, char **apple)
argc — число параметров
argv — нуль-терминальный массив указателей на строки параметров командной строки
env — нуль-терминальный массив указателей на строки переменных окружения. Каждая строка в формате ИМЯ=ЗНАЧЕНИЕ
auxv — массив вспомогательных значение (доступно только для PowerPC [1])
apple — путь к исполняемому файлу (в MacOS и Darwin [2])
Вспомогательный вектор — массив с различной дополнительной информацией, такой как эффективный идентификатор пользователя, признак setuid бита, размер страницы памяти и т.п.
Далее о том как получить массив вспомогательных значений для i386 и x86_64, а также об остальном содержимом «сегмента» стека.
Варианты описания функции main:
1. int main()
2. int main(int argc, char **argv)
3. int main(int argc, char **argv, char **env)
4. int main(int argc, char **argv, char **env, ElfW(auxv_t) auxv[])
5. int main(int argc, char **argv, char **env, char **apple)
argc — число параметров
argv — нуль-терминальный массив указателей на строки параметров командной строки
env — нуль-терминальный массив указателей на строки переменных окружения. Каждая строка в формате ИМЯ=ЗНАЧЕНИЕ
auxv — массив вспомогательных значение (доступно только для PowerPC [1])
apple — путь к исполняемому файлу (в MacOS и Darwin [2])
Вспомогательный вектор — массив с различной дополнительной информацией, такой как эффективный идентификатор пользователя, признак setuid бита, размер страницы памяти и т.п.
Далее о том как получить массив вспомогательных значений для i386 и x86_64, а также об остальном содержимом «сегмента» стека.
Разработка → Перенаправление функций в разделяемых ELF-библиотеках
Все мы пользуемся динамически-компонуемыми билиотеками. Их возможности поистине великолепны. Во-первых, такая библиотека загружается в физическое адресное пространство только один раз для всех процессов. Во-вторых, можно расширять функционал своей программы, подгружая дополнительную библиотеку, которая и будет этот функционал обеспечивать. И все это без перезапуска самой программы. А еще решается проблема обновлений. Для динамически компонуемой библиотеки можно определить стандартный интерфейс и влиять на функционал и качество своей основной программы, просто меняя версию библиотеки. Такие методы повторного использования кода даже получили название «архитектура plug-in’ов». Но топик не об этом.Кстати, нетерпеливые могут все скачать и попробовать прямо сейчас.
Программирование → Компиляция. 10: компиляция в ELF
В прошлый раз мы ограничились компиляцией джей-скрипа в файл в нашем собственном формате, которому требовался специальный загрузчик. Кроме того, мы задумали было пару оптимизаций исполнимого кода, требующих анализа соседних команд.
Далее в посте:
- Оптимизация «в глазок»
- Стандартные функции
- Вывод в ELF
- Как это работает?
- Что получилось?
Программирование → Привет из свободного от libc мира! (Часть 1)
В качестве упражнения я хочу написать программу на С. Достаточно простую для того, чтобы дизассемблировать ее и объяснить весь код самой себе.
Звучит несложно, правильно?
У читателя предполагается наличие опыта компиляции программ и работы в Линуксе. Небольшое умение читать ассемблерный код тоже пригодится.
Звучит несложно, правильно?
У читателя предполагается наличие опыта компиляции программ и работы в Линуксе. Небольшое умение читать ассемблерный код тоже пригодится.
Железо → Замена сенсорного экрана на HTC Touch P3450 (HTC Elf)
Предыстория
В сентябре прошлого года заметил на своем эльфе странное пятно на экране, как будто от сладкого кофе. Протерев экран, увидел, что под сенсорным экраном образовалась какая-то лужа. Попытки сместить ее к краю экрана оказались наполовину успешными — визуально пузыря было не видно, но по работе сенсора стало понятно, что помогло это не сильно. Сенсор то работал точно, то с приличным сдвигом (я даже сначала предположил, что это не аппаратная проблема), само собой никакие калибровки мне не помогли. Хард ресет откинул версию о программной ошибке.
Горевал я не сильно, ибо давно хотел обновить свое средство связи и тут подвернулся такой повод.
Проблема решилась покупкой HTC Diamond P4700, а эльф был перемещен в ящик (выкидывать его все-таки жалко!)).
Персональные блоги → Частоты, способные взорвать атомную бомбу, зомбировать людей и помочь нам познать тайну души
В радиолюбительстве есть особое направление – мониторинг ведомственных радиостанций: правительственного радио, раций спецслужб, военных передатчиков. Особым шиком считается перехват сеансов связи между базой и атомными субмаринами в диапазоне сверхдлинных волн – СДВ. В англоязычной литературе СДВ получили прекрасное название ELF (Extreme Low Frequency – «предельно низкая частота»). Так что ELF’ы – под этой аббревиатурой мы будем подразумевать СДВ-передатчики – встречаются не только в сказках.