Дамп оперативной памяти с заданного адреса

Захотелось мне однажды посмотреть содержимое оперативной памяти с определённого адреса. Сказано — сделано:

#include <iostream>

using namespace std;

void dump_addr ( __int8 *addr, int nbyte )
{
    cout << hex;
    for ( int i = 0; i < nbyte; i++ )
    {
        cout << (int)*addr++ << " ";
    }
    cout << dec;
}

int main( int argv, char *argc[] )
{
    int *ptr = ( int* )1024;
    dump_addr ( ( __int8* )ptr, 10 );
    return 0;
}


но естественно, ничего не работает(с сообщением от виндовс, что программа не работает). Причём если удалить строку dump_addr ( (__int8*)ptr, 10 ); то всё работает, значит функция неверна. Не подскажите, в чём проблема?

Твоя программка отлично бы работала под управлением MS DOS на i8086. Но в защищённом режиме работы процессора ты таким образом сможешь посмотреть только адресное пространство, отведённое твоему процессу, и то не всё.

Вот так кое-что подсмотреть можно:

int main( int argv, char *argc[] )
{
    int *ptr = ( int* )&ptr;
    dump_addr ( ( __int8* )ptr, 10 );
    return 0;
}

Хорошо, а как мне тогда получить адрес начала пространства, отведённого под мой процесс? Не будет ли это адрес функции main?

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.