Что нужно знать и понимать о компиляторах Reverse Engineer'у?Что значить - понимать как компилятор генерирует код?И что это может дать при обратной разработке?Сейчас изучаю asm совместно с С,пишу код на C изучаю его через отладчик с дизассемблером.Вижу код на асме,понимаю,что и о чем,но совершенно не понимаю,а почему так?Почему компилятор использует одни инструкции,а не использует другие.Важно ли это вообще?Или мне чтобы разобрать программу,совершенно не важно,почему компилятор сделал именно так как сделал, а важно лишь понять,что он вообще сделал,тобишь понять асм код?
Примерно с тем же посылом бросил изучать делфи и сел на ассемблер. Там было все просто. Что написал, то и увидел в отладчике т.е. компилятор только прикрепил необходимые заголовки и собрал файлик в кучу.
Также был случай с самостоятельным выявлением бага в компиляторе старого билдера с++, но тут и моя вина есть, не фиг юзать старье.
Досконально знать как компилирует тот или иной компилятор большого смысла нет, чем больше будите реверсить тем больше будет знать как компилируют компиляторы. Все компиляторы (если не вырезали специально) добавляют свои отметки в код. Вам это сильно поможет при реверсинге и отладке стандартных кусков. Вы будете заранее видеть порядок стека и инструкций, порядок функций и банально по их очередности понимать, что делает функция целиком.
Если вы хоть немного покодите на каждом популярном языке и потом разреверсите программу, это полностью даст ответ на ваш вопрос. Особенно это сильно видно в программах на .NET, QT и прочих подобных. Проще всего реверсить, то что ближе к ассемблеру.
В идеале взять hello world на разных компиляторах и посмотреть разницу.
P.S. и ради бога никогда не реверсите ради реверсинга, быстро сгорите. Сначала цель, потом работа. Есть специальные упражнения CrackMe. Для большего интереса я реверсил вирусы крадущие пароли...
Что значит реверсить ради реверса,не совсем понял.Цель у меня есть.Конечно не коммерческая даже близко,но эти знания(асма,С,реверса)могут потом помочь мне в работе.
Flisto, реверсинг ради реверсинга это когда вы просто закидываете экзешник в дебагер и смотрите в него ради интереса. Очень часто при реверсинге ищут конкретные сочетания кода, функций или обработку какой либо кнопки. Если при этом попадают в непонятно куда или не получается найти, то вот тут нужна дикая усидчивость, банально на протяжении нескольких часов или дней жать f7, с блокнотом в руках и перезапуская программу каждые 10 секунд потому что снова потерялись. Дезасемблеры конечно могут немного уменьшить ваши мучения, но с ними нужен опыт. Следовательно вы должны точно знать что ищите.