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

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

Войти
Регистрация
Восстановить пароль
 
VMV
8 / 8 / 0
Регистрация: 08.10.2011
Сообщений: 28
#1

Прочитать из памяти по адресу - C++

15.10.2011, 17:11. Просмотров 932. Ответов 4
Метки нет (Все метки)

Задача: в памяти по адресу 0040:0010h (0x00400010) записано слово (информация о подключенном оборудовании). Нужно прочитать 12-й бит этого слова и вывести на экран (в консоль) какое-то сообщение в случае 0 или 1. Так вот, как обратится к этому 12-му биту и проверить 1 там или 0?
Заранее премного благодарен.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.10.2011, 17:11     Прочитать из памяти по адресу
Посмотрите здесь:
Прочитать память по заданному адресу. C++
Данные по адресу памяти C++
Доступ к памяти по адресу C++
C++ Взятие обьекта по адресу в памяти
Доступ к произвольному адресу памяти C++
Выделение памяти по известному адресу C++
Почему обращение к недоступному адресу в памяти C++
C++ Вызов функции-члена класса по адресу в памяти
C++ Как сделать массив в памяти по фиксированному адресу?
C++ Вызвано исключение по адресу 0x0FD466CB (ucrtbased.dll). Динамическое выделение памяти
Разработать программу позволяющую получить дамп памяти по адресу содержащему вводимые числа C++
C++ Как прочитать содержимое памяти ПК?

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
15.10.2011, 17:42     Прочитать из памяти по адресу #2
C
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
 
int main()
{
    unsigned int w = 0x00400010;
 
    if (w & (1 << 11))
        printf("1\n");
    else
        printf("0\n");
    return 0;
}
rangerx
1931 / 1540 / 141
Регистрация: 31.05.2009
Сообщений: 2,908
15.10.2011, 17:51     Прочитать из памяти по адресу #3
C++
1
bool res = (*ptr & 0x800);
VMV
8 / 8 / 0
Регистрация: 08.10.2011
Сообщений: 28
15.10.2011, 18:03  [ТС]     Прочитать из памяти по адресу #4
Огромное спасибо
kravam
быдлокодер
1691 / 878 / 44
Регистрация: 04.06.2008
Сообщений: 5,420
15.10.2011, 18:13     Прочитать из памяти по адресу #5
Чё-то вы не то пишите, ему надо память дампировать
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#include <windows.h>
#include <conio.h> 
 
#include <stdio.h>
 
int main ( ) { 
 
 char ima_protcessa [MAX_PATH];
 
 
 //Русский язык
 SetConsoleCP(1251);
 SetConsoleOutputCP(1251);
 //
 
 
 unsigned char sposob_nah_adresov;
 
 
 //!!!!!!!!!З А Г О Л О К   О К Н А!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 char sPath[MAX_PATH]= "прога дампирует участок адресного пространства текущего процесса";
 CharToOem((LPCTSTR)sPath,sPath);
 SetConsoleTitle(sPath);
 //!!!!!!!!!К О Н Е Ц   З А Г О Л О К   О К Н А!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
 
 
 
 
 
 
 long int NacalniAdres;
 printf ("Вводи адрес, с которого надо дампировать\n");
 scanf ("%x", &NacalniAdres);
 
 
 
 printf ("Если ты знаешь размер дампируемого участка, нажми 1, если знаешь номер \
  конечного байта, нажми 2\n");
 printf ("1         Знаешь размер дампируемого участка\n\
  2        знаешь размер конечного байта\n");
 do {
  sposob_nah_adresov= getch ();
 }
 while (sposob_nah_adresov!= '1' && sposob_nah_adresov!= '2');
 
 
 long int KolichestvoSchitivaemihBait; 
 long int nomer_konechnogo_baita; 
 if (sposob_nah_adresov== '2') {
  printf ("Вводи номер конечного байта\n");
  scanf ("%x", &nomer_konechnogo_baita);
  KolichestvoSchitivaemihBait= nomer_konechnogo_baita- NacalniAdres+ 1;
 }
 else {
  printf ("Вводи количество дампируемых байтов\n");
  scanf ("%x", &KolichestvoSchitivaemihBait);
 }
 
 
 
 
 
 int i, j;
 
 /*В эту переменную будет считываться каждый байт, а потом выводиться в файл rez.txt
 Она должня быть именно не сhar, если будет сhar, тогда может вывестись вместо 90 ffffff90
 проверено уже. 
 */
 
 unsigned char  lpBuffer ;
 
 FILE* f_txt;
 FILE* f;
 
 f_txt= fopen ("rez.txt","wb");
 f= fopen ("rez","wb");
 if (!f_txt) {
  printf ("File-rezultat txt ne sozdan\n");
  system ("pause");
  return 0;
 } 
 if (!f) {
  printf ("File-rezultat ne sozdan\n");
  system ("pause");
  return 0;
 } 
 
 //Вот, всё. Такой вот цикл. Выводится значение байта, а рядом- его порядковый номер. 
 //Запишем всё это дело в файл rez.txt
 j= 0;
 for (i= 0; i< KolichestvoSchitivaemihBait; i++) {
  ReadProcessMemory (GetCurrentProcess(), (void*)(NacalniAdres+ i), &lpBuffer, 1, 0  );
  fprintf (f_txt, "0X%-0.2x,%c", lpBuffer, ' ');
  fputc (lpBuffer, f);
  if (j++== 3) {
   putc (10, f_txt);
   j= 0;
  }
 }
 
 
 fclose (f_txt);
 fclose (f);
 return 0;
}
результаты в текстовом файле rez.txt и бинарнике rez.
Yandex
Объявления
15.10.2011, 18:13     Прочитать из памяти по адресу
Ответ Создать тему
Опции темы

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