У меня есть приложение .net, которое выполняет COM-взаимодействие и вызывает некоторые нативные библиотечные API.Один из этих API-интерфейсов возвращает некоторые данные, которые являются неожиданными и вызывают головную боль для меня.Я ищу способ принудительного возврата возвращаемого значения управляемого API.Это не решит мою проблему, но поможет мне сузить некоторые вещи.Я упрощаю вещи чуть ниже.
Имея все это в виду, скажем, имя моего управляемого класса MyClass и у него есть два метода ParentMethod () и ChildMethod ().ParentMethod вызывает ChildMethod, который внутренне вызывает те нативные API.ChildMethod сам по себе возвращает bool.
После взлома моего приложения через Windbg я сначала выполнил команду! Dumpheap -type MyClass, которая выдала мне следующий вывод
0: 027>! Dumpheap -type MyClass
Address MTРазмер
0ac7e7e4 04ac5030 100
всего 0 объектов
Статистика:
MT Количество TotalSize Имя класса
04ac5030 1 100 MyNamespace.MyClass
Всего 1 объектов
Затем я выполнил следующую команду, пытаясь получить адрес методов этого класса.
0: 027>! Dumpmt -md 04ac5030
EEClass: 04ac1b20
Модуль: 04ac49c8
Имя: MyNamespace.MyClass
mdToken: 02000002
Файл: MyAssemblyName, версия = 1.0.0.0, культура = нейтральный, PublicKeyToken = null
BaseSize: 0x64
ComponentSize: 0x0
Слоты в VTable:61
Количество IFaces в IFaceMap: 4
Таблица MethodDesc
Имя метода JIT MethodDesc
04b20270 04ac4fd0 JIT MyNamespace.MyClass..ctor ()
04b20230 04ac4ffc JIT MyNamespace.ctor MyClass (MyClass)
04acc081 04ac4fd8 НЕТ MyNamespace.MyClass.ParentMethod ()
04acc085 04ac4fe4 НЕТ MyNamespace.MyClass.ChildMethod ()
04b202c0 04ac4ff0 JIT MyNamespace.MyClass *InitializeCom 10 * 1039 1038 (найдено)Запись в блоге Навина , где он описывает какую-то технику выполнения чего-то в том же духе, но я не мог понять, какой именно шаг мне следует предпринять.Любая помощь будет высоко оценена.