c# सी#जाओ/पढ़ें DLL आयात प्रयुक्त




import get (2)

  1. अरे, मेरा सवाल सरल है लेकिन मुझे ऐसा करने का कोई तरीका नहीं मिल सकता है।

मैं क्या करने की कोशिश करता हूं: मैं सभी डीएलएल आयात और एक EXE या DLL से उपयोग किए जाने वाले कार्यों को प्राप्त करने की कोशिश करता हूं।

तो मान लीजिए कि मैं एक प्रोग्राम बनाऊँगा: SendMessage (DLL आयात) तब कोड पढ़ा जाएगा।

और जैसे वापसी:

DLL: user32.dll

फ़ंक्शन: भेजें संदेश

मैंने इन का उपयोग करने की कोशिश की है: विधानसभा लेकिन इसमें कोई किस्मत सही आंकड़ा नहीं मिल रही है।

(मैंने देखा: सी # में मूल डीएलएल आयात को प्रोग्रामैटिक रूप से कैसे पढ़ाया? लेकिन वहां वहां काम करने के लिए नहीं मिला, मुझे 1 आयात मिला, लेकिन कुछ और नहीं)


डमपिन प्रोग्राम डीएलएल पीई हेडर की जांच करता है और आपको यह जानकारी निर्धारित करने देता है।

मुझे किसी भी सी # आवरण के बारे में पता नहीं है लेकिन ये लेख आपको दिखाएंगे कि कैसे शीर्ष लेख की जांच करें और निर्यात को अपने आप बाहर निकाल दें

पार्श्व विचार के रूप में - dumpbin.exe /exports को एक शुद्ध सिस्टम के साथ क्यों नहीं लाएं। प्रक्रिया को कॉल करें और परिणाम पार्स करें?


शुद्ध प्रतिबिंब दृष्टिकोण

    static void Main(string[] args)
    {
        DumpExports(typeof (string).Assembly);
    }

    public static void DumpExports( Assembly assembly)
    {

        Dictionary<Type, List<MethodInfo>> exports = assembly.GetTypes()
            .SelectMany(type => type.GetMethods(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static)
                                    .Where(method => method.GetCustomAttributes(typeof (DllImportAttribute), false).Length > 0))
            .GroupBy(method => method.DeclaringType)
            .ToDictionary( item => item.Key, item => item.ToList())
            ;

        foreach( var item in exports )
        {
            Console.WriteLine(item.Key.FullName);

            foreach( var method in  item.Value )
            {
                DllImportAttribute attr = method.GetCustomAttributes(typeof (DllImportAttribute), false)[0] as DllImportAttribute;
                Console.WriteLine("\tDLL: {0}, Function: {1}", attr.Value, method.Name);
            }
        }
    }




get