@SaddledSharp
Кодер. Увлекаюсь информационной безопасностью.

Как научится реверс-инженерингу?

Всем привет.
Я хочу научится реверс-инженерингу.
Хочу сказать так: мне нравится ассемблер и стиль ассемблера, но, сук, я его НИКАК не могу выучить. Ну вообще никак. Я тупо не понимаю что за регистры и что вообще всё это значит и зачем так писать. Уж очень я привык к С++ и Си. К чему это я? Ну что бы вы посоветовали какую то книгу которая выбьет это с меня.
Хочу научится дизассемблировать программы и делать антивирусы. Ну или вирусы для ознакомительных целей НА АССЕМБЛЕРЕ.
Еще проблемка: при учении ассемблера, я понимаю что мне придётся писать только под один процессор. То есть программа не кроссплатформенная как была бы на Си\С++. Это тож очень сильно отбивает писать программы на ассемблере. Правда ли это? Или можно как то сделать кроссплатформенную программу? К примеру что бы работала как и на Windows7, 10 на любых процессорах? Ну или на большинстве? Иначе зачем же на нём писать... Или это не так уж и плохо?

Выше как-бы предисловие. Посоветуйте книги, уроки где очень понятно учат ассемблеру и реверс-инженерингу что бы читать программы на OllyDbg (моя мечта)? :)

Добавлено: в последнее время я очень часто пишу на С++.
  • Вопрос задан
  • 314 просмотров
Решения вопроса 2
dimonchik2013
@dimonchik2013
non progredi est regredi
начни с Крис Касперски , хотя там тоже надо быть подготовленным
Ответ написан
saboteur_kiev
@saboteur_kiev Куратор тега IT-образование
software engineer
А что такого сложного в регистрах?

Все просто, в Си вы можете создать переменную разного типа - строка, число, кортеж, массив, флоат, целочисленное число и так далее.
А в ассемблере есть только байт, слово, двойное слово - все кратно байту.

В Си вы можете создать сколько угодно произвольных переменных - a, b, x, y, counter, mysupervariable и хранить в них значения
У процессора нет возможности создавать произвольные переменные. Но есть железно зашитые прямо в процессоре регистры.
И инструкции процессора умеют с регистрами работать.

Некоторые регистры активно используются для хранения промежуточных значений.
Например в Си вы можете
x = 3 * 6
А в ассемблере нельзя
ячейка_памяти_по_адресу(100) = 3*6
Нет такой инструкции, не предусмотрена архитектурой процессора.

Зато можно занести в регистр AX = 3, в регистор BX = 6 и вызвать инструкцию процессора - умножь значение AX на BX, значение автоматически поместится в AX.
mov  ax, 3
mov  cx, 6
mul  cx

Результат будет в регистре AX. Затем второй инструкцией можно будет занести результат из AX в ячейку памяти 100.
mov [100h], ax

Вот и все.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы