Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 5.00
paskal
439 / 288 / 25
Регистрация: 15.08.2011
Сообщений: 850
#1

Доступ к переменной по абсолютному адресу. - C++

15.08.2011, 17:27. Просмотров 2338. Ответов 10
Метки нет (Все метки)

Мне нужно обратится к ячейке памяти с известным конкретным адресом (это может быть вектор прерывания, переменная БИОС итд). Как это сделать на Си? На Паскале это делается легко. Можно просто объявить переменную по абсолютному адресу через оператор absolute. Можно достать через указатель присвоив ему конкретное числовое значение через функцию ptr. А в Си я что то ничего такого не нашел.
Использую Turbo C под DOS.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.08.2011, 17:27     Доступ к переменной по абсолютному адресу.
Посмотрите здесь:
Доступ к памяти по адресу C++
Доступ к произвольному адресу памяти C++
Получить доступ к переменной класса при наличии такого же имени переменной в функции C++
C++ Парадокс: значение переменной равно её адресу
Поменять значение по указанному адресу в переменной типа std::string C++
Инкремент указателей и как обратиться к "промежуточному" адресу переменной C++
доступ к структурной переменной C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
LosAngeles
Заблокирован
15.08.2011, 17:36     Доступ к переменной по абсолютному адресу. #2
placement new. Только сомневаюсь, что в защищёном режиме windows ты к вектору прерываний или биосу сможешь достучатся

Добавлено через 3 минуты
а вот только что дочитал, что речь о дос, тогда всё ок

Добавлено через 46 секунд
realloc тогда юзай если чистый С*
-=ЮрА=-
Заблокирован
Автор FAQ
15.08.2011, 22:10     Доступ к переменной по абсолютному адресу. #3
Цитата Сообщение от LosAngeles Посмотреть сообщение
realloc тогда юзай если чистый С*
- функция озволяет изменить размер блока памяти, каким боком єто к заданию относится ума не приложу!
easybudda
Эксперт С++
9460 / 5473 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
16.08.2011, 00:33     Доступ к переменной по абсолютному адресу. #4
paskal, в принципе просто
C
1
2
int * ptr = 0xff34ec3f; // от балды набранный адрес
printf("%d\n", *ptr);
Просто из любопытства - зачем Вам это? В командной строке, запушенной из-под винды не получится - винда так просто не даст в памяти ковыряться, а комп с установленной DOS ещё поискать надо (я, например, в последний раз лет 15 назад видел)...
grizlik78
Эксперт С++
1908 / 1440 / 110
Регистрация: 29.05.2011
Сообщений: 2,995
16.08.2011, 00:40     Доступ к переменной по абсолютному адресу. #5
Цитата Сообщение от easybudda Посмотреть сообщение
В командной строке, запушенной из-под винды не получится - винда так просто не даст в памяти ковыряться
Из 16-битного кода (который на выходе турбо си под дос) вполне получится. Внутри виртуального пространства дос-машины, разумеется. Только вот зачем это надо — вопрос остаётся открытым
LosAngeles
Заблокирован
16.08.2011, 05:17     Доступ к переменной по абсолютному адресу. #6
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- функция озволяет изменить размер блока памяти, каким боком єто к заданию относится ума не приложу!
значит сильнее надо прикладывать! К заданию это относится на прямую
void * realloc ( void * ptr, size_t size );

Reallocate memory block
The size of the memory block pointed to by the ptr parameter is changed to the size bytes, expanding or reducing the amount of memory available in the block.
http://www.cplusplus.com/reference/c...tdlib/realloc/
Kastaneda
Форумчанин
Эксперт С++
4511 / 2853 / 227
Регистрация: 12.12.2009
Сообщений: 7,249
Записей в блоге: 1
Завершенные тесты: 1
16.08.2011, 10:32     Доступ к переменной по абсолютному адресу. #7
Цитата Сообщение от grizlik78 Посмотреть сообщение
Из 16-битного кода (который на выходе турбо си под дос) вполне получится. Внутри виртуального пространства дос-машины, разумеется. Только вот зачем это надо — вопрос остаётся открытым
Я на 16-ти битном ассемблере интересные вещи делал, например перехват прерывания клавиатуры или рисования с помощью BIOS (или вообще напрямую в видеопамять), конечно это все было любезно сэмулированно виндой), но когда только начинал программировать - было интересно
На XP при чем это вообще без проблем делается - компилируешь и запускаешь программу как обычную, а вот на семерке придется познакомится с бубном, чтобы это провернуть)
easybudda
Эксперт С++
9460 / 5473 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
16.08.2011, 10:54     Доступ к переменной по абсолютному адресу. #8
LosAngeles, спасибо, будем в курсе теперь. Только как с её помощью
Цитата Сообщение от paskal Посмотреть сообщение
обратится к ячейке памяти с известным конкретным адресом (это может быть вектор прерывания, переменная БИОС итд)
я что-то тоже не понял. Пример можно?
-=ЮрА=-
Заблокирован
Автор FAQ
16.08.2011, 12:25     Доступ к переменной по абсолютному адресу. #9
Цитата Сообщение от LosAngeles Посмотреть сообщение
значит сильнее надо прикладывать! К заданию это относится на прямую
void * realloc ( void * ptr, size_t size );
Reallocate memory block
The size of the memory block pointed to by the ptr parameter is changed to the size bytes, expanding or reducing the amount of memory available in the block.
-
Подразумевает совсем не это
Цитата Сообщение от paskal Посмотреть сообщение
Мне нужно обратится к ячейке памяти с известным конкретным адресом
(ты написал лишь бы что то с памятью работало, я с таким успехом напишу memcpy)
paskal
439 / 288 / 25
Регистрация: 15.08.2011
Сообщений: 850
16.08.2011, 19:46  [ТС]     Доступ к переменной по абсолютному адресу. #10
Цитата Сообщение от easybudda Посмотреть сообщение
Просто из любопытства - зачем Вам это? В командной строке, запушенной из-под винды не получится - винда так просто не даст в памяти ковыряться, а комп с установленной DOS ещё поискать надо (я, например, в последний раз лет 15 назад видел)...
На работе надо состыковать аппаратуру с компьютером по каналу "Манчестер"(этот канал в военной технике применяется). Нашли древнюю исашную плату с этим манчестером. Библиотеки под нее на турбо си. Нашли древний пень-3. Поставил... нет, не ДОС, а винду98, турбо-си 3.0. Фактически разовая работа, но без нее никуда не денешься.

Цитата Сообщение от easybudda Посмотреть сообщение
я что-то тоже не понял. Пример можно?
Пример установить свой обработчик прерывания, прочитать адрес КОМ порта (в переменных биос прописан), прочитать счетчик тиков таймера (тоже в биос)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.08.2011, 20:03     Доступ к переменной по абсолютному адресу.
Еще ссылки по теме:
Доступ к переменной родительского класса C++
C++ Доступ к переменной из разных файлов
C++ Реализовать доступ к закрытой переменной
Доступ к статической переменной-члену C++
C++ Доступ к переменной из другого модуля

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
ValeryS
Модератор
6550 / 5016 / 463
Регистрация: 14.02.2011
Сообщений: 16,728
16.08.2011, 20:03     Доступ к переменной по абсолютному адресу. #11
Цитата Сообщение от paskal Посмотреть сообщение
На работе надо состыковать аппаратуру с компьютером по каналу "Манчестер"(этот канал в военной технике применяется)
попробуй написать драйвер
пойдет и на современных (вот только ису куда запихать)
если известен протокол обмена то можно создать usb контроллер

Добавлено через 11 минут
у меня есть проект писал в конце 90 для винды 95-98 и иса платы
писано под винАпи сам уже забыл что писал но железяка работала прямое обращения к памяти и запись в порты могу скинуть
Yandex
Объявления
16.08.2011, 20:03     Доступ к переменной по абсолютному адресу.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru