Почему я не могу вызвать код C ++ / CLI из Dllmain (C) - PullRequest
0 голосов
/ 18 февраля 2019

Мне нужно подключить определенную функцию .NET в целевом процессе.Итак, у меня есть C # Dll, готовая для инъекции, но мне нужен способ сделать хук, как только dll загружена.

ПРОБЛЕМА: в C # нет таких вещей, как dllmain.

РЕШЕНИЕ: Вот что я попробовал> C # эквивалент DllMain в C (WinAPI)

У меня нет 50 репутаций, поэтому я не могу комментировать ответ @mheyman.Но я сделал все, что он предложил, скомпилировал каждую вещь в один Dll, который я затем ввел в свой целевой процесс.Но он блокируется на уровне:

 LaunchDll(dll, len, "MyNamespace.MyClass", "DllMain"); in dllmain.cpp

Я не могу идти дальше, я получаю ошибку

Это приложение запросило среду выполнения, чтобы завершить его необычным способом,Пожалуйста, обратитесь в службу поддержки приложения для получения дополнительной информации

Функция LaunchDll никогда не выполняется, и если я изменяю ее так, чтобы она немедленно возвращалась, я все равно получаю такое же поведение, которое заставляет меня думать, что проблемапри звонке в LaunchDll.

Вот вывод, который я получаю из отладчика Just in time Visual Studio:

...

'target.exe' (Win32): загружен'C: \ Windows \ System32 \ Api-мс-Win-Core-processthreads-l1-1-1.dll'.Символы загружены.'target.exe' (Win32): загружен 'C: \ Windows \ System32 \ api-ms-win-core-file-l1-2-0.dll'.Символы загружены.'target.exe' (Win32): загружен 'C: \ Windows \ System32 \ api-ms-win-core-timezone-l1-1-0.dll'.Символы загружены.'target.exe' (Win32): загружен 'C: \ Windows \ System32 \ api-ms-win-core-file-l2-1-0.dll'.Символы загружены.'target.exe' (Win32): загружен 'C: \ Windows \ System32 \ api-ms-win-core-synch-l1-2-0.dll'.Символы загружены.Нить 0xc27c вышла с кодом 3 (0x3).Нить 0x828c вышла с кодом 3 (0x3).Нить 0xb47c вышла с кодом 3 (0x3).Нить 0xbce0 вышла с кодом 3 (0x3).Нить 0xb974 вышла с кодом 3 (0x3).Нить 0x68d4 вышла с кодом 3 (0x3).Нить 0xc4e8 вышла с кодом 3 (0x3).Нить 0xc748 вышла с кодом 3 (0x3).Нить 0xc198 вышла с кодом 3 (0x3).Нить 0xa708 вышла с кодом 3 (0x3).Нить 0x8870 вышла с кодом 3 (0x3).Нить 0xc02c вышла с кодом 3 (0x3).Поток 0xc3fc вышел с кодом 3 (0x3).Нить 0x995c вышла с кодом 3 (0x3).Нить 0xb790 вышла с кодом 3 (0x3).Поток 0xb9b8 завершился с кодом 3 (0x3).Программа '[47324] target.exe' вышла с кодом 3 (0x3).

Вот код .NET Dll:

namespace MyNameSpace {
public class MyClass {
    public static void DllMain() {
        string text1 = "random Text from .NET Dll \n ";
        System.IO.File.WriteAllText(@"D:\\TestFromCSharp.txt", text1);
   }
}

}

...