Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.08.2012, 11:42   #1
rogvald
 
Регистрация: 09.05.2010
Сообщений: 8
По умолчанию 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 в 11:47.
rogvald вне форума Ответить с цитированием
Старый 02.08.2012, 11:57   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

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

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

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

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

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

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

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

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

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

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


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Access violation dimavit Общие вопросы Delphi 3 29.07.2012 19: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 16:46
Access Violation Carbon Общие вопросы Delphi 12 18.09.2007 19:55