簡體   English   中英

拆卸簡單的Hello World程序

[英]Disassembling Simple Hello World program

我寫了這個小C ++程序並構建了它(發布)

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

當我反匯編它時,它有很多額外的代碼(安全cookie等。)。 我相信Visual Studio會添加所有這些內容。 我如何在沒有任何額外信息的情況下編譯該程序,以使其易於理解其反匯編代碼?

我知道匯編相對較難,但是我的意思是從hello world c ++程序中獲取hello world asm代碼。 這可能嗎?

您從<iostream>龐大的代碼庫入手。 您可能想要做的是完全避免使用運行時庫。 嘗試這樣的事情:

#include <windows.h>

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

在打開程序集清單的情況下進行編譯,這應該為您提供一些“原始的” Win32代碼。

您可以在項目屬性->配置屬性->輸出文件->匯編器輸出中生成匯編輸出

這將使您看到編寫的代碼的程序集。

拆裝后,您將獲得許多其他相關聯的東西。

要控制Visual Studio代碼生成功能,請在VS->屬性->配置屬性-> c / c ++->代碼生成中右鍵單擊項目。

不要忘記選擇正確的構建配置(調試,發行版等)。

可以通過玩緩沖區安全性檢查來刪除安全性cookie(默認情況下為/ GS)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM