Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Указатель на 0x40 и т.д.


Автор: N 29.12.2002, 23:20
Пишу такую чушь
unsigned long *b = (unsigned long *)(0x40 << 4);
       cout << b << endl;// 00000400
       cout << (long *)b << endl;// снова 00000400 :(
       cout << *b << endl; // error
Научите пожалуйста, а?         :lookaround

Автор: AntonSaburov 29.12.2002, 23:32
Здесь все верно.
Первый вывод - ты выводишь значение указателя. По сути адрес. 4 байта, целое. Нормальное число.
Второй вывод - ты выводишь опять же 4 байта, целое. Такое приведение типа ничем не отличается от первого вывода.
Третий вывод - вот здесь ты пытаешься вывести значение которое находится по адресу, который находится в 00000400. Что там находится -непонятно. Ну и ошибка само собой.

Автор: N 29.12.2002, 23:52
А как же увидеть, что по этому адресу?

Автор: AntonSaburov 29.12.2002, 23:58
Ой, что-то я не совсем то написал про недоступность :(
Вот этот адрес - 00000400 - он как раз и не доступен. Если ты работаешь в Винде, то доступные адреса начинаются с 0x00010000 (под Windows 98 - 0x00001000). Все, что меньше - недоступно.
Как только ты пытаешься обратится к адресу 00000400 - получаешь ошибку.

Автор: N 30.12.2002, 00:11
А что-же делать-то людоньки?!

Автор: AntonSaburov 30.12.2002, 00:20
В данной ситуации ничего сделать нельзя - это ограничения самой ОС. Защита памяти от неправильных обращений. Не лазь :).

Автор: N 30.12.2002, 01:39
Не поверишь, позавчера я этот фортель сотворил, но совершенно не помню как :(((

Автор: Vaulter 30.12.2002, 12:47
Цитата(Guest @ 29.12.2002, 17:39)
Не поверишь, позавчера я этот фортель сотворил, но совершенно не помню как :(((

а зачем тебе это???

Автор: Alex101 30.12.2002, 21:23
Под виндами этого сделать совсем нельзя...
А в коде у тебя ошибки нет.

Автор: Alex101 30.12.2002, 22:17
Что там находится? (По адресу 0x400). Инфу можно получить и по-другому.

Автор: Fantasist 31.12.2002, 06:23
Цитата
Под виндами этого сделать совсем нельзя...


Почему? В Ring0 возможно все. :)

Автор: Dagger 31.12.2002, 07:32
А как туда добраться?;-)

Автор: N 1.1.2003, 01:47
Дрова ж как-то пишут

Автор: Fantasist 1.1.2003, 03:27
Цитата
А как туда добраться?

Цитата
Дрова ж как-то пишут


Вот именно так и добраться. :) А вот как писать драйвера - это не ко мне.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)