Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
14 / 14 / 8
Регистрация: 26.09.2007
Сообщений: 921

Определить регион адресов в сегменте данных

26.10.2023, 16:28. Показов 2236. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Например есть код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
 
int region1_start = 0;
 
int val1 = 0x55;
 
int val2 = 0x66;
 
int region1_end = 0;
 
int main(void)
{
 
    //размер региона в байтах
    int size = (char*)&region1_end - (char*)&region1_start;
 
    //просто какие то вычисления с переменными из региона
    int ret = val1 + val2;
 
    //выводим размер региона в байтах
    printf("%X\n", size);
 
    return 0;
}
Что мне надо - что бы в сегменте данных ЕХЕ файла была такая последовательноть (например 0х0 начало сегмента данных - для примера):

Code
1
2
3
4
0x0000 region1_start //смещение 0 байт
0x0004 val1 //смещение 4 байт
0x0008 val2 //смещение 8 байт
0x000C region1_end //смещение 12 байт
Есть такие то директивы компилятора или настройки Visual Studio что бы мне сделать такой регион памяти и int size было = 12?

То есть мне важна последовательность данных в сегменте данных сначала region1_start потом val1 потом за ней в сегменте данных val2 потом конец моих переменных region1_end.

Я просто скомпилировал код С++ выше, и посмотрел дизасемблером - компилятор С++ раскидал все 4 переменные по разным участкам сегмента данных. Мне нужна именно такая последовательность как я указал. Фактически мне надо пометить блок данных в сегменте данных.

Как это сделать? Заранее спасибо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.10.2023, 16:28
Ответы с готовыми решениями:

Определить переменные в сегменте данных
Написать программу, где в сегменте данных будут созданы следующие переменные: Dec=65; Neg=-160; Bin1=0b1000111011; ...

Определить адрес в сегменте данных
Здравствуйте форумчане, необходима помощь с данным заданием : Определить адрес в сегменте данных переменной num на основе заданной...

Определить переменные в сегменте данных
Помогите написать программу, пожалуйста) Зарезервировать в сегменте данных: 1. 3 слова со значениями b88h, 1234h, e22h, присвоить...

28
274 / 206 / 30
Регистрация: 26.11.2022
Сообщений: 906
01.11.2023, 15:32
Студворк — интернет-сервис помощи студентам
kurlyak, скорее всего в исходнике было так, что начало, конец и размер региона , а может, и вызов блокировки делались через макрос.
1
14 / 14 / 8
Регистрация: 26.09.2007
Сообщений: 921
11.12.2023, 20:33  [ТС]
Цитата Сообщение от Aledveu Посмотреть сообщение
а может, и вызов блокировки делались через макрос.
Макрос это как вроде через #define определяется. Но я не уловил вашу мысль. Если через макрос то что меняется? Почему так много кусков кода?
0
274 / 206 / 30
Регистрация: 26.11.2022
Сообщений: 906
11.12.2023, 22:35
вот пример как это делалось в драйвере звука для soundblaster работающим под dos4gw
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int  DPMI_LockMemory( void *address, unsigned length );
int  DPMI_LockMemoryRegion( void *start, void *end );
 
#define DPMI_Lock( variable ) \
   ( DPMI_LockMemory( &( variable ), sizeof( variable ) ) )
 
int status;
   status  = DPMI_LockMemoryRegion( BLASTER_LockStart, BLASTER_LockEnd );
   status |= DPMI_LockMemory( ( void * )&BLASTER_Interrupts[ 0 ],
      sizeof( BLASTER_Interrupts ) );
   status |= DPMI_LockMemory( ( void * )&BLASTER_SampleSize[ 0 ],
      sizeof( BLASTER_SampleSize ) );
   status |= DPMI_Lock( BLASTER_Card );
   status |= DPMI_Lock( BLASTER_OldInt );
   status |= DPMI_Lock( BLASTER_Config );
   status |= DPMI_Lock( BLASTER_Installed );
   status |= DPMI_Lock( BLASTER_Version );
   status |= DPMI_Lock( BLASTER_DMABuffer );
   status |= DPMI_Lock( BLASTER_DMABufferEnd );
   status |= DPMI_Lock( BLASTER_CurrentDMABuffer );
   status |= DPMI_Lock( BLASTER_TotalDMABufferSize );
   status |= DPMI_Lock( BLASTER_TransferLength );
как видно народ не заморачивался - просто для каждой переменной вызывали залочить и всё.
2
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
12.12.2023, 12:52
Цитата Сообщение от Aledveu Посмотреть сообщение
https://web.archive.org/web/20... index.html
ну и опят таки это был ДОС
И DPMI-1990 там же
https://web.archive.org/web/20... index.html

Добавлено через 3 минуты

Не по теме:

Цитата Сообщение от kurlyak Посмотреть сообщение
У меня просто хобби ретро девелопмент за 90е года )
Для меня ретро-девелопмент 1990-х это FreeBSD.

1
14 / 14 / 8
Регистрация: 26.09.2007
Сообщений: 921
15.12.2023, 21:57  [ТС]
Спасибо за ответы.

FreeBSD я как то ставил (где то 2000 - 2001 года), увлекался, но до программирования не дошло, правда раз на gcc написал Hello World! и то кажись под Линуксом)
0
14 / 14 / 8
Регистрация: 26.09.2007
Сообщений: 921
16.12.2023, 15:13  [ТС]
Еще хотел бы более подробно узнать, зачем именно лочиться регион памяти при помощи INT 31h ax = 600h? Что это нам дает? Как овечали раньше - что бы код в этом участке памяти не выгружался на диск, а то код выгрузиться на диск, а вдруг к этому коду программа будет сейчас обращаться- а кода в памяти нету. Так я понял из объяснения ранее. И как я понял это ОС ДОС делает своп - то есть выгрузку кода на диск (регион памяти на диск выгружает). Зачем делается своп ДОС-ом? Это когда ОЗУ не хватает в компьютере и диск дополнительная память? Но когда программа обращается к участку, а он выгружен на диск- то можно быстренько загрузить его обратно в ОЗУ и продолжить работу программы - или это занимает много времени и может затормозить работу программы? Вобщим со свопом мне не ясно. Если не залочить участок памяти INT 31 ax=600h и он будет выгружен на диск - то какие могут быть проблемы в связи с этим? Код можно с диска со свопа обратно быстренько загрузить. Или что тут? Медленно диски работают, и это затормозит работу программы, программа может зависнуть и ждать пока с диска подргузиться ее код со свопа? Я правильно понял?
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
16.12.2023, 15:16
Цитата Сообщение от kurlyak Посмотреть сообщение
Но когда программа обращается к участку, а он выгружен на диск- то можно быстренько загрузить его обратно в ОЗУ
Тогда SSD не было.
1
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
17.12.2023, 08:47
Цитата Сообщение от kurlyak Посмотреть сообщение
то бы код в этом участке памяти не выгружался на диск
Не только код.
Запрограммировали мы звуковую подсистему, чтобы она проигрывала жуткого скрип двери, с такой-то скоростью, начиная с такого-то физического адреса, такой-то длины. Слова из RAM читаются и передаются на вход ЦАП.
И вдруг страницы выгрузились куда-то, а на их место записалось что-то другое. А слова продолжают читаться дальше, звуковая аппаратура ничего не знает про наши пляски с виртуальной памятью. И пользователь вместо жуткого скрипа двери слышит нечто совершенно иное.
1
14 / 14 / 8
Регистрация: 26.09.2007
Сообщений: 921
17.12.2023, 20:58  [ТС]
Спасибо. Ясно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.12.2023, 20:58

Определить адрес в сегменте данных
Здраствуйте! помогите решить такое задание, писать никаких програм не нужно: Определить адрес в сегменте данных переменной NUM на...

Определить переменные в сегменте данных
Проверьте, пожалуйста, мое решение. 1.в сегменте данных резервируется память под следующие данные: T1- 1 байт без инициал-и, T2- 4 слова...

В сегменте данных определить три области
Нужна помощь по выполнению данного задания.Совсем недавно начали изучать ассемблер.Еще не совсем понимаю как там все устроено. ...

Определить в сегменте данных массив чисел
Прошу вашей помощи, в моей задаче необходимо определить в сегменте данных массив чисел. Увеличить отрицательные элементы на 10, уменьшить...

Определить адрес переменной в сегменте данных по коду инструкции
Определить адрес в сегменте данных переменной num на основе заданной команды базового процессора Ix86 add ax, num + (9 or 2) с машинным...


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

Или воспользуйтесь поиском по форуму:
29
Ответ Создать тему
Новые блоги и статьи
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru