Есть ли способ узнать, является ли число указателем?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Есть ли способ узнать, является ли число указателем?

Сообщение arthur2 » 28.12.2008 (Вс) 23:45

Иногда в lParam приходит что-то не то и CopyMemory давится, дохнет и валит вслед за собой всё и вся. Есть ли способ проверить, а действительно ли в lParam указатель, или что попало?
Артур
 
   

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Есть ли способ узнать, является ли число указателем?

Сообщение Хакер » 28.12.2008 (Вс) 23:53

Любое число в принципе является указателем.

Но так как память у нас страничная, а страницы могут иметь разные атрибуты доступа, есть волшебные IsBadReadPtr, IsBadWritePtr, IsBadCodePtr.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Есть ли способ узнать, является ли число указателем?

Сообщение arthur2 » 29.12.2008 (Пн) 0:07

Спасибо! Ништяк - уже заработало :lol:
Артур
 
   

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Re: Есть ли способ узнать, является ли число указателем?

Сообщение ANDLL » 29.12.2008 (Пн) 10:36

Только вот если речь идет о глобальных хука, так лучше не делать - а то иногда чужие программы начнут сыпаться из-за твоей длл-ки.
Ибо число могло быть указателем на момент вызова isbadreadptr и перестать им быть на момент вызова copymemory.
Так что либо __try/__except (он ловит по словам BV), либо(что лучше, особенно если читать не много) ReadProcessMemory
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Есть ли способ узнать, является ли число указателем?

Сообщение arthur2 » 29.12.2008 (Пн) 10:54

ANDLL Блин... А как я узнаю, от какого процесса сообщение? У меня обработка сообщений на стороне установившего хук :( Если хук глобальный, то процесс может оказаться любым

А __try/__except - это что?
Артур
 
   

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Re: Есть ли способ узнать, является ли число указателем?

Сообщение ANDLL » 29.12.2008 (Пн) 11:00

arthur2 писал(а):А как я узнаю, от какого процесса сообщение?
GetCurrentProcess и не забыть потом CloseHandle.
arthur2 писал(а):А __try/__except - это что?
На это забей, это предполагает написание промежуточной заглушки на Cpp
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Есть ли способ узнать, является ли число указателем?

Сообщение arthur2 » 29.12.2008 (Пн) 11:09

GetCurrentProcess и не забыть потом CloseHandle.

Вот блин... это же я на стороне хукнутого узнаю, а на стороне хукающего... Придётся ещё и xендл процесса хукающему передавать :(

А если я данные буду посылать по WM_COPYDATA, их тоже нужно будет проверять на доступность?
Артур
 
   

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Re: Есть ли способ узнать, является ли число указателем?

Сообщение ANDLL » 29.12.2008 (Пн) 11:19

arthur2 писал(а):Вот блин... это же я на стороне хукнутого узнаю, а на стороне хукающего... Придётся ещё и xендл процесса хукающему передавать :(
Не придется ничего передавать. Не важно кто посылал сообщение. Просто замени IsBadPtr + CopyMemory на ReadProcessMemory с GetCurrentProcess, а остальную логику оставь как есть
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Re: Есть ли способ узнать, является ли число указателем?

Сообщение tyomitch » 29.12.2008 (Пн) 11:20

ANDLL писал(а):
arthur2 писал(а):А как я узнаю, от какого процесса сообщение?
GetCurrentProcess и не забыть потом CloseHandle.

Издеваешься? Там же стоит { return -1; } и всё.
Изображение

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Re: Есть ли способ узнать, является ли число указателем?

Сообщение ANDLL » 29.12.2008 (Пн) 11:25

tyomitch писал(а):
ANDLL писал(а):
arthur2 писал(а):А как я узнаю, от какого процесса сообщение?
GetCurrentProcess и не забыть потом CloseHandle.

Издеваешься? Там же стоит { return -1; } и всё.
Ну значит еще лучше...
Но раз уж ты здесь, может есть какой нибудь более приличный способ для надежного чтения блока памяти, в валидности которого есть основания усомнится?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Есть ли способ узнать, является ли число указателем?

Сообщение arthur2 » 29.12.2008 (Пн) 11:31

ANDLL
Не придется ничего передавать. Не важно кто посылал сообщение. Просто замени IsBadPtr + CopyMemory на ReadProcessMemory с GetCurrentProcess, а остальную логику оставь как есть

А, понял! это значит "могу ли именно я (именно мой процесс) читать эти данные" Спасибо!

ANDLL писал(а):
tyomitch писал(а):
ANDLL писал(а):GetCurrentProcess и не забыть потом CloseHandle.

Издеваешься? Там же стоит { return -1; } и всё.
Ну значит еще лучше...

Ребята, а для меня это что значит? Не надо CloseHandle, что ли?
Артур
 
   

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Re: Есть ли способ узнать, является ли число указателем?

Сообщение ANDLL » 29.12.2008 (Пн) 11:39

Ага, не надо
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Re: Есть ли способ узнать, является ли число указателем?

Сообщение tyomitch » 29.12.2008 (Пн) 14:07

ANDLL писал(а):Но раз уж ты здесь, может есть какой нибудь более приличный способ для надежного чтения блока памяти, в валидности которого есть основания усомнится?

Да вроде и так всё в порядке.

arthur2 писал(а):Ребята, а для меня это что значит? Не надо CloseHandle, что ли?

Можно и GetCurrentProcess не вызывать, а просто написать -1.
Изображение

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Re: Есть ли способ узнать, является ли число указателем?

Сообщение ANDLL » 29.12.2008 (Пн) 15:09

Можно и GetCurrentProcess не вызывать, а просто написать -1.
Ну это уже вопрос стиля(причем плохого стиля, разве нет?)
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Re: Есть ли способ узнать, является ли число указателем?

Сообщение tyomitch » 29.12.2008 (Пн) 15:51

ANDLL писал(а):
Можно и GetCurrentProcess не вызывать, а просто написать -1.
Ну это уже вопрос стиля(причем плохого стиля, разве нет?)

Угу. Но я же не знаю обстоятельств.
Если бы я писал на коленке одноразовую прогу, поставил бы -1.
Пусть автор знает про обе возможности.
Изображение

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Есть ли способ узнать, является ли число указателем?

Сообщение arthur2 » 29.12.2008 (Пн) 17:32

Огромное спасибо - всё работает :)

А насчёт стиля... Ну, я напишу -1, а рядом закомментированно : 'GetCurrentProcess всегда =-1

Всё равно никакого стиля у меня нет, горбатого могила исправит :)
Артур
 
   

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Есть ли способ узнать, является ли число указателем?

Сообщение Хакер » 29.12.2008 (Пн) 18:03

Объяви константу GetCurrentProcess со значением -1 :? Если VB. А если С++ — инлайн функцию, возвращающую -1.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Есть ли способ узнать, является ли число указателем?

Сообщение arthur2 » 29.12.2008 (Пн) 18:13

Хакер Ух ты, ништяк! Так и зделаю :)
Артур
 
   

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Re: Есть ли способ узнать, является ли число указателем?

Сообщение BV » 04.01.2009 (Вс) 3:47

А если С++ — инлайн функцию, возвращающую -1.

А в чем глубокий смысл? Тебе так полюбились inline-функции?
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Есть ли способ узнать, является ли число указателем?

Сообщение Хакер » 04.01.2009 (Вс) 4:26

Смысл в сохранении красоты и читаемости кода не в ущерб производительности.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 41

    TopList