[英]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.