亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何測試Windows DLL文件以確定它是32位還是64位?

如何測試Windows DLL文件以確定它是32位還是64位?

我想編寫一個測試腳本或程序,斷言給定目錄中的所有DLL文件都是特定的構建類型。我會在SDK的構建過程結束時使用它作為一個健全性檢查,以確保64位版本沒有以某種方式獲得一些32位DLL文件,反之亦然。有沒有一種簡單的方法來查看DLL文件并確定其類型?該解決方案應該適用于xp32和xp64。
查看完整描述

3 回答

?
搖曳的薔薇

TA貢獻1793條經驗 獲得超6個贊

血淋淋的細節

DLL使用PE可執行格式,從文件中讀取該信息并不太棘手。


有關概述,請參閱有關PE文件格式的此MSDN文章。您需要讀取MS-DOS標頭,然后讀取IMAGE_NT_HEADERS結構。它包含IMAGE_FILE_HEADER結構,其中包含Machine成員中需要的信息,其中包含以下值之一


IMAGE_FILE_MACHINE_I386(0x014c)

IMAGE_FILE_MACHINE_IA64(0x0200)

IMAGE_FILE_MACHINE_AMD64(0x8664)

此信息應該在文件中的固定偏移量,但我仍然建議遍歷該文件并檢查MS-DOS標頭和IMAGE_NT_HEADERS的簽名,以確保您應對任何未來的更改。


使用ImageHelp讀取標題...

您還可以使用ImageHelp API來做到這一點-加載使用DLL 的LoadImage,你會得到一個LOADED_IMAGE結構,其中將包含一個指向IMAGE_NT_HEADERS結構。使用ImageUnload釋放LOADED_IMAGE。


...或者適應這個粗糙的Perl腳本

這是粗略的Perl腳本,可以完成工作。它檢查文件是否有DOS標頭,然后從IMAGE_DOS_HEADER 60字節讀取PE偏移到文件中。


然后它尋求PE部分的開始,讀取簽名并檢查它,然后提取我們感興趣的值。


#!/usr/bin/perl

#

# usage: petype <exefile>

#

$exe = $ARGV[0];


open(EXE, $exe) or die "can't open $exe: $!";

binmode(EXE);

if (read(EXE, $doshdr, 64)) {


   ($magic,$skip,$offset)=unpack('a2a58l', $doshdr);

   die("Not an executable") if ($magic ne 'MZ');


   seek(EXE,$offset,SEEK_SET);

   if (read(EXE, $pehdr, 6)){

       ($sig,$skip,$machine)=unpack('a2a2v', $pehdr);

       die("No a PE Executable") if ($sig ne 'PE');


       if ($machine == 0x014c){

            print "i386\n";

       }

       elsif ($machine == 0x0200){

            print "IA64\n";

       }

       elsif ($machine == 0x8664){

            print "AMD64\n";

       }

       else{

            printf("Unknown machine type 0x%lx\n", $machine);

       }

   }

}


close(EXE);


查看完整回答
反對 回復 2019-08-30
?
紅顏莎娜

TA貢獻1842條經驗 獲得超13個贊

如果您安裝了Cygwin(由于各種原因我強烈推薦),您可以在DLL上使用'file'實用程序


file <filename>

這將產生這樣的輸出:


icuuc36.dll: MS-DOS executable PE  for MS Windows (DLL) (GUI) Intel 80386 32-bit


查看完整回答
反對 回復 2019-08-30
  • 3 回答
  • 0 關注
  • 1497 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號