2011-08-18 37 views
2

我用MSVC 2008Deassembling記憶功能/ C++

比方說,我在我的代碼功能:

​​

我可以使用哪些工具來獲得此程序的ASCII表示在X86彙編程序中?

void bar() 
{ 
    std::string s = disassemble(foo); 
    printf("%s\n", s.c_str()); 
} 
+0

您可以通過函數指針'foo'輕鬆獲取指向函數開頭的指針;然後您必須找到/編寫一些反彙編程序庫,將機器代碼轉換爲常用助記符 –

+0

你想在運行時反彙編這個函數嗎??你的示例提示了這個。 –

+0

我想在內存中反彙編任意函數@Matteo:這基本上就是我要問的東西,但是拆卸x86並不像取代90與XCH G。由於操作碼mod,這是相當複雜的,我想避免手工操作。 – Robert

回答

2

可以輸出通過點擊項目 - >屬性 - > C++的彙編代碼 - >大會輸出,然後選擇您的喜好,大會文件將被創建下次的建造時間。

您還可以在按下ctrl + Alt + D的同時在調試時(斷點處)查看彙編代碼。

這顯然假設你是在一臺x86機器上獲得x86程序集。

+0

我想拆卸內存中的任意函數。 – Robert

0

確保文件是項目的一部分。轉到項目屬性 - >配置屬性 - > C/C++ - >輸出文件,然後在「彙編程序輸出」下,選擇除「無列表」以外的其他項目。然後在編譯時,如果僅指定了程序集,則會得到.asm文件,如果指定了列表文件,則會得到.lst文件。無論你選擇哪個,都會從你的文件中保存生成的彙編代碼(儘管如此,作爲一個警告,你所編寫的部分代碼通常幾乎被埋在標準庫等其他雜亂無章的地方下面,

+0

我想拆解內存中的任意函數。 – Robert