Разборка простой программы Hello World - PullRequest
2 голосов
/ 27 марта 2012

Я написал эту маленькую программу на C ++ и собрал ее (Релиз)

#include<iostream>
int main(){
     std::cout<<"Hello World";
     return 0;
}

Когда я разбираю его, в нем много дополнительного кода (файл cookie безопасности и т. Д.). Я считаю, что Visual Studio добавляет все это. Как я могу скомпилировать эту программу без какой-либо дополнительной информации, чтобы ее было легко понять ее разобранный код?

Я знаю, что сборка сравнительно сложнее, но я имею в виду получение асм-кода hello world из программы hello world c ++. Это возможно?

Ответы [ 3 ]

2 голосов
/ 27 марта 2012

вы можете сгенерировать вывод сборки в Свойства проекта -> Свойства конфигурации -> Выходные файлы -> Вывод ассемблера

Это позволит вам увидеть сборку для написанного вами кода.

Разборка,вы получите кучу других вещей, которые связаны между собой.

2 голосов
/ 27 марта 2012

Вы начинаете с огромной базы кода с <iostream>.Возможно, вы захотите полностью избежать использования библиотеки времени выполнения.Попробуйте что-то вроде этого:

#include <windows.h>

int main() {
    HANDLE stdout = GetStdHandle(STD_OUTPUT_HANDLE);
    WriteFile(stdout, "Hello world\n", 12, NULL, NULL);
    return 0;
}

Скомпилируйте его с включенным списком сборок, и это должно дать вам некоторый «сырой» код Win32 для начала.

0 голосов
/ 27 марта 2012

Чтобы управлять функциями генерации кода в Visual Studio, просто нажмите на свой проект в VS -> свойства -> свойства конфигурации -> c / c ++ -> генерация кода.

Не забудьте выбрать правильную конфигурацию сборки (отладка, выпуск и т. Д.).

Файлы cookie безопасности можно удалить, поиграв с проверкой безопасности буфера (по умолчанию / GS)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...