.NET অ্যাসেম্বলিটি x86 বা x64 এর জন্য নির্মিত হয়েছিল কিনা তা আমি কীভাবে নির্ধারণ করতে পারি?


327

আমি নেট নেট অ্যাসেমব্লির একটি ইচ্ছামত তালিকা পেয়েছি।

আমি প্রোগ্রামগতভাবে যাচাই করতে হবে যে প্রতিটি ডিএলএল x86 (x64 বা কোনও সিপিইউ হিসাবে বিপরীতে) জন্য নির্মিত হয়েছিল কিনা। এটা কি সম্ভব?




2
.NET 4.5 এর সাথে সম্পর্কিত CorFlags এর পরবর্তী সংস্করণে, "32BIT" "32BITREQ" এবং "32BITPREF" দ্বারা প্রতিস্থাপিত হয়েছিল।
পিটার মর্টেনসেন

উত্তর:


280

তাকানো System.Reflection.AssemblyName.GetAssemblyName(string assemblyFile)

আপনি ফিরে আসা সমাবেশ নাম থেকে উদাহরণস্বরূপ মেটাডেটা পরীক্ষা করতে পারেন:

পাওয়ারশেল ব্যবহার :

[৩]] সি: \> [প্রতিবিম্ব FL

নাম: Microsoft.GLEE
সংস্করণ: 1.0.0.0
সংস্কৃতিআইএনফো:
কোডবেস: ফাইল: /// সি: / প্রকল্পগুলি / পাওয়ারশেল / বিল্ডএনলেজার / ...
এস্কেপডকোডবেস: ফাইল: /// সি: / প্রকল্পগুলি / পাওয়ারশেল / বিল্ডআনলেজার / ...
প্রসেসর আর্কিটেকচার: এমএসআইএল
পতাকা: পাবলিককি
হাশআলগোরিদম: এসএএএ 1
সংস্করণ সামঞ্জস্যতা: একই মেশিন ine
কী পেয়ার:
পূর্ণ নাম: মাইক্রোসফ্ট.জিএলইই, সংস্করণ = 1.0.0.0, সংস্কৃতি = নিউট ... 

এখানে, প্রসেসর আর্কিটেকচার লক্ষ্য প্ল্যাটফর্মটি সনাক্ত করে।

  • আমড : : এক্স 64৪ আর্কিটেকচারের ভিত্তিতে একটি A৪ বিট প্রসেসর।
  • আর্ম : একটি এআরএম প্রসেসর।
  • আইএ 64৪ : কেবলমাত্র 64৪ -বিট ইন্টেল ইটানিয়াম প্রসেসর।
  • এমএসআইএল : প্রসেসর এবং বিট-প্রতি-শব্দের প্রতি নিরপেক্ষ।
  • এক্স 86 : একটি 32-বিট ইন্টেল প্রসেসর, স্থানীয় বা উইন্ডোজে উইন্ডোজের পরিবেশে একটি 64-বিট প্ল্যাটফর্মের (ডাব্লুডাব্লু 64)।
  • কোনওটি নয় : প্রসেসর এবং বিট-প্রতি-শব্দের একটি অজানা বা অনির্দিষ্ট combination

আমি পদ্ধতিটিতে কল করতে এই উদাহরণে পাওয়ারশেল ব্যবহার করছি।


60
বোকা প্রশ্নটি ক্ষমা করুন - তবে এর মধ্যে আপনাকে কী বলে যে এটি x86?
জর্জ মাউয়ার

53
প্রসেসর আর্কিটেকচার ক্ষেত্রটি একটি গণনা; উপরের উদাহরণে এটি এমএসআইএল-তে সেট করা হয়েছে যার অর্থ "প্রসেসর এবং বিট-প্রতি-শব্দের প্রতি নিরপেক্ষ"। অন্যান্য মানগুলির মধ্যে রয়েছে X86, আইএ 64, এমডি 64। আরও তথ্যের জন্য দেখুন msdn.microsoft.com/en-us/library/…
ব্রায়ান গিলেস্পি

4
[reflection.assemblyname]::GetAssemblyName("${pwd}\name.dll")কখনও কখনও চেষ্টা করুন প্রক্রিয়াটির বর্তমান ডিরেক্টরি বর্তমান সরবরাহকারীর মতো নয় (যা আমি অনুমান করি যে ডিএলএল আপনার জন্য রয়েছে)
x0n

2
সন্ধানের জন্য অন্য একটি সতর্কতা হ'ল আপনি যদি ইন্টারনেট থেকে ডাউনলোড করেন তবে ডিএলএলটিকে "অবরোধ মুক্ত" করতে ভুলে যাচ্ছেন। অন্বেষণকারী-ফাইল, বা ডান ক্লিক / বৈশিষ্ট্য / এক্সপ্লোরার থেকে অবরুদ্ধ ব্যবহার করুন। আপনি যদি ইতিমধ্যে বর্তমান অধিবেশনে একবার ব্যর্থ হয়ে থাকেন তবে তার জন্য শেলটি পুনরায় চালু করতে হবে (তার জন্য ইন্টারনেট এক্সপ্লোরারকে দোষ দিন - হ্যাঁ, সত্যিই।)
x0n

1
এএসপি.এনইটি এমভিসি কোডে // DevDiv 216459: This code originally used Assembly.GetName(), but that requires FileIOPermission, which isn't granted in medium trust. However, Assembly.FullName *is* accessible in medium trust.দুঃখজনকভাবে একটি মন্তব্য রয়েছে , ব্যবহার না করে প্রসেসর আর্কিটেকচার পড়ার উপায় নেই GetName instance method; ব্যবহার করে AssemblyName constructor, ক্ষেত্রটি সর্বদা সেট করা থাকে None
মেটাডিংস

221

কোনও সমাবেশের স্থিতি নির্ধারণের জন্য এবং অ্যাসেম্বলিটিকে একটি খোলার হিসাবে খোলার জন্য আপনি CorFlags CLI সরঞ্জামটি ব্যবহার করতে পারেন (উদাহরণস্বরূপ, সি: \ প্রোগ্রাম ফাইলগুলি \ মাইক্রোসফ্ট এসডিকে \ উইন্ডোজ \ v7.0 \ বিন \ কর্পফ্ল্যাজ.এক্সই) বাইনারি সম্পদ আপনি 32BIT পতাকা 1 ( x86 ) বা 0 (যে কোনও সিপিইউ বা x64 , উপর নির্ভর করে PE) সেট করে আছে কিনা তা নির্ধারণ করার জন্য আপনাকে কোথায় তা নির্ধারণ করতে হবে :

Option    | PE    | 32BIT
----------|-------|---------
x86       | PE32  | 1
Any CPU   | PE32  | 0
x64       | PE32+ | 0

.NET সহ ব্লগ পোস্ট x64 বিকাশ সম্পর্কে কিছু তথ্য রয়েছে corflags

আরও উন্নততর, আপনি নির্ধারণ করতে ব্যবহারModule.GetPEKind করতে পারেন যে কোনও অ্যাসেমব্লির PortableExecutableKindsমান PE32Plus(-৪-বিট), Required32Bit(৩২-বিট এবং ডাব্লুডাব্লু), বা ILOnly(কোনও সিপিইউ) অন্যান্য বৈশিষ্ট্য সহ।


1
আপনার আপডেটটি দেখার পরে, getPEKind ব্যবহার করা এটি করার উপযুক্ত উপায় বলে মনে হচ্ছে। আমি আপনার উত্তর হিসাবে চিহ্নিত করেছি।
এহুদা গ্যাব্রিয়েল হিমাঙ্গো


2
আপনাকে 32 বিট প্রক্রিয়া থেকে গেটপেইকাইন্ডকে কল করতে হবে
লুডু

2
আমি ভিএস 2008, ভিএস 2010, ভিএস 2012 এবং ভিএস 2013 ইনস্টল করেছি C সি: \ প্রোগ্রাম ফাইলগুলি (x86) \ মাইক্রোসফ্ট এসডিকে \ উইন্ডোজ sub এ সাবফোল্ডারগুলিতে আমার 8 টি ফাইল CorFlags.exe রয়েছে \ আমার কোনটি ব্যবহার করা উচিত?
কিকিনেট

5
এই উত্তরে নির্দেশিত হিসাবে , .NET 4.5 এ 32BIT পতাকার পরিবর্তে 32BITREQ এবং 32BITPREF রয়েছে। পিই 32/0/0 এবং পিই 32/0/1 যথাক্রমে যেকোন সিপিইউ এবং অ্যানসিপিইউ 32-বিট পছন্দসই।
অ্যাঙ্গুলারসেন

141

কেবল স্পষ্টতার জন্য, CorFlags.exe .NET ফ্রেমওয়ার্ক এসডিকে অংশ । আমার মেশিনে আমার বিকাশের সরঞ্জাম রয়েছে এবং আমার পক্ষে সহজতম উপায়টি নির্ধারণ করে যে কোনও ডিএলএল কেবল 32-বিট কিনা তা হ'ল:

  1. ভিজ্যুয়াল স্টুডিও কমান্ড প্রম্পটটি খুলুন (উইন্ডোজে: মেনু স্টার্ট / প্রোগ্রাম / মাইক্রোসফ্ট ভিজ্যুয়াল স্টুডিও / ভিজ্যুয়াল স্টুডিও সরঞ্জাম / ভিজ্যুয়াল স্টুডিও 2008 কমান্ড প্রম্পট)

  2. প্রশ্নে ডিএলএল ধারণকারী ডিরেক্টরিতে সিডি

  3. এর মতো করফ্ল্যাগগুলি চালান: corflags MyAssembly.dll

আপনি আউটপুট এরকম কিছু পাবেন:

Microsoft (R) .NET Framework CorFlags Conversion Tool.  Version  3.5.21022.8
Copyright (c) Microsoft Corporation.  All rights reserved.

Version   : v2.0.50727
CLR Header: 2.5
PE        : PE32
CorFlags  : 3
ILONLY    : 1
32BIT     : 1
Signed    : 0

মতামত অনুসারে উপরের পতাকাগুলি নিম্নরূপ পড়তে হবে:

  • যে কোনও সিপিইউ: পিই = পিই 32 এবং 32 বিআইটি = 0
  • x86: পিই = পিই 32 এবং 32 বিআইটি = 1
  • 64-বিট: পিই = পিই 32 + এবং 32 বিআইটি = 0

12
এরই মধ্যে এটি পরিবর্তিত হয়েছে বলে মনে হয়; এখন প্রদর্শন corflags 32BITREQএবং 32BITPREFএকটি একক বদলে 32BITমান।
বা ম্যাপার

1
মাইক্রোসফ্ট .NET 4.5 একটি নতুন বিকল্প চালু করেছে, যে কোনও সিপিইউ 32-বিট পছন্দসই। বিস্তারিত এখানে
আরবিটি

"ভিজ্যুয়াল স্টুডিও কমান্ড প্রম্পট" আজকাল " ভিজ্যুয়াল স্টুডিও 2019 বিকাশকারী কমান্ড প্রম্পট " নামে পরিচিত ।
উয়ে কেইম

22

আপনি নিজের লেখার সম্পর্কে কীভাবে? উইন্ডোজ 95 এ কার্যকর হওয়ার পরে পি ই আর্কিটেকচারের মূলটি গুরুতরভাবে পরিবর্তিত হয়নি। এখানে একটি সি # উদাহরণ রয়েছে:

    public static ushort GetPEArchitecture(string pFilePath)
    {
        ushort architecture = 0;
        try
        {
            using (System.IO.FileStream fStream = new System.IO.FileStream(pFilePath, System.IO.FileMode.Open, System.IO.FileAccess.Read))
            {
                using (System.IO.BinaryReader bReader = new System.IO.BinaryReader(fStream))
                {
                    if (bReader.ReadUInt16() == 23117) //check the MZ signature
                    {
                        fStream.Seek(0x3A, System.IO.SeekOrigin.Current); //seek to e_lfanew.
                        fStream.Seek(bReader.ReadUInt32(), System.IO.SeekOrigin.Begin); //seek to the start of the NT header.
                        if (bReader.ReadUInt32() == 17744) //check the PE\0\0 signature.
                        {
                            fStream.Seek(20, System.IO.SeekOrigin.Current); //seek past the file header,
                            architecture = bReader.ReadUInt16(); //read the magic number of the optional header.
                        }
                    }
                }
            }
        }
        catch (Exception) { /* TODO: Any exception handling you want to do, personally I just take 0 as a sign of failure */}
        //if architecture returns 0, there has been an error.
        return architecture;
    }
}

এখনকার ধ্রুবকগুলি হ'ল:

0x10B - PE32  format.
0x20B - PE32+ format.

তবে এই পদ্ধতির সাহায্যে এটি নতুন ধ্রুবকগুলির সম্ভাবনার জন্য অনুমতি দেয়, আপনি যথাযথ দেখায় কেবল ফিরতি বৈধ করুন।


1
আকর্ষণীয়, ব্যাখ্যা সহ কোডটির জন্য ধন্যবাদ। মডিউল.গেটপেইকিন্ড সম্ভবত সবচেয়ে সহজ পথ। তবে এটি শেখার জন্য সহায়ক। ধন্যবাদ।
এহুদা গ্যাব্রিয়েল হিমাঙ্গো

3
খুব আকর্ষণীয় তবে যখন আমি কোনও সিপিইউ দিয়ে একটি অ্যাপ্লিকেশন সংকলন করেছি তখন ফলাফলটি 0x10 বি হয়। এটি ভুল কারণ আমার অ্যাপ্লিকেশনটি একটি x 64 সিস্টেমে চালিত। অন্য কোন পতাকা চেক আছে?
স্যামুয়েল

GetPEArchitecture .net 3.5, 4.0, 4.5 এবং 4.5.1 ব্যবহার করে সংকলিত সমাবেশগুলির জন্য কাজ করে? যাইহোক, আমি মনে করি, মডিউল G 32 বিট অ্যাসেমব্লিগুলি পরীক্ষা করার সময় GETPEKind একটি 64 বিট প্রক্রিয়াতে ব্যর্থ হয়।
কিকিনেট

9

কোডপ্লেক্সে এই প্রকল্প থেকে CorFlagsReader ব্যবহার করার চেষ্টা করুন । অন্যান্য সম্মেলনে এর কোনও উল্লেখ নেই এবং এটি যেমন রয়েছে তেমন ব্যবহার করা যেতে পারে।


1
এটি সবচেয়ে সঠিক এবং দরকারী উত্তর।
কিরিল ওসেনকোভ

লিঙ্কটি এখনও এই লেখার মতোই কাজ করে তবে কোডপ্লেক্স যেভাবে বন্ধ হয়ে যাচ্ছে, তাই দেরি হওয়ার আগে যথাযথ ব্যবস্থা নেওয়া ভাল হবে।
পিটার মর্টেনসেন


6
[TestMethod]
public void EnsureKWLLibrariesAreAll64Bit()
{
    var assemblies = Assembly.GetExecutingAssembly().GetReferencedAssemblies().Where(x => x.FullName.StartsWith("YourCommonProjectName")).ToArray();
    foreach (var assembly in assemblies)
    {
        var myAssemblyName = AssemblyName.GetAssemblyName(assembly.FullName.Split(',')[0] + ".dll");
        Assert.AreEqual(ProcessorArchitecture.MSIL, myAssemblyName.ProcessorArchitecture);
    }
}

এর জন্য ধন্যবাদ, আমাদের একটি অ্যাপ্লিকেশন x86 হিসাবে তৈরি করতে হবে, একটি ইউনিট পরীক্ষা যুক্ত করে নিশ্চিত করে যে বিল্ড সার্ভারের বিল্ড লাইব্রেরি 32 বিট হবে এবং এই ভুলগুলি ঘটতে এড়াবে :)
মিডো

5

নীচে একটি ব্যাচ ফাইল রয়েছে যা corflags.exeসকলের বিরুদ্ধে dllsএবং exesবর্তমান কার্যনির্বাহী ডিরেক্টরি এবং সমস্ত উপ ডিরেক্টরিতে চলবে , ফলাফলগুলি বিশ্লেষণ করবে এবং প্রতিটিটির লক্ষ্য স্থিতি প্রদর্শন করবে।

corflags.exeযে সংস্করণটি ব্যবহৃত হয় তার উপর নির্ভর করে আউটপুটটিতে লাইন আইটেমগুলি হয় অন্তর্ভুক্ত করবে 32BIT, বা 32BITREQ (এবং 32BITPREF) । এই দুটির মধ্যে যে কোনও একটি আউটপুটে অন্তর্ভুক্ত করা হ'ল সমালোচনামূলক লাইন আইটেম যা অবশ্যই Any CPUএবং এর মধ্যে পার্থক্য দেখানোর জন্য চেক করা উচিত x86। যদি আপনি corflags.exe(প্রাক উইন্ডোজ এসডিকে ভি 8.0 এ) এর একটি পুরানো সংস্করণ ব্যবহার করে থাকেন তবে অন্যরা পূর্ববর্তী উত্তরে 32BITসূচিত হিসাবে কেবল আউটপুটটিতে কেবল লাইন আইটেম উপস্থিত থাকবে। অন্যথায় 32BITREQএবং 32BITPREFএটি প্রতিস্থাপন।

এই অনুমান corflags.exeহয় %PATH%। এটি নিশ্চিত করার সবচেয়ে সহজ উপায় হ'ল এ Developer Command Prompt। বিকল্পভাবে আপনি এটির ডিফল্ট অবস্থান থেকে এটি অনুলিপি করতে পারেন ।

নীচের ব্যাচ ফাইলটি যদি কোনও পরিচালনা না করা dllবা exeএটির বিরুদ্ধে চালানো হয় তবে এটি ভুল হিসাবে এটি প্রদর্শিত হবে x86, যেহেতু আসল আউটপুটটি Corflags.exeত্রুটির বার্তার মতো হবে:

করফ্ল্যাগস: ত্রুটি সিএফ 800: নির্দিষ্ট ফাইলটির কোনও বৈধ পরিচালিত শিরোনাম নেই

@echo off

echo.
echo Target architecture for all exes and dlls:
echo.

REM For each exe and dll in this directory and all subdirectories...
for %%a in (.exe, .dll) do forfiles /s /m *%%a /c "cmd /c echo @relpath" > testfiles.txt

for /f %%b in (testfiles.txt) do (
    REM Dump corflags results to a text file
    corflags /nologo %%b > corflagsdeets.txt

   REM Parse the corflags results to look for key markers   
   findstr /C:"PE32+">nul .\corflagsdeets.txt && (      
      REM `PE32+` indicates x64
        echo %%~b = x64
    ) || (
      REM pre-v8 Windows SDK listed only "32BIT" line item, 
      REM newer versions list "32BITREQ" and "32BITPREF" line items
        findstr /C:"32BITREQ  : 0">nul /C:"32BIT     : 0" .\corflagsdeets.txt && (
            REM `PE32` and NOT 32bit required indicates Any CPU
            echo %%~b = Any CPU
        ) || (
            REM `PE32` and 32bit required indicates x86
            echo %%~b = x86
        )
    )

    del corflagsdeets.txt
)

del testfiles.txt
echo.

2

আর একটি উপায় হ'ল ডিএলএলে ভিজ্যুয়াল স্টুডিও সরঞ্জামগুলি থেকে ডাম্পবিন ব্যবহার করা এবং উপযুক্ত আউটপুট সন্ধান করা

dumpbin.exe /HEADERS <your dll path>
    FILE HEADER VALUE
                 14C machine (x86)
                   4 number of sections
            5885AC36 time date stamp Mon Jan 23 12:39:42 2017
                   0 file pointer to symbol table
                   0 number of symbols
                  E0 size of optional header
                2102 characteristics
                       Executable
                       32 bit word machine
                       DLL

দ্রষ্টব্য: ও / পি এর উপরে 32 বিট ডিএল এর জন্য

ডাম্পবিন.এক্সইএর সাথে আরও একটি দরকারী বিকল্প হ'ল / এক্সপোর্টস, এটি আপনাকে ডিএল দ্বারা প্রকাশিত ফাংশনটি দেখাবে

dumpbin.exe /EXPORTS <PATH OF THE DLL>

2

আরও সাধারণ উপায় - সাক্ষ্য এবং চিত্রের ধরণ নির্ধারণ করতে ফাইলের কাঠামো ব্যবহার করুন:

public static CompilationMode GetCompilationMode(this FileInfo info)
{
    if (!info.Exists) throw new ArgumentException($"{info.FullName} does not exist");

    var intPtr = IntPtr.Zero;
    try
    {
        uint unmanagedBufferSize = 4096;
        intPtr = Marshal.AllocHGlobal((int)unmanagedBufferSize);

        using (var stream = File.Open(info.FullName, FileMode.Open, FileAccess.Read))
        {
            var bytes = new byte[unmanagedBufferSize];
            stream.Read(bytes, 0, bytes.Length);
            Marshal.Copy(bytes, 0, intPtr, bytes.Length);
        }

        //Check DOS header magic number
        if (Marshal.ReadInt16(intPtr) != 0x5a4d) return CompilationMode.Invalid;

        // This will get the address for the WinNT header  
        var ntHeaderAddressOffset = Marshal.ReadInt32(intPtr + 60);

        // Check WinNT header signature
        var signature = Marshal.ReadInt32(intPtr + ntHeaderAddressOffset);
        if (signature != 0x4550) return CompilationMode.Invalid;

        //Determine file bitness by reading magic from IMAGE_OPTIONAL_HEADER
        var magic = Marshal.ReadInt16(intPtr + ntHeaderAddressOffset + 24);

        var result = CompilationMode.Invalid;
        uint clrHeaderSize;
        if (magic == 0x10b)
        {
            clrHeaderSize = (uint)Marshal.ReadInt32(intPtr + ntHeaderAddressOffset + 24 + 208 + 4);
            result |= CompilationMode.Bit32;
        }
        else if (magic == 0x20b)
        {
            clrHeaderSize = (uint)Marshal.ReadInt32(intPtr + ntHeaderAddressOffset + 24 + 224 + 4);
            result |= CompilationMode.Bit64;
        }
        else return CompilationMode.Invalid;

        result |= clrHeaderSize != 0
            ? CompilationMode.CLR
            : CompilationMode.Native;

        return result;
    }
    finally
    {
        if (intPtr != IntPtr.Zero) Marshal.FreeHGlobal(intPtr);
    }
}

সংকলন মোড গণনা

[Flags]
public enum CompilationMode
{
    Invalid = 0,
    Native = 0x1,
    CLR = Native << 1,
    Bit32 = CLR << 1,
    Bit64 = Bit32 << 1
}

গিটহাবের ব্যাখ্যা সহ উত্স কোড


2

আমি একটি দুর্দান্ত হ্যান্ডেল সরঞ্জামটি ক্লোন করেছি যা উইন্ডোজ এক্সপ্লোরারগুলিতে সমস্ত উপলভ্য তথ্য দেখানোর জন্য সমাবেশগুলির জন্য একটি প্রসঙ্গ মেনু এন্ট্রি যুক্ত করে:

এখানে ডাউনলোড করুন: https://github.com/tebjan/AsorsesInformation/releases

এখানে চিত্র বর্ণনা লিখুন


1

NET সমাবেশের লক্ষ্য প্ল্যাটফর্ম চেক করার আরেকটি উপায় হ'ল NET রিফ্লেক্টর সহ সমাবেশটি পরিদর্শন করছে ...

@ # ~ # € ~! আমি ঠিক বুঝতে পেরেছি যে নতুন সংস্করণটি নিখরচায় নয়! সুতরাং, সংশোধন করুন, যদি আপনার কাছে। নেট প্রতিফলকটির একটি মুক্ত সংস্করণ থাকে তবে আপনি লক্ষ্য প্ল্যাটফর্মটি পরীক্ষা করতে এটি ব্যবহার করতে পারেন।


9
আইএলএসপিএস ব্যবহার করুন , এটি একটি প্রাথমিক ওপেন সোর্স অ্যাপ্লিকেশন যা প্রতিচ্ছবি হিসাবে অনেকগুলি একই কাজ করে
বাইনারি ওয়ারিয়ার

1

সিএফডুক গেটপেইকাইন্ড কল করার সম্ভাবনাটি নোট করে। পাওয়ারশেল থেকে এটি করা সম্ভাব্য আকর্ষণীয়।

এখানে উদাহরণস্বরূপ, একটি সেমিডলেট জন্য কোড যা ব্যবহার করা যেতে পারে: https://stackoverflow.com/a/16181743/64257

বিকল্পভাবে, https://stackoverflow.com/a/4719567/64257 এ লক্ষ্য করা যায় যে " পাওয়ারশেল সম্প্রদায় এক্সটেনশনে গেট-পিইইইডার সিএমডিলেট রয়েছে যা এক্সিকিউটেবল ইমেজগুলির জন্য পরীক্ষার জন্য ব্যবহার করা যেতে পারে" "


1

এর জন্য আরও উন্নত অ্যাপ্লিকেশনটি আপনি এখানে পেতে পারেন: কোডপ্লেক্স - এপি চ্যাঞ্জ

উদাহরণ:

C:\Downloads\ApiChange>ApiChange.exe -CorFlags c:\Windows\winhlp32.exe
File Name; Type; Size; Processor; IL Only; Signed
winhlp32.exe; Unmanaged; 296960; X86

C:\Downloads\ApiChange>ApiChange.exe -CorFlags c:\Windows\HelpPane.exe
File Name; Type; Size; Processor; IL Only; Signed
HelpPane.exe; Unmanaged; 733696; Amd64

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.