дизассемблированный exe-файл содержит гораздо больше кода, чем исходный код

Я пытаюсь разобрать этот файл, но к нему добавляются тонны кодов. визуальный С++

#include <stdio.h>
int main()
{
int x = 1;
int y = 2;
printf("\rStart me UP");
x = x+y;
y = y+x;
printf("\rX is %d, Y is %d",x,y);
return 0;
} 

подобные вещи включены в мой код (многое из этого), я не смог бы найти свой собственный источник программирования, если бы в нем не было строк.

=============== S U B R O U T I N E =======================================
.text:0041101E
.text:0041101E ; Attributes: thunk
.text:0041101E
.text:0041101E sub_41101E      proc near               ; CODE XREF: .text:00415C46p
.text:0041101E                                         ; .text:00415C5Dp ...
.text:0041101E                 jmp     sub_41C7F2
.text:0041101E sub_41101E      endp
.text:0041101E
.text:00411023 ; ---------------------------------------------------------------------------
.text:00411023                 jmp     loc_414243
.text:00411028
.text:00411028 ; =============== S U B R O U T I N E =======================================
.text:00411028
.text:00411028 ; Attributes: thunk
.text:00411028
.text:00411028 sub_411028      proc near               ; CODE XREF: start_0-18Ap
.text:00411028                 jmp     sub_41672F
.text:00411028 sub_411028      endp

Разобрано с помощью ida pro

  1. в конце концов я нашел свою программу из-за строк, но что, если кто-то сделает кряк с зашифрованными строками и т. д., как я смогу найти начало самого кряка?

  2. я просматривал учебные пособия, я видел, что исходный код программ был в верхней части IDA Pro (например, где начинается дизассемблирование. Поэтому я понятия не имел, с чего начать, когда просматривал учебник, потому что я увидел другой результат (намного больше кодов). , так как же можно иметь только исходный код программ, а не 10000 строк кода.???


person Walordoo    schedule 27.09.2013    source источник
comment
Вам придется быть более конкретным. Какой код вы не ожидали добавить в IDA? Вы ожидаете увидеть исходный код оригинальной программы? Вы знакомы с тем, чем дизассемблер отличается от декомпилятора, и каковы недостатки декомпиляции?   -  person yan    schedule 27.09.2013
comment
сначала прочтите документацию по Windows asm.   -  person Matt    schedule 27.09.2013
comment
нет, я просто хочу знать, почему к нему добавлено так много кода, откуда он взялся: S? Я смотрю учебник, и у этих людей был идеально чистый код? и как я смогу найти свой код без строк. Единственная причина, по которой я нашел часть своего кода, заключалась в строках, которые я добавил.   -  person Walordoo    schedule 27.09.2013
comment
Я бы включил настройку в Visual Studio для создания .asm из вашего источника. Тогда посмотрите на АСМ.   -  person drescherjm    schedule 27.09.2013


Ответы (3)


То, что вы видите, — это код компилятора (я был удивлен его количеством, когда впервые начал обратное проектирование). Будет функция (которую IDA может распознать или не распознать) с именем WinMain. Именно здесь начнется код пользователя. Более новые версии IDA довольно хорошо распознают код компилятора.

Правда в том, что чем больше вы переворачиваете программы, тем лучше вы знакомитесь с кодом компилятора. Достаточно скоро вы сможете пропустить его и сразу попасть в WinMain. Так держать и не унывать :)

person ben_re    schedule 27.09.2013

То, что вы видите в скомпилированном коде, — это пролог и эпилог среды выполнения C. Это некоторый код, который выполняется до и после вашей программы для открытия/закрытия потоков, подготовки некоторых структур и параметров (например, основных параметров argc/argv) и так далее.

Вы можете увидеть их источник (который состоит как из кода c, так и из кода сборки), например. в c:\Program Files\Microsoft Visual Studio 8\VC\crt\src\ (для MSVC2005). Возможно, потребуется проверить исходный компонент среды выполнения во время установки Visual Studio.

person Seki    schedule 01.10.2013

Я задал связанный с этим вопрос о другой архитектуре (прохождение ассемблера AVR hello world code), чтобы понять, что происходит, и изучить ассемблер.

В комментариях говорилось, что перед запуском программы компилятор многое добавляет, чтобы она работала на разных архитектурах. В моем случае это обнуляет выделенную оперативную память и инициализирует прерывания и тому подобное. AVR — это микроконтроллер, поэтому в инициализации гораздо меньше, но я предполагаю, что для программы C++, работающей в Windows, нужно инициализировать больше вещей.

person Thomas    schedule 01.10.2013