Сейчас на форуме: tyns777 (+4 невидимых) |
eXeL@B —› Программирование —› Поиск объекта по указателю дескриптору |
Посл.ответ | Сообщение |
|
Создано: 21 октября 2010 15:39 · Поправил: Anvost · Личное сообщение · #1 Функция С++ создает сериализованный массив, насколько я понял - это объект типа Carchive. Этот массив имеет древовидную форму. Т.е. имеются деревья, ветви. И возвращает указатель на этот объект. Функция вызывается из сторонней библиотеки на С++ Следующая функция должна посчитать количество деревьев в данном массиве. Иногда она отрабатывает без ошибок, в другой раз с ошибками и завершает программу, так что никак не получается отладить или игнорировать ошибку. Я хочу проверять созданный массив перед его использованием. Чтобы избежать падения программы. Доступа я разумеется не имею к исходной функции в библиотеке. Пытаюсь найти этот объект в памяти. У меня имеется указатель. Насколько я знаю, надо отнять - 18h и тогда можно получить адрес заголовка этого объекта и потом уже в заголовке посмотреть какие флаги в какие значения установлены и возможно это что-то даст для того чтобы сделать вывод правильно ли создан объект/массив или нет. Программирую на Visual Basic. Использую простую процедуру rez - адрес указателя Dim rez0 As Long For i = 24 To 1 Step -4 GetMem4 rez - i, VarPtr(rez0) Next В rez0 получаю всегда разные значения, так что по-видимому это вовсе не заголовок а непонятно что и объект располагается не по данному адресу, а вообще непонятно где. Подскажите в правильном ли направлении я копаю и как мне проверить валидность этого объекта в памяти? |
|
Создано: 21 октября 2010 15:50 · Личное сообщение · #2 И еще в книге Недокумментированная Windows пишется, что только драйверы ядра могут получить указатель на тело объекта, а пользовательские приложения получают только дескрипторы, а найти объект по дескриптору дело сложное. Вот не знаю имеет ли это отношение к моей проблеме. В Visual Basic и указатели и дескрипторы значатся под одним именем - указатели, а по сути являются дескрипторами? |
|
Создано: 21 октября 2010 15:58 · Поправил: Clerk · Личное сообщение · #3 |
|
Создано: 21 октября 2010 16:22 · Личное сообщение · #4 Но вот на массив созданный средствами самого Visual Basic я легко получаю указатель, а потом по этому указателю получаю заголовок. Это тоже вроде несистемный объект. Под псевдообъектом понимается динамический объект? Вот наверное любой массив - это что-то типа того. А когда фукнция из библиотеки вернула что-то непонятно что, но тем не менее другая функция из той же библиотеки берет этот дескриптор/указатель и как-то получает доступ к объекту. Вот хотелось бы знать как она это делает. Может через посредничество какой-то Api функции? |
|
Создано: 22 октября 2010 09:44 · Личное сообщение · #5 Anvost пишет: Вот хотелось бы знать как она это делает. Ну так дизассемблер с отладчиком в помощь. Может через посредничество какой-то Api функции? Этот объект, с которым вы работаете - системе неизвестен. В "недокументированных возможностях" Шрайбер говорит про объекты, принадлежащие диспетчеру объектов Windows. Т.е. про объекты ядра. А так - программист может определить какие угодно объекты - Винда с ними не обязана работать, и предоставлять интерфейс API тоже не должна. ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 23 октября 2010 10:56 · Личное сообщение · #6 |
eXeL@B —› Программирование —› Поиск объекта по указателю дескриптору |
Эта тема закрыта. Ответы больше не принимаются. |