Я пытаюсь разобрать этот файл, но я продолжаю получать тонны кодов, добавленных к нему.
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
я нашел свою программу в конце концов из-за строк, но что, если кто-нибудь создаст файл с зашифрованными строками и т. д., как я смогу найти начало самого файла?
я просмотрел учебники, которые я видел там, где исходный код программ был на вершине IDA Pro (например, там, где начинается разборка), поэтому я не знал, с чего начать, когда посмотрел учебник, потому что увидел другой результат (гораздо больше кодов). Так, как может иметь только исходный код программ, а не 10000 строк кода включены. ???
То, что вы видите, это код компилятора (я был удивлен количеством, когда я впервые начал реверс-инжиниринг). Будет функция (которую IDA может или не может распознать) WinMain
, Вот где начнется код пользователя. Новые версии IDA довольно хорошо распознают код компилятора.
Правда в том, что чем больше вы обращаетесь к программам, тем больше вы знакомы с кодом компилятора. Достаточно скоро вы сможете пропустить прямо мимо него и прямо в WinMain. Так держать и не унывать 🙂
В скомпилированном коде вы видите пролог и эпилог времени исполнения C. Это некоторый код, который выполняется до и после вашей программы, чтобы открывать / закрывать потоки, подготавливать некоторые структуры и параметры (например, argc
/argv
основные параметры) и тд.
Вы можете увидеть их источник (который состоит из кода c и ассемблера), например. в c:\Program Files\Microsoft Visual Studio 8\VC\crt\src\
(для MSVC2005). Может потребоваться проверка исходного компонента во время установки Visual Studio.
Я задал связанный вопрос по другой архитектуре (Прохожу через AVR ассемблер "Привет, мир" код) понять, что происходит и изучить сборку.
Комментарии указывают на то, что перед запуском программы компилятором добавляется многое, чтобы она работала на разных архитектурах. В моем случае это приведет к обнулению памяти и инициализации прерываний и тому подобного. AVR — это микроконтроллер, поэтому инициализации гораздо меньше, но я думаю, что для программы на C ++, работающей в Windows, нужно инициализировать больше вещей.