Сейчас на форуме: tyns777 (+4 невидимых)

 eXeL@B —› Программирование —› Поиск объекта по указателю дескриптору
Посл.ответ Сообщение

Ранг: 23.7 (новичок)
Активность: 0.010
Статус: Участник

Создано: 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 получаю всегда разные значения, так что по-видимому это вовсе не заголовок а непонятно что и объект располагается не по данному адресу, а вообще непонятно где.

Подскажите в правильном ли направлении я копаю и как мне проверить валидность этого объекта в памяти?



Ранг: 23.7 (новичок)
Активность: 0.010
Статус: Участник

Создано: 21 октября 2010 15:50
· Личное сообщение · #2

И еще в книге Недокумментированная Windows пишется, что только драйверы ядра могут получить указатель на тело объекта, а пользовательские приложения получают только дескрипторы, а найти объект по дескриптору дело сложное. Вот не знаю имеет ли это отношение к моей проблеме. В Visual Basic и указатели и дескрипторы значатся под одним именем - указатели, а по сути являются дескрипторами?



Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 21 октября 2010 15:58 · Поправил: Clerk
· Личное сообщение · #3

Anvost
> объект типа Carchive
Это внесистемные псевдообьекты и псевдоссылки. Они локальны для VB(для скрипта), поэтому что это такое хз.



Ранг: 23.7 (новичок)
Активность: 0.010
Статус: Участник

Создано: 21 октября 2010 16:22
· Личное сообщение · #4

Но вот на массив созданный средствами самого Visual Basic я легко получаю указатель, а потом по этому указателю получаю заголовок. Это тоже вроде несистемный объект. Под псевдообъектом понимается динамический объект? Вот наверное любой массив - это что-то типа того.

А когда фукнция из библиотеки вернула что-то непонятно что, но тем не менее другая функция из той же библиотеки берет этот дескриптор/указатель и как-то получает доступ к объекту. Вот хотелось бы знать как она это делает. Может через посредничество какой-то Api функции?




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 22 октября 2010 09:44
· Личное сообщение · #5

Anvost пишет:
Вот хотелось бы знать как она это делает.

Ну так дизассемблер с отладчиком в помощь.

Может через посредничество какой-то Api функции?

Этот объект, с которым вы работаете - системе неизвестен. В "недокументированных возможностях" Шрайбер говорит про объекты, принадлежащие диспетчеру объектов Windows. Т.е. про объекты ядра. А так - программист может определить какие угодно объекты - Винда с ними не обязана работать, и предоставлять интерфейс API тоже не должна.

-----
Stuck to the plan, always think that we would stand up, never ran.




Ранг: 23.7 (новичок)
Активность: 0.010
Статус: Участник

Создано: 23 октября 2010 10:56
· Личное сообщение · #6

Вопрос решил, спасибо за разъяснения.


 eXeL@B —› Программирование —› Поиск объекта по указателю дескриптору
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати