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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.58
VlTag
7 / 7 / 1
Регистрация: 30.04.2012
Сообщений: 103
#1

Вывод дампа памяти с нужного адреса - C++

11.01.2014, 01:59. Просмотров 2097. Ответов 9
Метки нет (Все метки)

Имеется работающий код из книги. У меня среда Visual C++ 2008.
Проблема в том, что этот код выводит дамп начиная с адреса переменной "k".
Мне надо выводить дамп с нужного заданного адреса. Как изменить код, чтобы не было привязки к переменной "k"?

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
//Вывод дампа памяти начиная с ячейки переменной "k"
 
#include "stdafx.h"
#include <conio.h>
#include <stdio.h>
#include <windows.h>
 
int k=0x07;                
BYTE *b=(BYTE*)&k;
 
int _tmain(int argc, _TCHAR* argv[])
{
    int j=0;
    printf("\n%p   ",b);
    
    for (int i=0; i<432; i++)
    {
      printf("%02x  ",*(b++));
      if (++j==16&&i<430)
      {
          printf("\n");
          j=0;
          printf("%p   ",b);
      };
    };
    printf("\n");
    _getch();       
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.01.2014, 01:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вывод дампа памяти с нужного адреса (C++):

Выделить в памяти 1024 ячейки по 8 байт и вывести их адреса(МИНИ менеджер памяти)) - C++
Вот тут появилась такая интересная задача: требуется сделать программу которая управляет 1024 ячейками памяти по 8 байт каждая. т.е. за...

Узнать адреса памяти - C++
Всем привет! Не знал в какой теме разместить, разместил тут. Как узнать адреса памяти? Тоесть есть определённая программа(в...

Адреса в памяти, количество бит - C++
#include &lt;iostream&gt; int main() { int n; std::cout&lt;&lt;&amp;n&lt;&lt;std::endl; std::system(&quot;pause&gt;nul&quot;); ...

Проверка доступности адреса памяти - C++
Как проверить можно ли прочитать по указанному адресу , что либо ?

Поиск адреса длл в памяти приложения - C++
Это снова я! И снова проблема. Я пытался получить хендл загружаемой библиотеки как пробовали тут:...

Вывести значения элементов массива и их адреса в памяти - C++
Поставьте комментарии рядом с каждой строчкой :) Задача:составить программу в которой случайным образом определен массив и два...

9
andryshka
2 / 2 / 0
Регистрация: 05.12.2013
Сообщений: 81
11.01.2014, 02:01 #2
Цитата Сообщение от VlTag Посмотреть сообщение
BYTE *b=(BYTE*)&k;
Ни в этой ли строке собака зарыта?
0
VlTag
7 / 7 / 1
Регистрация: 30.04.2012
Сообщений: 103
11.01.2014, 02:12  [ТС] #3
Вы правы! Эта строка даёт (начинает) информацию об адресах. Но как её изменить, чтобы не было привязки к переменной "k"?
Мне нужно создать утилиту где я мог бы сам задать первый адрес. Любой, который мне нужен. Это позволит просматривать тот или иной нужный участок памяти.
0
alsav22
5431 / 4826 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
11.01.2014, 09:50 #4
Как инициализировать указатель произвольным адресом?
0
VlTag
7 / 7 / 1
Регистрация: 30.04.2012
Сообщений: 103
13.01.2014, 23:11  [ТС] #5
Уважаемый
alsav22 !
Большое спасибо!
Вот работающий код:
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
//Вывод дампа памяти с заданного адреса
//
#include "stdafx.h"
#include <conio.h>
#include <stdio.h>
#include <windows.h>
 
int _tmain(int argc, _TCHAR* argv[])
{
    BYTE *b=(BYTE*)0x00416000; //Любой адрес
 
    int j=0;
    printf("\n%p   ",b);
    for (int i=0; i<400; i++)    
    {
      printf("%02x  ",*(b++));
      if (++j==16&&i<398) {      
          printf("\n");
          j=0;
          printf("%p   ",b);    
        };
    };
    _getch();       
    return 0;
}
0
alsav22
5431 / 4826 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.01.2014, 23:30 #6
Цитата Сообщение от VlTag Посмотреть сообщение
Вот работающий код:
???
0
Миниатюры
Вывод дампа памяти с нужного адреса  
VlTag
7 / 7 / 1
Регистрация: 30.04.2012
Сообщений: 103
14.01.2014, 00:55  [ТС] #7
alsav22
Но у меня этот код прекрасно работает! Более того, ниже привожу вариант где ввожу переменную "k" для эксперимента, чтобы её увидеть по одному адресу и в дампе и вне дампа. Всё отлично! Память можно просматривать.
Как объяснить Ваш результат?
Изначальный вариант кода программы я взял из книги авторитетного автора В.Ю. Пирогова
“Ассемблер и дизассемблирование”. Ругать его программу не будем. Видимо, у Вас не с любого адреса можно вывести дамп.
Привожу обещанный выше интересный вариант кода:
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
//Два раза видим в памяти переменную "k"
//по одному адресу
#include "stdafx.h"
#include <conio.h>
#include <stdio.h>
#include <windows.h>
 
int k=0x07;
int *ptrk=&k;
 
int _tmain(int argc, _TCHAR* argv[])
{     
    BYTE *b=(BYTE*)0x00417000;
    int j=0;
    printf("\n%p   ",b);
    for (int i=0; i<400; i++)    
    {
      printf("%02x  ",*(b++));
      if (++j==16&&i<398) {      
          printf("\n");
          j=0;
          printf("%p   ",b);    
        };
    };
    printf("\n");
    printf("\n");
    printf("\n");
    printf("Addres k:  %x",ptrk); //Адрес переменной k вне дампа
    _getch();       
    return 0;
}
На моём ПК компиляция проходит без ошибок и предупреждений.
Итак, очень Вам благодарен!
0
alsav22
5431 / 4826 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
14.01.2014, 01:36 #8
Цитата Сообщение от VlTag Посмотреть сообщение
Но у меня этот код прекрасно работает!
Из среды запускаете?

Добавлено через 5 минут
Цитата Сообщение от VlTag Посмотреть сообщение
Видимо, у Вас не с любого адреса можно вывести дамп.
У вас с любого? Например, с этого: 0x00416 ?
0
VlTag
7 / 7 / 1
Регистрация: 30.04.2012
Сообщений: 103
14.01.2014, 13:48  [ТС] #9
alsav22

1. Запускаю не из среды. Окно программы-среды сворачиваю и захожу в папку Projects, там нахожу нужную папку Solutionxxx со своим конкретным проектом и т.д. до папки Debug где находится файл *.exe. Его запускаю на исполнение.
2. С адреса 0x00416 дамп не распечатывается. Видимо, есть какие-то особенности, т.е. ограничения. Надо разобраться. Ниже привожу код с таким адресом, с которого у меня дамп выводится.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//
#include "stdafx.h"
#include <conio.h>
#include <stdio.h>
#include <windows.h>
int _tmain(int argc, _TCHAR* argv[])
{     
    BYTE *b=(BYTE*)0x00416000;
    int j=0;
    printf("\n%p   ",b);
    for (int i=0; i<400; i++)    
    {
      printf("%02x  ",*(b++));
      if (++j==16&&i<398) {      
          printf("\n");
          j=0;
          printf("%p   ",b);    
        };
    };
 
    _getch();       
    return 0;
}
0
alsav22
5431 / 4826 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
14.01.2014, 14:05 #10
Цитата Сообщение от VlTag Посмотреть сообщение
Видимо, есть какие-то особенности, т.е. ограничения. Надо разобраться.
Вот и я об этом же. Поэтому лучше, в коментариях к коду, не писать, что там может быть любой адрес.
Цитата Сообщение от VlTag Посмотреть сообщение
1. Запускаю не из среды.
А если из среды запустить?
0
14.01.2014, 14:05
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.01.2014, 14:05
Привет! Вот еще темы с ответами:

Адреса памяти, в которых происходит выделение, и нет освобождения - C++
Добрый день форумчане. Уже несколько недель ломаю себе голову над одной задачей. За меня делать ничего не прошу, так как в принципе проект...

В оперативной памяти вектор int X[10] расположен, начиная с адреса B7F0 - C++
Задание 1. В оперативной памяти вектор int X расположен, начиная с адреса B7F0. Какие значения примут выражения: а) X+1; б) X+5; в)...

Вывод адреса символа в cout - C++
Здравствуйте. Подскажите пожалуйста в чём может быть проблема . #include&lt;iostream&gt; int main() { char z = 'M'; char* symbol =...

реализация поиска нужного имени в файле и вывод данных, относящихся к этому имени - C++
Доброго времени суток всем! Прошу помощи у более компитентных людей нежели я. Полное задание выглядит так: Разработать программу,...


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

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

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