Имеется 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-битный, и ничего взамен пока не подобрал. Надеюсь, вообще, можно попроще как-нибудь.
Здравствуйте, fortnum, Вы писали:
F>Имеется C++/CLI DLL'ка. Цель — изменить managed-часть, и собрать ее заново.
Разобрался. В моем случае, скорее всего, внутри этой DLL'ки чисто unmanaged кода нет — она сама использует другую, чисто unmanaged DLL'ку. Дизассемблером не пробовал пока, но скорее всего этот RVA соответствует RVA в той внешней DLL — а то я смотрел в этой и по такому смещению точно не мог быть код — все байты одинаковые, это поставило меня в тупик
Весьма помог, кстати, такой инструмент:
http://totalcmd.net/plugring/peviewer.html