windows - विंडोज कमांड यह बताने के लिए कि क्या.dll फ़ाइल 32 बिट या 64 बिट है?




cmd 32bit-64bit (2)

मैं विंडोज सीएमडी में एक कमांड की तलाश कर रहा हूं ताकि मुझे यह बताने के लिए कि एक निश्चित डीएलएल फ़ाइल 32 बिट या 64 बिट है

क्या खिड़कियों में ऐसा कुछ है?


आप छवि शीर्षलेख प्राप्त करने के लिए dbghelp लाइब्रेरी का उपयोग कर सकते हैं। फिर आप FileHeader से आवश्यक जानकारी को पढ़ सकते हैं।

यहां कुछ नमूना कोड है। कृपया बदनाम त्रुटि प्रबंधन को माफ कर दें। मैंने बस इसे चित्रित करने के लिए जल्दी से खटखटाया, और मैं सी ++ में भी दूरस्थ रूप से धाराप्रवाह नहीं हूं।

#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 जोड़ने की आवश्यकता है। इसके पीछे के विवरण के बारे में अधिक जानने के लिए, उपयोग की जाने वाली विभिन्न एपीआई कॉल के लिए एमएसडीएन दस्तावेज देखें।


जिस क्षमता को आप ढूंढ रहे हैं वह यूनिक्स सिस्टम पर मूल रूप से उपलब्ध है; 'फाइल' कमांड का प्रयोग करें। यदि आप सिगविन या अन्य यूनिक्स अनुकरणकर्ताओं में से एक स्थापित करते हैं तो आप विंडोज सिस्टम पर 'फ़ाइल' का उपयोग कर सकते हैं।





32bit-64bit