簡體   English   中英

如何使用Java API確定文件是32位還是64位?

[英]How to determine if a file is 32 bits or 64 bits using Java APIs?

我有一個要上傳的文件(* .wim文件,可以是32位或64位-WAIK / WADK)。

WIM文件被復制到一個位置。

之前我們只有32位支持,但是現在出於UEFI的目的,我們需要同時支持32位(對於BIOS)和64位(對於UEFI)。

現在,上傳完成后,意圖是基於文件類型,我將其復制到32位或64位文件夾中。

如何區分呢?

PS:刪除了win標記,因為它更多地是文件類型而不是WIM的一般確定。

如果我們不考慮WIM問題,而只是考慮查找為其編譯exe文件(Portable Executable)的體系結構,則這相對簡單:

  • 該文件必須以兩個字節0x4d,0x5a開頭,等效於字符串“ MZ”的ASCII編碼。
  • 在偏移量0x3c處,讀取4字節的little-endian編碼以獲取PE標頭的偏移量。
  • 在偏移“ PE標頭”處,應檢查四個字節0​​x50、0x45、0x00、0x00,它們等效於字符串“ PE \\ 0 \\ 0”的ASCII編碼。
  • 在PE標頭之后,您會立即發現一個20字節長的COFF文件標頭。 機器類型在COFF標頭的前兩個字節中編碼(小尾數)。

與您的情況相關的機器類型可能是0x014c(i386)和0x8664(AMD64)。

有關更多詳細信息,您可以在此處從Microsoft獲得PE規范。 不同的機器類型在2.3.1節中列出。

您可能還想檢查COFF標頭的特征字段(最后兩個字節),以將文件標識為可執行文件(而不是DLL文件)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM