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




cmd 32bit-64bit (3)

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

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

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


DUMPBIN दृश्य सी ++ के साथ शामिल है और यह जानकारी /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

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





32bit-64bit