Вызвать unmanaged часть C++/CLI через P/Invoke или еще как
От: fortnum  
Дата: 12.07.16 13:03
Оценка:
Имеется C++/CLI DLL'ка. Цель — изменить managed-часть, и собрать ее заново.

Если я правильно понял, вытащить оттуда unmanaged часть для отдельной с ней работы никак нельзя. Или можно?

А можно ли обращаться к unmanaged функциям из своего внешнего процесса?

ILSpy дает такую штуку, например:

.method assembly static pinvokeimpl( lasterr cdecl) 
        int32 modopt([mscorlib]System.Runtime.CompilerServices.IsLong) modopt([mscorlib]System.Runtime.CompilerServices.CallConvCdecl) 
        SomeClass.SomeMethod(uint32 modopt([mscorlib]System.Runtime.CompilerServices.IsLong)* A_0) native unmanaged preservesig
{
  .custom instance void [mscorlib]System.Security.SuppressUnmanagedCodeSecurityAttribute::.ctor() = ( 01 00 00 00 ) 
  // Embedded native code
  // Disassembly of native methods is not supported.
  //  Managed TargetRVA = 0x0000BE0D
} // end of global method SomeClass.SomeMethod


Можно это, или еще где что там указано, как-то в чистом C# прописать для вызова, скажем, через DllImportAttribute в другой сборке, либо каким-нибудь другим хитрым способом?

PS. DLL'ка 64-битная, попытки посмотреть экспорт при помощи DLL Export Viewer или Dependency Walker что-то не увенчались успехом — ничего не экспортируется, либо что-то мешает посмотреть. Дизассемблером пользовался раньше, но ollydbg 32-битный, и ничего взамен пока не подобрал. Надеюсь, вообще, можно попроще как-нибудь.
Re: Вызвать unmanaged часть C++/CLI через P/Invoke или еще как
От: fortnum  
Дата: 12.07.16 15:19
Оценка:
Здравствуйте, fortnum, Вы писали:

F>Имеется C++/CLI DLL'ка. Цель — изменить managed-часть, и собрать ее заново.


Разобрался. В моем случае, скорее всего, внутри этой DLL'ки чисто unmanaged кода нет — она сама использует другую, чисто unmanaged DLL'ку. Дизассемблером не пробовал пока, но скорее всего этот RVA соответствует RVA в той внешней DLL — а то я смотрел в этой и по такому смещению точно не мог быть код — все байты одинаковые, это поставило меня в тупик Весьма помог, кстати, такой инструмент: http://totalcmd.net/plugring/peviewer.html
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.