31

特定のdllファイルが32ビットか64ビットかを教えてくれるWindowscmdのコマンドを探しています

Windowsにこのようなものはありますか?

4

4 に答える 4

35

DUMPBINVisual C ++に含まれており、/HEADERSスイッチでこの情報を提供できます。

32ビットイメージからの出力例:

FILE HEADER VALUES
     14C machine (i386)
       6 number of sections
306F7A22 time date stamp Sun Oct 01 22:35:30 1995
       0 file pointer to symbol table
     1D1 number of symbols
      E0 size of optional header
     302 characteristics
            Executable
            32 bit word machine
            Debug information stripped
于 2013-01-28T11:27:46.030 に答える
3

dbghelpライブラリーを使用して、イメージ・ヘッダーを取得できます。次に、から必要な情報を読み取ることができますFileHeader

ここにいくつかのサンプルコードがあります。やや不完全なエラー処理はご容赦ください。説明のためにすばやくノックアップしましたが、C++に精通していません。

#include <Windows.h>
#include <Dbghelp.h>

#include <string>
#include <iostream>

using namespace std;

bool GetImageFileHeaders(wstring fileName, IMAGE_NT_HEADERS &headers)
{
    HANDLE fileHandle = CreateFile(
        fileName.c_str(),
        GENERIC_READ,
        FILE_SHARE_READ,
        nullptr,
        OPEN_EXISTING,
        FILE_ATTRIBUTE_NORMAL,
        0
    );
    if (fileHandle == INVALID_HANDLE_VALUE)
        return false;

    HANDLE imageHandle = CreateFileMapping(
        fileHandle,
        nullptr,
        PAGE_READONLY,
        0,
        0,
        nullptr
    );
    if (imageHandle == 0)
    {
        CloseHandle(fileHandle);
        return false;
    }

    void *imagePtr = MapViewOfFile(
        imageHandle,
        FILE_MAP_READ,
        0, 
        0,
        0
    );
    if (imagePtr == nullptr)
    {
        CloseHandle(imageHandle);
        CloseHandle(fileHandle);
        return false;
    }

    PIMAGE_NT_HEADERS headersPtr = ImageNtHeader(imagePtr);
    if (headersPtr == nullptr)
    {
        UnmapViewOfFile(imagePtr);
        CloseHandle(imageHandle);
        CloseHandle(fileHandle);
        return false;
    }

    headers = *headersPtr;

    UnmapViewOfFile(imagePtr);
    CloseHandle(imageHandle);
    CloseHandle(fileHandle);

    return true;
}

int main(int argc, char* argv[])
{
    IMAGE_NT_HEADERS headers;
    if (GetImageFileHeaders(L"C:\\windows\\system32\\user32.dll", headers))
    {
        if (headers.FileHeader.Machine == IMAGE_FILE_MACHINE_I386)
            cout << "x86";
        else if (headers.FileHeader.Machine == IMAGE_FILE_MACHINE_IA64)
            cout << "IA64";
        else if (headers.FileHeader.Machine == IMAGE_FILE_MACHINE_AMD64)
            cout << "x64";
        else
            cout << "Machine not recognised";
    }
    return 0;
}

これをリンクするdbghelp.libには、プロジェクトの追加の依存関係に追加する必要があります。この背後にある詳細の詳細については、使用されるさまざまなAPI呼び出しのMSDNドキュメントを参照してください。

于 2013-01-28T12:28:41.733 に答える
3

7zipをインストールした場合:

"C:\Program Files\7-Zip\7z.exe" l "my-program.exe" | findstr CPU
于 2020-09-02T15:14:16.703 に答える
1

探している機能は、UNIXシステムでネイティブに使用できます。'file'コマンドを使用します。Cygwinまたは他のUNIXエミュレーターの1つをインストールする場合は、Windowsシステムで「ファイル」を使用できます。

于 2016-11-15T20:20:34.833 に答える