Форум программистов  
Главная  |  Правила форума  |  Исходники Delphi  |  Основы Delphi  |  Блог программистов  |  Рассылка  |  Повторная активизация e-mail  | 

Вернуться   Форум программистов > C++ программирование > Общие вопросы C/C++



О проблемах с регистрацией и почтой пишите сюда - post@programmersforum.ru, по необходимости будем регистрировать вручную. И проверяйте папку спам!



Ответ
 
Опции темы
Старый 02.08.2012, 10:42   #1
rogvald
 
Регистрация: 09.05.2010
Сообщений: 8
Репутация: 10
По умолчанию exception : 0xC0000005: Access Violation

Разработка идет по windows mobile 6. Возникла необходимость в определенном случае менять данные в памяти по адресу 0x02020000 cо смещение 0x4a. Написал в лоб:
Код:

int offset = 0x4a;
int Addr = 0x02020000;
Addr += offset;
char * c = (char *) Addr;
*c = 0x1;

Выдает исключение: exception : 0xC0000005: Access Violation. Нет доступа к памяти. Попытался сделать через ReadProccessMemory и WriteProccessMemory. Вроде через эти функции можно писать в память другого процесса. Но для этого надо знать Handle процесса. Вопрос в следующем: Как узнать какому процессу принадлежит память(хотя есть такое ощущение, что это вообще реестр) или как получить доступ и писать в защищенную память?

Последний раз редактировалось rogvald; 02.08.2012 в 10:47.
rogvald вне форума   Ответить с цитированием
Старый 02.08.2012, 10:57   #2
Пепел Феникса
Профессионал
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Адрес: Москва
Сообщений: 17,786
Репутация: 2781

icq: 446843180
skype: phoenix_proger
По умолчанию

вам надо знать какому процессу вы должны менять память, ибо там тоже виртуальное адресное пространство
__________________
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Пепел Феникса вне форума   Ответить с цитированием
Старый 02.08.2012, 11:00   #3
rogvald
 
Регистрация: 09.05.2010
Сообщений: 8
Репутация: 10
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
вам надо знать какому процессу вы должны менять память, ибо там тоже виртуальное адресное пространство
Да, поэтому я и хотел сначала с помощью ReadProcessMemory найти адрес, добавить к нему смещение и затем с помощью WriteProcessMemory уже записать данные по нужному адресу. Но там нужен хэндл процесса. А его я не знаю.
rogvald вне форума   Ответить с цитированием
Старый 02.08.2012, 11:25   #4
Пепел Феникса
Профессионал
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Адрес: Москва
Сообщений: 17,786
Репутация: 2781

icq: 446843180
skype: phoenix_proger
По умолчанию

так а память какого процесса то?

и адрес 0x02020000 + смещение 0x4a = адрес 0x0202004a
__________________
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Пепел Феникса вне форума   Ответить с цитированием
Старый 02.08.2012, 11:42   #5
rogvald
 
Регистрация: 09.05.2010
Сообщений: 8
Репутация: 10
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
так а память какого процесса то?

и адрес 0x02020000 + смещение 0x4a = адрес 0x0202004a
Вот я и не знаю какому процессу принадлежит память. В этом вся и проблема.

Смещение там для некоторых случаев - разное. Поэтому считается отдельно
rogvald вне форума   Ответить с цитированием
Старый 02.08.2012, 11:49   #6
Пепел Феникса
Профессионал
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Адрес: Москва
Сообщений: 17,786
Репутация: 2781

icq: 446843180
skype: phoenix_proger
По умолчанию

там виртуальное адресное пространство.
потому тупо адрес принадлежит поидее вашему процессу.(или оно не распределено, что и дает ошибку).
так что вам надо менять память в каком то процессе.
__________________
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Пепел Феникса вне форума   Ответить с цитированием
Старый 02.08.2012, 12:08   #7
rogvald
 
Регистрация: 09.05.2010
Сообщений: 8
Репутация: 10
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
там виртуальное адресное пространство.
потому тупо адрес принадлежит поидее вашему процессу.(или оно не распределено, что и дает ошибку).
так что вам надо менять память в каком то процессе.
Да, память менять надо в другом процессе. Что это за процесс - я не знаю.
rogvald вне форума   Ответить с цитированием
Старый 02.08.2012, 13:16   #8
Пепел Феникса
Профессионал
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Адрес: Москва
Сообщений: 17,786
Репутация: 2781

icq: 446843180
skype: phoenix_proger
По умолчанию

значит надо узнать в каком процессе вам надо менять.
__________________
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Пепел Феникса вне форума   Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Access violation dimavit Общие вопросы Delphi 3 29.07.2012 18:16
Unhandled exception .. access violation Jugger Помощь студентам 1 01.03.2011 04:50
Unhandled exception at 0x76f06344 in Project.exe: 0xC0000005: Access violation. Zhenya-Pvl Общие вопросы C/C++ 16 22.02.2011 23:29
Access Violation SunKnight Общие вопросы Delphi 2 05.06.2008 15:46
Access Violation Carbon Общие вопросы Delphi 12 18.09.2007 18:55




05:01.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.

Forex с Admiral Markets — это надежно


Работа на Forex с 2000 года. Очное и дистанционное обучение. Выгодные условия.
магазин горящих туров


более 1000 горящих предложений ежедневно
Бэбиблог - соц сеть для будущих мам


RusProfile.ru


Справочник российских юридических лиц и организаций.