對于C++來說,幾乎所有的編譯器都能夠生成匯編指令輸出,而其它語言則不一定。
以現在Windows平臺流行的語言來說,主要是Visual C++、C++Builder和Delphi(其實本人也就熟悉這些語言
)。對于這些語言有相應的方法來獲得其匯編代碼:
【Visual C++】
命令行:
/FA 僅生成匯編文件
/FAcs 生成匯編、機器碼以及源代碼的對照文件
/FAc 生成匯編、機器碼的對照文件
/FAs 生成匯編、源代碼的對照文件
menu: project ==>settingsC/C++屬性頁
Category:選擇Listing Files
設置listing file type為Assembly with source code
鍵入需輸出的asm文件名xxx
[或直接在底下的Project Option欄內鍵入' /Fa "xxx" ']
Link屬性頁
勾選Generate mapfile
[或直接在底下的Project Option欄內鍵入' /map:"Debug/Test.map" ']
OK,工程目錄下將有匯編文件xxx.asm
【C++Builder】
命令行:
/B 生成匯編文件,并調用匯編程序進行匯編
/S 生成匯編、源代碼的對照文件
【Delphi】
這件事情有點復雜,實際上Delphi并不支持匯編輸出,那怎么辦?
好在Delphi有一個功能強勁的調試程序,編譯以后執行程序,設置適當的斷點,通過調試器提供的反匯編功能對程序進行
反匯編,從而得到相應段落的匯編代碼。
這實際上是一種通用的策略,包括上述的Visual C++和C++Builder也可以用同樣的方式進行。
另外一種方法就是要通過一些輔助的反匯編工具了,將這些軟件生成的OBJ文件進行反匯編,從而獲得相應的代碼。
當然, 其反匯編出來的文件效果絕對趕不上這些語言開發工具自己生成的效果好,可是總還是有些用處的。
對于早期的編譯軟件,例如Microsoft的FORTRAN以及編譯BASIC等,這些系統都支持一種代碼輸出的選項,
能夠生成.COD文件。這種文件是偽宏匯編格式的文本文件,其作用基本相當于匯編文件,只是通不過重新匯編而已,
然而,這種文件有時并不包含源代碼行,看起來比較費勁(這主要是因為兩遍編譯的結果)。
posted on 2006-04-19 04:17
陣雨 閱讀(3797)
評論(1) 編輯 收藏 引用