С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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

Прочитать память по заданному адресу. - C++
Надо написать программу на С в Linux, которая находит в памяти другую программу и читает её содержимое. На ассемблере в DOS я это делал. А...

Данные по адресу памяти - C++
У меня есть адрес например 0x11E9B62C как узнать что по нему записанно?

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

Выделение памяти по известному адресу - C++
Всем привет. Вопрос сообственно в заголовке темы. Как выделить память по нужному мне адресу, например: Я хочу выделить память n*...

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

Взятие обьекта по адресу в памяти - C++
Допустим, я знаю что по адресу 0x13242341 находится произвольный обьект. Как возвратить указатель типа void на данный адрес Типо так?...

4
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;
}
1
rangerx
1937 / 1546 / 141
Регистрация: 31.05.2009
Сообщений: 2,913
15.10.2011, 17:51 #3
C++
1
bool res = (*ptr & 0x800);
1
VMV
8 / 8 / 0
Регистрация: 08.10.2011
Сообщений: 28
15.10.2011, 18:03  [ТС] #4
Огромное спасибо
0
kravam
быдлокодер
1703 / 890 / 45
Регистрация: 04.06.2008
Сообщений: 5,489
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.
0
15.10.2011, 18:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.10.2011, 18:13
Привет! Вот еще темы с ответами:

Почему обращение к недоступному адресу в памяти - C++
Почему при проверке кода(компиляции) выскакивает сообщение :&quot;Недостаточный размер массивов или обращение по недоступному адресу в памяти&quot; ?...

Как сделать массив в памяти по фиксированному адресу? - C++
Есть микропроцессор, и в нем по жестко зафиксированному адресу находится массив ячеек. Допустим типа int. Как в Си мне организовать к нему...

Вызов функции-члена класса по адресу в памяти - C++
Всем хорошего дня :) Допустим, что где-то есть static функция, не принимающая аргументов и ничего не возвращающая. Имея один лишь...

Вызвано исключение по адресу 0x0FD466CB (ucrtbased.dll). Динамическое выделение памяти - C++
Проблема в динамическом выделении памяти. Функция multiply доходит до возвращения объекта и вылетает исключение. Если функция вернет просто...


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

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

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