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

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

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

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

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

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

Доступ к памяти по адресу - C++
Есть структура, элементы которой адрес на начало массива в памяти и его размер. Адреса хранятся в 16-ричном формате. Мне нужно распечатать...

Доступ к произвольному адресу памяти - C++
Есть известный адрес в памяти с известным значением int Хотел бы проверить это значение после того как введу адрес памяти вручную. ...

Получить доступ к переменной класса при наличии такого же имени переменной в функции - C++
Например, есть приватная переменная clientName в классе. Также есть точно такая же переменная в конструкторе этого класса. И мне нужно...

Парадокс: значение переменной равно её адресу - C++
Друзья! Вот код, в нём всё понятно. Выводятся одинаковые значения. Но ведь этого не может быть! Хотя бы потому не может, что по адресу,...

как присвоить переменной значение, взятое по определенному адресу? - C++
Собственно у меня есть адрес (например, 010426D8), я знаю, что под этим адресом хранится целочисленное значение, как присвоить переменной...

Поменять значение по указанному адресу в переменной типа std::string - C++
Здравствуйте форумчане. Не получается никак правильно использовать средства С++. Задача такова: Например есть две строки типа...

10
LosAngeles
Заблокирован
15.08.2011, 17:36 #2
placement new. Только сомневаюсь, что в защищёном режиме windows ты к вектору прерываний или биосу сможешь достучатся

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

Добавлено через 46 секунд
realloc тогда юзай если чистый С*
1
-=ЮрА=-
Заблокирован
Автор FAQ
15.08.2011, 22:10 #3
Цитата Сообщение от LosAngeles Посмотреть сообщение
realloc тогда юзай если чистый С*
- функция озволяет изменить размер блока памяти, каким боком єто к заданию относится ума не приложу!
0
easybudda
Модератор
Эксперт CЭксперт С++
9681 / 5631 / 954
Регистрация: 25.07.2009
Сообщений: 10,808
16.08.2011, 00:33 #4
paskal, в принципе просто
C
1
2
int * ptr = 0xff34ec3f; // от балды набранный адрес
printf("%d\n", *ptr);
Просто из любопытства - зачем Вам это? В командной строке, запушенной из-под винды не получится - винда так просто не даст в памяти ковыряться, а комп с установленной DOS ещё поискать надо (я, например, в последний раз лет 15 назад видел)...
0
grizlik78
Эксперт С++
1964 / 1457 / 119
Регистрация: 29.05.2011
Сообщений: 3,016
16.08.2011, 00:40 #5
Цитата Сообщение от easybudda Посмотреть сообщение
В командной строке, запушенной из-под винды не получится - винда так просто не даст в памяти ковыряться
Из 16-битного кода (который на выходе турбо си под дос) вполне получится. Внутри виртуального пространства дос-машины, разумеется. Только вот зачем это надо — вопрос остаётся открытым
0
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/clibrary/cstdlib/realloc/
0
Kastaneda
Нарушитель
Эксперт С++
4671 / 2875 / 233
Регистрация: 12.12.2009
Сообщений: 7,308
Записей в блоге: 2
Завершенные тесты: 1
16.08.2011, 10:32 #7
Цитата Сообщение от grizlik78 Посмотреть сообщение
Из 16-битного кода (который на выходе турбо си под дос) вполне получится. Внутри виртуального пространства дос-машины, разумеется. Только вот зачем это надо — вопрос остаётся открытым
Я на 16-ти битном ассемблере интересные вещи делал, например перехват прерывания клавиатуры или рисования с помощью BIOS (или вообще напрямую в видеопамять), конечно это все было любезно сэмулированно виндой), но когда только начинал программировать - было интересно
На XP при чем это вообще без проблем делается - компилируешь и запускаешь программу как обычную, а вот на семерке придется познакомится с бубном, чтобы это провернуть)
0
easybudda
Модератор
Эксперт CЭксперт С++
9681 / 5631 / 954
Регистрация: 25.07.2009
Сообщений: 10,808
16.08.2011, 10:54 #8
LosAngeles, спасибо, будем в курсе теперь. Только как с её помощью
Цитата Сообщение от paskal Посмотреть сообщение
обратится к ячейке памяти с известным конкретным адресом (это может быть вектор прерывания, переменная БИОС итд)
я что-то тоже не понял. Пример можно?
0
-=ЮрА=-
Заблокирован
Автор 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)
0
paskal
444 / 293 / 26
Регистрация: 15.08.2011
Сообщений: 876
16.08.2011, 19:46  [ТС] #10
Цитата Сообщение от easybudda Посмотреть сообщение
Просто из любопытства - зачем Вам это? В командной строке, запушенной из-под винды не получится - винда так просто не даст в памяти ковыряться, а комп с установленной DOS ещё поискать надо (я, например, в последний раз лет 15 назад видел)...
На работе надо состыковать аппаратуру с компьютером по каналу "Манчестер"(этот канал в военной технике применяется). Нашли древнюю исашную плату с этим манчестером. Библиотеки под нее на турбо си. Нашли древний пень-3. Поставил... нет, не ДОС, а винду98, турбо-си 3.0. Фактически разовая работа, но без нее никуда не денешься.

Цитата Сообщение от easybudda Посмотреть сообщение
я что-то тоже не понял. Пример можно?
Пример установить свой обработчик прерывания, прочитать адрес КОМ порта (в переменных биос прописан), прочитать счетчик тиков таймера (тоже в биос)
0
ValeryS
Модератор
6676 / 5085 / 475
Регистрация: 14.02.2011
Сообщений: 17,061
16.08.2011, 20:03 #11
Цитата Сообщение от paskal Посмотреть сообщение
На работе надо состыковать аппаратуру с компьютером по каналу "Манчестер"(этот канал в военной технике применяется)
попробуй написать драйвер
пойдет и на современных (вот только ису куда запихать)
если известен протокол обмена то можно создать usb контроллер

Добавлено через 11 минут
у меня есть проект писал в конце 90 для винды 95-98 и иса платы
писано под винАпи сам уже забыл что писал но железяка работала прямое обращения к памяти и запись в порты могу скинуть
0
16.08.2011, 20:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.08.2011, 20:03
Привет! Вот еще темы с ответами:

Инкремент указателей и как обратиться к "промежуточному" адресу переменной - C++
Доброго времени суток! Пусть указатель указывает на адрес переменной типа int. Переменная типа int занимает 4 байта (пускай она...

Необработанное исключение по адресу, нарушение прав доступа при записи по адресу - C++
вот само задание: Авиарейсы (номер рейса, пункт назначения, время вылета, дата вылета, стоимость билета, количество мест). Выбор по дате...

Исправить ошибку: необработанное исключение по адресу, нарушение прав доступа при записи по адресу - C++
Помогите, пожалуйста, исправит ошибку. Необработанное исключение по адресу 0x77D88E19 (ntdll.dll) в Lab11.exe: 0xC0000005: нарушение...

Вызвано исключение по адресу 0x013C1891 в Jacobi.exe: 0xC0000005: нарушение прав доступа при чтении по адресу - C++
#include <math.h> const double eps = 0.001; ///< желаемая точность /// N - размерность матрицы; A - матрица коэффициентов, F -...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

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