Федор Новиков
Искусственный Интеллект
(362472)
3 месяца назад
Если начинать с цифровых схем, то и надо брать учебник по цифровой технике, разбираться с логическими схемами, арифметикой, триггерами и регистрами, потом переходить к цифровым автоматам (машинам состояния), потом - к простейшим процессорам. Заодно лучше перейти от схемного построения к языкам описания аппаратуры (VHDL, Verilog).
А не лезть сразу в дебри сложных систем, построенных по принципу "чего изволите". Лучше тогда смотреть процессоры ARM и RISC-V.
123 123Профи (505)
3 месяца назад
Хорошо! Можете посоветовать книги/курсы для каждого из описанных вами этапов?
Влад Шупарев
Знаток
(375)
3 месяца назад
Твой интерес к низкоуровневому программированию и реверс-инжинирингу похвален! Путь от логических вентилей до процессора и обратно к программам действительно увлекателен.
Твой текущий уровень знаний C++, Python и математики - отличная база для старта. Что касается Linux, то да, для работы с NASM он предпочтительнее. Установка на виртуальную машину - хороший вариант, не бойся трудностей!
А теперь давай спланируем твой путь к вершинам низкоуровневого программирования:
Этап 1: Основы цифровой схемотехники и архитектуры компьютера
* Цель: Понять, как из логических элементов строятся схемы, регистры, память, ALU и другие компоненты процессора.
* Материалы:
* Книга: "Цифровая схемотехника и архитектура компьютера" Дэвид Харрис, Сара Харрис. Дает хорошее понимание основ.
* Онлайн-курс: "Computer Architecture" на Coursera (от Princeton University). Более глубокое погружение в тему.
Этап 2: Язык ассемблера и архитектура x86
* Цель: Научиться писать программы на языке ассемблера под архитектуру x86, понять принципы работы процессора.
* Материалы:
* Книга: "Ассемблер для процессоров Intel" Кип Ирвин. Классический учебник по x86 ассемблеру.
* Книга: "Reverse Engineering for Beginners" Денис Юричев. Бесплатная книга, доступная онлайн, которая поможет понять принципы реверс-инжиниринга.
Этап 3: Отладка и реверс-инжиниринг
* Цель: Освоить инструменты отладки, научиться анализировать и понимать код на языке ассемблера.
* Материалы:
* Книга: "Practical Reverse Engineering" Брюс Дэнг, др. Практическое руководство по реверс-инжинирингу.
* Инструменты: IDA Pro (дизассемблер), x64dbg (отладчик), GDB (отладчик).
Этап 4: Операционные системы и низкоуровневое взаимодействие
* Цель: Разобраться, как программы взаимодействуют с операционной системой на низком уровне.
* Материалы:
* Книга: "Современные операционные системы" Эндрю Таненбаум. Фундаментальный труд по операционным системам.
* Книга: "Windows Internals" Марк Руссинович, др. (для Windows) или "Linux Kernel Development" Роберт Лав (для Linux).
Дополнительные советы:*
* Практика: Пиши много кода, экспериментируй, анализируй чужой код.
* Сообщество: Присоединяйся к сообществам по низкоуровневому программированию и реверс-инжинирингу.
* Терпение: Это долгий и непростой путь, но он того стоит!
Удачи в твоих начинаниях!
На данный момент знаю C++ и Python на уровне, достаточном для написания простенького платформера. Ознакомлен с булевой логикой и системами счисления, в целом хорошие математические познания на уровне программ технических ВУЗов.
Пытался начать с книги "Beginning x64 Assembly Programming: From Novice to AVX Professional", где идет обучение NASM ассемблеру, но там система Linux, который я в целом могу установить на виртуальную машину, которую в свою очередь нужно будет создавать, но не знаю, насколько это целесообразно.
В ответ желательно включить примерно очерченный путь с ссылками на книги/курсы для каждого этапа.