Декомпиляция метода, реализованного с ключевым словом extern - PullRequest
5 голосов
/ 20 января 2011

Когда я декомпилировал файл dll с помощью Reflector, я увидел, что нужный мне метод реализован, как показано ниже. Что это значит? Возможно ли увидеть исходный код за этим?

[return: MarshalAs(UnmanagedType.BStr)]
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime), DispId(0x3a)]
public virtual extern string GetCOLDText([In] int PageNumber, [In] int Row, [In] int Column, [In, Optional, DefaultParameterValue(0x7fffffff)] int Length);

Привет.

Ответы [ 3 ]

4 голосов
/ 20 января 2011

Это то, что вы видите, когда используете Reflector для просмотра библиотеки взаимодействия COM, созданной tlbimp.exe.Или добавив ссылку в среде IDE на COM-сервер с вкладки COM или вкладки «Обзор», тоже самое.

Если вы посмотрите на внешний класс или интерфейс, содержащий этот метод, то вы увидите кокласс COMили интерфейс, который содержит этот метод.Важными атрибутами для него являются [ComImport], указывающий, что он реализован в другой DLL, и [Guid], все важные интерфейсы IID или сокласс CLSID.Классы и интерфейсы COM однозначно идентифицируются по guid, а не по имени.Идентификатор CLSID присутствует в реестре, ключ HKCR\CLSID\{guid}.

COM-серверы, подобные этому, почти всегда реализованы на неуправляемом языке, C ++ наиболее типичен, но также Delphi или VB6.Декомпиляция кода C ++ после его компиляции - бесполезное занятие, но вы можете получить что-то из Dumpbin.exe с помощью параметра / disasm.Требуются навыки программирования на ассемблере и много свободного времени.Это почти всегда прямо запрещено в лицензионном соглашении.

1 голос
/ 20 января 2011

Похоже, что это вызов неуправляемой (вероятно, COM) DLL.Так что рефлектор не сможет декомпилировать / разобрать его;но если вы сможете прочитать ассемблер x86, вы сможете куда-нибудь добраться.

1 голос
/ 20 января 2011

Ват это означает, что это метод в неуправляемой (взаимодействия) DLL.Скорее всего, написано на C ++ и / или C

. Вы можете попытаться декомпилировать это (используя другие инструменты, а не Reflector), но это будет непросто, и результат будет не очень хорошим.

...