Дамп оперативной памяти с заданного адреса
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Захотелось мне однажды посмотреть содержимое оперативной памяти с определённого адреса. Сказано — сделано:
#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
?