Перечислите не-.NET DLL функции из C # - PullRequest
0 голосов
/ 05 июня 2018

У меня есть C ++ DLL, которую я импортирую в проект C #, используя DllImport ed LoadLibrary.

class Program
{
    [DllImport("kernel32.dll", SetLastError = true)]
    public static extern IntPtr LoadLibrary(string dllToLoad);

    static void Main(string[] args)
    {
        IntPtr library = LoadLibrary(@"MyDll.dll");
        if (library == IntPtr.Zero)
        {
            var err = Marshal.GetLastWin32Error();
            throw new Exception($"Library load error, code {err}");
        }
    }
}

Теперь я хочу перечислить функции, экспортированные из этой DLL.Я видел этот вопрос , но он относится к C ++, и я не уверен, как я мог бы сделать то же самое в C #.

Анализ выходных данных dumpbin /exports, вероятно, будет работать, но я хотел бы знать, есть ли сначала более конкретный способ сделать это.

Как получить список всех функций в C ++ DLL из C #?

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Здесь есть отличная статья о том, как прочитать PE-заголовки из файла: https://blogs.msdn.microsoft.com/kstanton/2004/03/31/exploring-pe-file-headers-using-managed-code/

Вы можете изучить раздел .edata, чтобы найти экспорт: https://msdn.microsoft.com/en-us/library/windows/desktop/ms680547(v=vs.85).aspx#the_.edata_section__image_only_

0 голосов
/ 05 июня 2018

После того, как комментарий Реми Лебо указал мне правильное направление, я посмотрел на PE-парсеры и нашел PeNet .Он действительно хорошо справляется со своей задачей и предоставляет много информации, помимо экспортируемых функций.

Это на NuGet, так что вы можете просто установить его, добавить using PeNet в начало файла и затем использовать кодкак это:

var pe = new PeFile(@"MyDll.dll");
var functions = pe.ExportedFunctions.Select(x => x.Name).ToList();
...