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

C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.71
batex
0 / 0 / 0
Регистрация: 11.12.2009
Сообщений: 7
#1

exception : 0xC0000005: Access Violation - C++

02.08.2012, 11:44. Просмотров 2242. Ответов 2
Метки нет (Все метки)

Разработка идет по windows mobile 6. Возникла необходимость в определенном случае менять данные в памяти по адресу 0x02020000 cо смещение 0x4a. Написал в лоб:
C++
1
2
3
4
5
int offset = 0x4a;
int Addr = 0x02020000;
Addr += offset;
char * c = (char *) Addr;
*c = 0x1;
Выдает исключение: exception : 0xC0000005: Access Violation. Нет доступа к памяти. Попытался сделать через ReadProccessMemory и WriteProccessMemory. Вроде через эти функции можно писать в память другого процесса. Но для этого надо знать Handle процесса. Вопрос в следующем: Как узнать какому процессу принадлежит память(хотя есть такое ощущение, что это вообще реестр) или как получить доступ и писать в защищенную память?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.08.2012, 11:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос exception : 0xC0000005: Access Violation (C++):

0xC0000005: Access violation writing location - C++
Пытаюсь запустить стороннее приложение таким кодом: PROCESS_INFORMATION P_I; STARTUPINFO S_I; ZeroMemory(&S_I, sizeof(S_I)); ...

После сборки в Release краш с Access Violation - C++
Имеется Dll, собранная в Release /MT. На Win8 все прекрасно работает, а на 7ке крашится с исключением c0000005. Причем если запускать в...

Ошибка Access violation при передаче указателя в функцию - C++
выделяю память для нужд програмных и соханяю его. char *resadres =(char*) VirtualAlloc (0, 50000, MEM_COMMIT | MEM_RESERVE,...

Ошибка: "Необработанное исключение: 0xC0000005: Нарушение прав доступа при записи" - C++
мной написана программа #include <iostream> #include <conio.h> #include "mpi.h" #include <ctime> #include <time.h> #include...

Access violation - C++ Builder
Пишу довольно простую карточную игру и столкнулся с проблемой: При выполнении обработчика событий одной из кнопок, возникает следующая...

Access violation - C++ Builder
Доброго времени суток! Сразу извиняюсь за такую тему, но не могу разобраться. Есть Форма FSkladS, если обращаюсь к объектам формы так...

2
Airhand
502 / 458 / 3
Регистрация: 08.07.2009
Сообщений: 2,625
04.08.2012, 13:29 #2
Нельзя так в лоб писать в любой винде. Память то защищённая и оно верно говорит "нет прав доступа".
0
Kastaneda
Jesus loves me
Эксперт С++
4689 / 2893 / 236
Регистрация: 12.12.2009
Сообщений: 7,356
Записей в блоге: 2
Завершенные тесты: 1
05.08.2012, 08:57 #3
Дело не в том, что так писать нельзя, а в том, что это бессмысленно. Таким образом ты обращаешся к памяти внутри своего сегмента, т.е. к памяти своей же программы. Ошибка возникает очевидно из-за того, что такой адрес не существует в твоей программе.
При адресации памяти адрес вычесляется с учетом значения, которое хранится в сегментном регистре (в данном случае это будет DS). В protected mode (в котором работает 32 битная винда) в сегментных регистрах лежат селекторы сегментных дескрипторов. Селектор - это индекс дескриптора в глобальной таблице дескрипторов (GDT), ее адрес находится в регистре GDTR. Чтоб получить линейный адрес (в общем случае он же физический, но есть исключения) нужно считать адрес из GDTR, прибавить к этом адресу наш селектор, потом в дескрипторе вычеслить адрес начала сегмента, и к этому адресу уже прибавить нужное смещение (в случае ТС это 0x02020000).
Вот, но это все не так просто, как кажется, поэтому WinAPI в помощь
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.08.2012, 08:57
Привет! Вот еще темы с ответами:

access violation - C++ Builder
Всем привет!!!! Есть софтина, при запуске создает текстовый файл у себя в корне (cso.log) Каждое утро при запуске создает, каждый вечер...

Access Violation на XP - C++ Builder
При тестировании проэкта написанном в Rad XE, на XP у меня выскакивает при выключении ПК Access Violation, а на win7 нет. Почитал эту...

Access Violation at address - C++ Builder
Ошибка вылетает после прохождения 22 строки (функция ChangeSym 4 строка в теле). Объясните кто-то - почему? ...

Unhandled exception at 0x0F73DF62 | 0xC0000005: Access violation writing location - C++
Многоуважаемые форумчане, необходима небольшая консультация по следующему коду: #include<iostream> #include<fstream> ...


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

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

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