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

Я пытаюсь разобрать этот файл, но я продолжаю получать тонны кодов, добавленных к нему.
Visual C ++

#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 строк кода включены. ???

0

Решение

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

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

0

Другие решения

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

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

0

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

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

0
По вопросам рекламы [email protected]