Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.04.2017, 08:00   #1
седьмой
Форумчанин
 
Регистрация: 17.07.2012
Сообщений: 140
По умолчанию Помогите разобраться как хранятся данные в памяти ПК?

Вроде бы все ясно, но оказалось далеко не ясно, когда в пошаговом режиме стал проверять код - куда записываются данные в программе и как и в какую ячейку. Допустим у меня в программе открылся файл, ему присвоено имя out_fille. Дальше вот такой код
Код:
case 0x0: fprintf(out_file,"(КК->ОУ)");
смотрю значение переменной out_file оно такое
Код:
struct file far *75FD:2D78
я так понимаю по этому указателю начинается файл, в который я записываю некоторые данные, в том числе и вот эту строку. Значит если я сейчас открою окно с этой частью памяти, то у меня должны там оказаться вот этот самый текст, который я только что записал или все сложнее с памятью? Вот картинка памяти, но не та с которой я работаю а просто подобие, так как сама программа в чистом досе, а комп с инетом под виндой и другой, но кстати пример как раз в тему , тут даже есть ответ на мой вопрос и видно что код
Цитата:
E1 A0 00 8A 8A 2D 3E 8E это и есть буквы ca КК->ОУ
Осталось разобраться с кодовой таблицей, где взять соответствие вот этих 16сс знаков и реальных данных в программе, это 1й вопрос и 2й. Как записываются данные в память последовательно? Значит я свои данные на рабочем компе должен увидеть так же? Или данные/текст могжет записаться не последовательно , а в разных местах и соединяться с собой по каким то своим ссылкам дополнительным? Почему я спрашиваю, потому что у меня на этом месте какой-то мусор лежит, картинку взять и выложить не могу быстро это процесс длительный по перекопированию, так сложилось исторически, и не знаю надо или нет? Если надо, что бы было понятнее, то могу выложить. Опять же мало кто помнит дос, давно это было, вряд ли кто то захочет разобраться, может по старой памяти кто то что объяснит? Не знаю просто куда копать? У меня операционная система МС-ДОС установлена на промышленном компьютере, настраиваю драйвер интерфеса под досом в борланд си ++ 3.1 и в турбо дебаггере 3.0
Изображения
Тип файла: jpg td2.jpg (71.8 Кб, 126 просмотров)
седьмой вне форума Ответить с цитированием
Старый 26.04.2017, 08:07   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Цитата:
Сообщение от седьмой Посмотреть сообщение
я так понимаю по этому указателю начинается файл
Неправильно понимаете.
out_file это некий системный объект. Где он хранит ваши данные, строго говоря никто, не знает.
waleri на форуме Ответить с цитированием
Старый 26.04.2017, 09:54   #3
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
Осталось разобраться с кодовой таблицей, где взять соответствие вот этих 16сс знаков и реальных данных в программе, это 1й вопрос
В кодовой таблице, котрую вы использовали. Если ASCII, то в ASCII, а если в вин-1251 или OEM-866, то, соответственно, в вин-1251 или OEM-866

Цитата:
и 2й. Как записываются данные в память последовательно? Значит я свои данные на рабочем компе должен увидеть так же?
Данные понятие растяжимое, а контейнер, в котором эти данные хранятся еще больше. Обычно, массивы выделяют сплошным куском... но есть реализации для очень больших массивов или матриц с раздельным хранением. А еще списки...
p51x вне форума Ответить с цитированием
Старый 26.04.2017, 10:00   #4
седьмой
Форумчанин
 
Регистрация: 17.07.2012
Сообщений: 140
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
или OEM-866, то, соответственно, в вин-1251 или OEM-866
да это я нашел спасибо
седьмой вне форума Ответить с цитированием
Старый 26.04.2017, 11:10   #5
седьмой
Форумчанин
 
Регистрация: 17.07.2012
Сообщений: 140
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Данные понятие растяжимое, а контейнер, в котором эти данные хранятся еще больше
Нет тут не массив, тут из файла считывается некая команда и записывается в буфер, я так понял, что это какая то область оперативной памяти, на экране это всего несколько байт данных, сейчас выложу пример, что бы было понятнее. Причем буфер организован постранично и таких страниц может быть тоже порядка 30. Интересно вот что, допустим я в буфер 1й страницы считываю данные из одного файла, затем перехожу на другую страницу буфера и считываю туда другой файл, ну а третью страницу к примеру обнуляю. Потом выхожу из программы, снова захожу и эти 3 страницы у меня остались прежними, из этого я делаю вывод, что программа каким то образом привязывается к оперативной памяти ПК и при начальной загрузке и инициализации или привязывается к этой памяти или считывает ее в свои массивы, я сейчас еще и код выложу, раз ответили несколько человек, может и еще сможете посмотреть и подсказать что то?
Код:
void bc_buf_rd(char *str) /* чтение кода управления и буфера из файла */
{
 int ch;
 char *ptr;
 int ch_count;

 int ctrl_code2, offset;
 static unsigned buffer2[BC_BUF_SIZE];

 while (*str == ' ' || *str == '\t') str++;
 if ((in_file=fopen(str, "rt")) == NULL)
 {
  msg_out(open_err);
  return;
 }
 while (*str != '\0') str++;
 str--;
 for (; *str != ':' && *str != '\\' && *str != ' ' && *str != '\t'; str--);
 str++;
 strcpy(Window[nwin].data_fname, str);
 out_fname();
 fgets(buf_str, 80, in_file); /* пропустить пустую строку */
                              /* чтение кода управления из файла */
 fgets(buf_str, 80, in_file); /* пропустить строку подсказки */
 if ((fgets(buf_str, 80, in_file)) == NULL)
 {
  msg_out(format_err);
  return;
 }
 str=buf_str;
 while (*str == '\t' || *str == ' ') str++;
 ptr=str;
 while ((ch=*(ptr++)) != ' ')
 {
  if (ch != '0' && ch != '1')
  {
   msg_out(bad_ctrl_code);
   return;
  }
 }
 --ptr;
 if (ptr-str > CC_SIZE)
 {
  msg_out(bad_ctrl_code);
  return;
 }
 ptr=str;
 for (ctrl_code2=0; *ptr != ' '; ptr++)
 {
  ctrl_code2<<= 1;
  if (*ptr == '1') ctrl_code2++;
 }
 if (!correct_cc(ctrl_code2))
 {
#ifdef ENG
  sprintf(cc_no_def, "Wrong control code");
#else
  sprintf(cc_no_def, "Неверный код управления");
#endif
  msg_out(cc_no_def);
  return;
 }
                              /* Чтение в буфер из файла */
 fgets(buf_str, 80, in_file); /* пропустить строку подсказки */
 offset=0;
 while (offset != BC_DUMP_SIZE)
 {
  if (fscanf(in_file, "%x ", &buffer2[offset]) != 1)
  {
   msg_out(format_err);
   return;
  }
  if ((++offset%DUMP_WIDE) == 0)
   while ((ch=fgetc(in_file)) != '\n')
    if (ch == EOF)
    {
     msg_out(format_err);
     return;
    }
 }
 ctrl_code[tmkselected()][base]=ctrl_code2;
 out_ctrl_code();
 for (offset=0; offset != BC_DUMP_SIZE; offset++)
  buffer[offset]=buffer2[offset];
 bcputblk(0, buffer, 36);
 out_buffer();
 fclose(in_file);
}
И вот сам файл, который загружается с кодами команд и на экране (в буфере) он виден один в один и буферы эти можно переключать, буферами я назвал их сам, это наверно не буферы а просто разные страницы, выше кода управления в программе идет номер страницы , тоже просто из 4х нулей. Тут программа не запускается без платы, а с рабочего компьютера не скопировать, но наверно и так понятно, в чем проблема.
Цитата:
Код управления:
0000 (КК-->ОУ.)
Буфер:
0A21 1111 0000 0000 0000 0000 0000 0000 0000 0000 : 00
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 : 10
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 : 20
0000 0000 0000 0000 0000 0000 : 30
0 1 2 3 4 5 6 7 8 9

Последний раз редактировалось Аватар; 26.04.2017 в 11:14.
седьмой вне форума Ответить с цитированием
Старый 26.04.2017, 11:21   #6
седьмой
Форумчанин
 
Регистрация: 17.07.2012
Сообщений: 140
По умолчанию

Последний раз редактировалось Аватар; Сегодня в 11:14. чем вы подкрасили код?
седьмой вне форума Ответить с цитированием
Старый 26.04.2017, 11:24   #7
седьмой
Форумчанин
 
Регистрация: 17.07.2012
Сообщений: 140
По умолчанию

Может мне после загрузки файлов и выхода из программы просмотреть всю память или это ничего не даст, нужно все же разбираться с кодом, куда что записывается и где хранится? И чем то можно просмотреть всю память?, в какой то теме мне уже советовали это сделать, попробую поискать тот ответ.
седьмой вне форума Ответить с цитированием
Старый 26.04.2017, 11:43   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от седьмой Посмотреть сообщение
чем вы подкрасили код?
для выделения кода нужно использовать специальные теги форматирования.

Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.04.2017, 13:07   #9
седьмой
Форумчанин
 
Регистрация: 17.07.2012
Сообщений: 140
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Код программы нужно выделять (форматировать) тегами [CODE]
спасибо
седьмой вне форума Ответить с цитированием
Старый 26.04.2017, 15:24   #10
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

Ниче не понял...все сумбурно, но ...в принципе драйвер может создать "файл", который будет не настоящим файлом, а куском его памяти...

...."поискать в памяти" - да сделайте цикл по всем адресам и считайте и скинте на диск, а искать я вам советовал сам код драйвера. Нет адреса не будут фиксированы, вероятнее всего будет типа "+12434 байт он адреса загрузки драйвера".
И то не факт, если вы можите писать читать такой буфер - запишити в него "абрвалг" и ищите по всей памяти, куда это попало.

Последний раз редактировалось alexzk; 26.04.2017 в 15:28.
alexzk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Данные вводятся на веб странице, но хранятся в .... Ципихович Эндрю Общие вопросы Web 35 23.09.2016 08:10
Данные о температуре воздуха и количестве осадков за декаду апреля хранятся в массивах. Определить количество осадков... zzz99 Помощь студентам 8 13.03.2014 17:33
Байты или то, как хранятся данные RussDragon Общие вопросы C/C++ 10 11.06.2013 08:50
Дан массив, в котором хранятся данные о расписании поездов, определить поезда на станции (C++) nurtay1994 Общие вопросы C/C++ 1 29.04.2013 08:26
где хранятся данные при работе с dll ? xrob Общие вопросы Delphi 17 19.04.2013 23:18