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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 5.00
paskal
418 / 267 / 22
Регистрация: 15.08.2011
Сообщений: 771
15.08.2011, 17:27     Доступ к переменной по абсолютному адресу. #1
Мне нужно обратится к ячейке памяти с известным конкретным адресом (это может быть вектор прерывания, переменная БИОС итд). Как это сделать на Си? На Паскале это делается легко. Можно просто объявить переменную по абсолютному адресу через оператор absolute. Можно достать через указатель присвоив ему конкретное числовое значение через функцию ptr. А в Си я что то ничего такого не нашел.
Использую Turbo C под DOS.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.08.2011, 17:27     Доступ к переменной по абсолютному адресу.
Посмотрите здесь:

Получить доступ к переменной класса при наличии такого же имени переменной в функции C++
Доступ к памяти по адресу C++
Инкремент указателей и как обратиться к "промежуточному" адресу переменной C++
C++ Необработанное исключение по адресу 0x00ED4891 в strings.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xCCCCCCCC
C++ Необработанное исключение по адресу 0x00105FD7 в Динамические структуры: 0xC0000005: нарушение прав доступа при чтении по адресу 0xCDCDCE09
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
LosAngeles
Заблокирован
15.08.2011, 17:36     Доступ к переменной по абсолютному адресу. #2
placement new. Только сомневаюсь, что в защищёном режиме windows ты к вектору прерываний или биосу сможешь достучатся

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

Добавлено через 46 секунд
realloc тогда юзай если чистый С*
-=ЮрА=-
Заблокирован
Автор FAQ
15.08.2011, 22:10     Доступ к переменной по абсолютному адресу. #3
Цитата Сообщение от LosAngeles Посмотреть сообщение
realloc тогда юзай если чистый С*
- функция озволяет изменить размер блока памяти, каким боком єто к заданию относится ума не приложу!
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
16.08.2011, 00:33     Доступ к переменной по абсолютному адресу. #4
paskal, в принципе просто
C
1
2
int * ptr = 0xff34ec3f; // от балды набранный адрес
printf("%d\n", *ptr);
Просто из любопытства - зачем Вам это? В командной строке, запушенной из-под винды не получится - винда так просто не даст в памяти ковыряться, а комп с установленной DOS ещё поискать надо (я, например, в последний раз лет 15 назад видел)...
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
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
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
16.08.2011, 10:32     Доступ к переменной по абсолютному адресу. #7
Цитата Сообщение от grizlik78 Посмотреть сообщение
Из 16-битного кода (который на выходе турбо си под дос) вполне получится. Внутри виртуального пространства дос-машины, разумеется. Только вот зачем это надо — вопрос остаётся открытым
Я на 16-ти битном ассемблере интересные вещи делал, например перехват прерывания клавиатуры или рисования с помощью BIOS (или вообще напрямую в видеопамять), конечно это все было любезно сэмулированно виндой), но когда только начинал программировать - было интересно
На XP при чем это вообще без проблем делается - компилируешь и запускаешь программу как обычную, а вот на семерке придется познакомится с бубном, чтобы это провернуть)
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
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
418 / 267 / 22
Регистрация: 15.08.2011
Сообщений: 771
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++

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

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

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

Текущее время: 17:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru