成人午夜激情影院,小视频免费在线观看,国产精品夜夜嗨,欧美日韩精品一区二区在线播放

MSIL反匯編程序(Ildasm.exe)和MSIL匯編程序(Ilasm.exe)

2010-08-28 10:49:44來(lái)源:西部e網(wǎng)作者:

MSIL 匯編程序 (Ilasm.exe)

MSIL 匯編程序從 MSIL 匯編語(yǔ)言生成可移植可執(zhí)行的 (PE) 文件?梢赃\(yùn)行結(jié)果可執(zhí)行文件(該文件包含 MSIL 和所需的元數(shù)據(jù))以確定 MSIL 是否按預(yù)期執(zhí)行。

ilasm [options] filename [[options]filename...]
參數(shù) 說(shuō)明
filename .il 源文件的名稱(chēng)。該文件包含元數(shù)據(jù)聲明指令和符號(hào)化 MSIL 指令?梢蕴峁┒鄠(gè)源文件參數(shù),以便用 Ilasm.exe 生成一個(gè) PE 文件。
選項(xiàng) 說(shuō)明
/alignment=integer 將 FileAlignment 設(shè)置為由 NT Optional 標(biāo)題中的 integer 指定的值。如果在文件中指定了 .alignment IL 指令,則此選項(xiàng)將重寫(xiě)它。
/base=integer 將 ImageBase 設(shè)置為由 NT Optional 標(biāo)題中的 integer 指定的值。如果在文件指定了 .imagebase IL 指令,則此選項(xiàng)將重寫(xiě)它。
/clock 為指定的 .il 源文件測(cè)量并報(bào)告下列編譯時(shí)間(以毫秒為單位):
總運(yùn)行時(shí)間
執(zhí)行后面的所有特定操作所花費(fèi)的總時(shí)間。
啟動(dòng)
加載并打開(kāi)文件。

分析

發(fā)出 MD
發(fā)出元數(shù)據(jù)。
定義引用解析
解析對(duì)文件中的定義的引用。

修正和鏈接

CEE 文件生成
在內(nèi)存中生成文件映像。
PE 文件寫(xiě)入
將映像寫(xiě)入 PE 文件。
/debug 包括調(diào)試信息(局部變量名和參數(shù)名以及行號(hào))。
/dll 生成 .dll 文件作為輸出。
/exe 生成可執(zhí)行文件作為輸出。這是默認(rèn)值。
/flags=integer 將 ImageFlags 設(shè)置為由公共語(yǔ)言運(yùn)行庫(kù)標(biāo)題中的 integer 指定的值。如果在文件中指定了 .corflags IL 指令,則此選項(xiàng)將重寫(xiě)它。有關(guān) integer 的有效值的列表,請(qǐng)參見(jiàn) CorHdr.h 中的 COMIMAGE_FLAGS。
/key:keyFile 使用 keyFile 中包含的私鑰編譯具有強(qiáng)簽名的 filename。
/key:@keySource 使用在 keySource 中生成的私鑰編譯具有強(qiáng)簽名的 filename。
/listing 在標(biāo)準(zhǔn)輸出上生成列表文件。如果省略此選項(xiàng),則不生成列表文件。
/nologo 取消顯示 Microsoft 啟動(dòng)標(biāo)題。
/output:file.ext 指定輸出文件名和擴(kuò)展名。默認(rèn)情況下,輸出文件名與第一個(gè)源文件名相同。默認(rèn)擴(kuò)展名為 .exe。如果指定 /dll 選項(xiàng),則默認(rèn)擴(kuò)展名為 .dll。
注意   指定 /output:myfile.dll 并不會(huì)設(shè)置 /dll 選項(xiàng)。如果不指定 /dll,則會(huì)生成名為 myfile.dll 的可執(zhí)行文件。
/quiet 指定安靜模式;不報(bào)告程序集進(jìn)度。
/resource:file.res 在生成的 .exe 或 .dll 文件中包括 *.res 格式的指定資源文件。使用 /resource 選項(xiàng)只能指定一個(gè) .res 文件。
/subsystem=integer 將 subsystem 設(shè)置為由 NT Optional 標(biāo)題中的 integer 指定的值。如果在文件中指定了 .subsystem IL 指令,則此命令將重寫(xiě)它。有關(guān) integer 的有效值的列表,請(qǐng)參見(jiàn) winnt.h 中的 IMAGE_SUBSYSTEM。
/? 顯示此工具的命令語(yǔ)法和選項(xiàng)。
注意   Ilasm.exe 的所有選項(xiàng)都不區(qū)分大小寫(xiě),并且根據(jù)前三個(gè)字母識(shí)別。例如,/lis 等效于 /listing/res:myresfile.res 等效于 /resource:myresfile.res。指定參數(shù)的選項(xiàng)接受用冒號(hào) (:) 或等號(hào) (=) 作為選項(xiàng)和參數(shù)之間的分隔符。例如,/output:file.ext 等效于 /output=file.ext

備注

MSIL 匯編程序有助于工具供應(yīng)商設(shè)計(jì)和實(shí)現(xiàn) MSIL 生成器。通過(guò)使用 Ilasm.exe,工具和編譯器開(kāi)發(fā)人員可以專(zhuān)注于生成 MSIL 和元數(shù)據(jù),而無(wú)需考慮以 PE 文件格式發(fā)出 MSIL。

與面向運(yùn)行庫(kù)的其他編譯器(如 C# 和 Visual Basic .NET)類(lèi)似,Ilasm.exe 不產(chǎn)生中間對(duì)象文件,并且不需要鏈接階段即可形成 PE 文件。

MSIL 匯編程序可以表達(dá)以運(yùn)行庫(kù)為目標(biāo)的編程語(yǔ)言的所有現(xiàn)有元數(shù)據(jù)和 MSIL 功能。這使得用上面任何編程語(yǔ)言編寫(xiě)的托管代碼都可以在 MSIL 匯編程序中充分表達(dá)并且可以用 Ilasm.exe 編譯。

可以將 Ilasm.exe 同它的伙伴工具 Ildasm.exe 一起使用。Ildasm.exe 采用包含 MSIL 代碼的 PE 文件并創(chuàng)建相應(yīng)的文本文件作為 Ilasm.exe 的輸入。這很有用,例如當(dāng)編譯用并非支持所有運(yùn)行庫(kù)元數(shù)據(jù)屬性的編程語(yǔ)言編寫(xiě)的代碼時(shí)。通過(guò) Ildasm.exe 編譯該代碼并運(yùn)行輸出后,可以手動(dòng)編輯結(jié)果 MSIL 文本文件以添加缺少的屬性。然后可以通過(guò) Ilasm.exe 運(yùn)行此文本文件以生成最終的可執(zhí)行文件。

也可以使用此方法從最初由不同的編譯器生成的數(shù)個(gè) PE 文件生成一個(gè) PE 文件。

注意   目前,無(wú)法對(duì)包含嵌入的本機(jī)代碼的 PE 文件(例如,由 Visual C++ .NET 生成的 PE 文件)使用此技術(shù)。

為使 Ildasm.exe 和 Ilasm.exe 的這種組合使用盡可能準(zhǔn)確,此匯編程序不執(zhí)行某些簡(jiǎn)單的優(yōu)化,即不推斷是使用短格式指令還是使用長(zhǎng)格式指令。例如,此工具不會(huì)嘗試確定它是否可以用短編碼替換長(zhǎng)編碼,這些長(zhǎng)編碼可能是在 MSIL 源中編寫(xiě)的,也可能是由其他編譯器發(fā)出的。如果需要短編碼,則必須顯式編寫(xiě)該格式。但是,此匯編程序在可能的情況下,還是會(huì)檢查是否有超出范圍的條件。

注意   Ildasm.exe 只對(duì)磁盤(pán)上的文件進(jìn)行操作。它不對(duì)安裝在全局程序集緩存中的文件進(jìn)行操作。

示例

下面的命令對(duì) MSIL 文件 myTestFile.il 進(jìn)行匯編并產(chǎn)生可執(zhí)行文件 myTestFile.exe。

ilasm myTestFile

下面的命令對(duì) MSIL 文件 myTestFile.il 進(jìn)行匯編并產(chǎn)生 .dll 文件 myTestFile.dll

ilasm myTestFile /dll 

下面的命令對(duì) MSIL 文件 myTestFile.il 進(jìn)行匯編并產(chǎn)生 .dll 文件 myNewTestFile.dll。

ilasm myTestFile /dll /output:myNewTestFile.dll

MSIL 反匯編程序 (Ildasm.exe)

MSIL 反匯編程序是 MSIL 匯編程序 (Ilasm.exe) 的伙伴工具。Ildasm.exe 采用包含 Microsoft 中間語(yǔ)言 (MSIL) 代碼的可移植可執(zhí)行 (PE) 文件,并創(chuàng)建相應(yīng)的文本文件作為 Ilasm.exe 的輸入。

ildasm [options] [PEfilename] [options]

下列選項(xiàng)可用于 .exe、.dll、.obj 和 .lib 文件。

選項(xiàng) 說(shuō)明
/output:filename 創(chuàng)建具有指定 filename 的輸出文件,而不是在對(duì)話(huà)框中顯示結(jié)果。
/text 將結(jié)果顯示到控制臺(tái)窗口,而不是顯示在對(duì)話(huà)框中或顯示為輸出文件。
/? 顯示此工具的命令語(yǔ)法和選項(xiàng)。

下列附加選項(xiàng)可用于 .exe 和 .dll 文件。

選項(xiàng) 說(shuō)明
/bytes 以十六進(jìn)制格式顯示作為指令注釋的實(shí)際字節(jié)。
/linenum 包含對(duì)原始源行的引用。
/nobar 取消反匯編進(jìn)度指示器彈出窗口的顯示。
/pubonly 只反匯編公共類(lèi)型和公共成員。等效于 /visibility:PUB
/quoteallnames 在單引號(hào)中包含所有名稱(chēng)。
/raweh 以原始格式顯示異常處理子句。
/source 顯示作為注釋的原始源行。
/tokens 顯示類(lèi)和成員的元數(shù)據(jù)標(biāo)記。
/visibility:vis [+vis ...] 只反匯編具有指定可見(jiàn)性的類(lèi)型或成員。以下是 vis 的有效值。
PUB
Public
PRI
Private
FAM
Family
ASM
Assembly
FAA
Family 和 Assembly
FOA
Family 或 Assembly
PSC
Private Scope
有關(guān)這些可見(jiàn)性修飾符的定義,請(qǐng)參見(jiàn) MethodAttributes 枚舉。

下列選項(xiàng)僅對(duì)用于文件或控制臺(tái)輸出的 .exe 和 .dll 文件有效。

選項(xiàng) 說(shuō)明
/all 指定 /header/bytes/tokens 選項(xiàng)的組合。
/header 在輸出中包含文件頭信息。
/noil 取消 MSIL 程序集代碼輸出。
/unicode 對(duì)輸出使用 Unicode 編碼。
/utf8 對(duì)輸出使用 UTF-8 編碼。默認(rèn)值是 ANSI。

下列選項(xiàng)僅對(duì)用于文件或控制臺(tái)輸出的 .exe、.dll、.obj 和 .lib 文件有效。

選項(xiàng) 說(shuō)明
/item:class[::method [(sig)]] 根據(jù)所提供的參數(shù)反匯編下列內(nèi)容:
  • 反匯編指定的 class
  • 反匯編 class 的指定 method。
  • 反匯編具有指定簽名 sigclassmethod。指定具有返回類(lèi)型的簽名和所需的任意多個(gè)參數(shù)。例如,returntype (param1, param2,..paramn)。
注意   Ildasm.exe 的所有選項(xiàng)不區(qū)分大小寫(xiě),并且由前三個(gè)字母識(shí)別。例如,/quo 等效于 /quoteallnames。指定參數(shù)的選項(xiàng)既可以用冒號(hào) (:) 也可以用等號(hào) (=) 作為選項(xiàng)和參數(shù)之間的分隔符。例如,/output:filename 等效于 /output=filename。

備注

Ildasm.exe 只對(duì)磁盤(pán)上的 PE 文件進(jìn)行操作。它不對(duì)安裝在全局程序集緩存中的文件進(jìn)行操作。

Ildasm.exe 生成的文本文件可以用作 MSIL 匯編程序 (Ilasm.exe) 的輸入。這很有用,例如當(dāng)編譯用并非支持所有運(yùn)行庫(kù)元數(shù)據(jù)屬性的編程語(yǔ)言編寫(xiě)的代碼時(shí)。通過(guò) Ildasm.exe 編譯該代碼并運(yùn)行輸出后,可以手動(dòng)編輯結(jié)果 MSIL 文本文件以添加缺少的屬性。然后可以通過(guò) MSIL 匯編程序運(yùn)行此文本文件以生成最終的可執(zhí)行文件。

注意   目前,無(wú)法對(duì)包含嵌入的本機(jī)代碼的 PE 文件(例如,由 Visual C++ .NET 生成的 PE 文件)使用此技術(shù)。

可以使用 MSIL 反匯編程序中的默認(rèn) GUI,在分層樹(shù)視圖中查看任何現(xiàn)有 PE 文件的元數(shù)據(jù)和反匯編代碼。若要使用此 GUI,請(qǐng)?jiān)诿钚兄墟I入 ildasm,無(wú)需提供 PEfilename 參數(shù)或任何選項(xiàng)。從“文件”菜單中可以定位到希望加載到 Ildasm.exe 中的 PE 文件。若要保存為選定的 PE 顯示的元數(shù)據(jù)和反匯編代碼,請(qǐng)?jiān)凇拔募辈藛沃羞x擇“轉(zhuǎn)儲(chǔ)”命令。若要只保存分層樹(shù)視圖,請(qǐng)?jiān)凇拔募敝羞x擇“轉(zhuǎn)儲(chǔ)樹(shù)視圖”命令。有關(guān)將文件加載到 Ildasm.exe 中和解釋輸出的詳細(xì)指南,請(qǐng)參見(jiàn) Ildasm.exe 教程,該教程位于 .NET Framework SDK 附帶的 Samples 文件夾中。

如果用包含嵌入資源的 PEfilename 參數(shù)提供 Ildasm.exe,則此工具生成多個(gè)輸出文件:一個(gè)包含 MSIL 代碼的文本文件,而每個(gè)嵌入的托管資源都有一個(gè)用該資源在元數(shù)據(jù)中的名稱(chēng)生成的 .resources 文件。如果 PEfilename 中有嵌入的非托管資源,則用 /output 選項(xiàng)為 MSIL 輸出指定的文件名生成 .res 文件。

注意   Ildasm.exe 只顯示 .obj 和 .lib 輸入文件的元數(shù)據(jù)說(shuō)明。不反匯編這些文件類(lèi)型的 MSIL 代碼。

可以對(duì) .exe 或 .dll 文件運(yùn)行 Ildasm.exe 來(lái)確定該文件是否是托管的。如果該文件不是托管的,則此工具將顯示一條信息,說(shuō)明該文件不包含有效的公共語(yǔ)言運(yùn)行庫(kù)頭,并且無(wú)法反匯編。如果該文件是托管的,則此工具將成功運(yùn)行。

示例

下面的命令使 PE 文件 MyHello.exe 的元數(shù)據(jù)和反匯編代碼顯示在 Ildasm.exe 的默認(rèn) GUI 中。

ildasm myHello.exe

下面的命令對(duì) MyFile.exe 文件進(jìn)行反匯編,并將結(jié)果 MSIL 匯編程程序文本存儲(chǔ)在 MyFile.il 文件中。

ildasm MyFile.exe /output:MyFile.il

下面的命令對(duì) MyFile.exe 文件進(jìn)行反匯編,并將結(jié)果 MSIL 匯編程序文本顯示到控制臺(tái)窗口中。

ildasm MyFile.exe /text

如果文件 MyApp.exe 包含嵌入的托管和非托管資源,則下面的命令將產(chǎn)生以下 4 個(gè)文件:MyApp.il、MyApp.resIcons.resourcesMessage.resources

ildasm MyApp.exe /output:MyApp.il

下面的命令對(duì) MyFile.exeMyClass 類(lèi)中的 MyMethod 方法進(jìn)行反匯編,并將輸出顯示到控制臺(tái)窗口中。

ildasm /item:MyClass::MyMethod MyFile.exe /text

在上面的示例中,可能有幾個(gè)具有不同簽名的 MyMethod 方法。下面的命令對(duì)返回類(lèi)型為 void 且?guī)в袇?shù) int32System.string MyMethod 方法進(jìn)行反匯編。

ildasm /item:"MyClass::MyMethod(void(int32,class System.String))" MyFile.exe /text
原文在:http://msdn.microsoft.com/library/CHS/cptools/html/cpconmsildisassemblerildasmexe.asp

小提示:如果轉(zhuǎn)載此文,請(qǐng)注明來(lái)源于西部e網(wǎng)(m.wsalc.com),謝謝!

關(guān)鍵詞:dotnet

贊助商鏈接:

主站蜘蛛池模板: 澄江县| 固阳县| 徐闻县| 托克托县| 河间市| 崇仁县| 禹城市| 高尔夫| 镇康县| 鄱阳县| 沛县| 汕尾市| 缙云县| 西吉县| 桦川县| 沧州市| 襄垣县| 衡阳市| 临安市| 尉氏县| 五华县| 阿合奇县| 安陆市| 县级市| 扶余县| 田东县| 牙克石市| 灵宝市| 溧水县| 湾仔区| 保亭| 迭部县| 洱源县| 鸡西市| 伊宁市| 鄂州市| 色达县| 固阳县| 大安市| 根河市| 永泰县|