![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| batex |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 15.5.2010 Репутация: нет Всего: нет |
Разработка идет по windows mobile 6. Возникла необходимость в определенном случае менять данные в памяти по адресу 0x02020000 cо смещение 0x4a. Написал в лоб:
Выдает исключение: exception : 0xC0000005: Access Violation. Нет доступа к памяти. Попытался сделать через ReadProccessMemory и WriteProccessMemory. Вроде через эти функции можно писать в память другого процесса. Но для этого надо знать Handle процесса. Вопрос в следующем: Как узнать какому процессу принадлежит память(хотя есть такое ощущение, что это вообще реестр) или как получить доступ и писать в защищенную память? Это сообщение отредактировал(а) batex - 2.8.2012, 10:47 |
|||
|
||||
| korian |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 651 Регистрация: 8.3.2008 Где: Украина, Харьков Репутация: 3 Всего: 17 |
А оно вам надо?
От куда вообще взялся такой адрес? Вы уверены, что он не изменится при перезагрузке например? Если вы знаете от куда он взялся, вы поидее должны знать, какой процесс им обладает. |
|||
|
||||
| batex |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 15.5.2010 Репутация: нет Всего: нет |
этот адрес дало начальство сверху. Откуда конкретно он взялся - я не знаю |
|||
|
||||
| magesi |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 120 Регистрация: 20.5.2012 Репутация: -4 Всего: -4 |
Вам нужно сместить сам адрес или значение по адресу? ( думаю второе ) Вам именно как сместить нужно? побитовые сдвиги через << или тупо прибавить значение к существующему? Обычно, как вы выразились в вопросе, имеют в виду побитовые сдвигы, но судя по коду ( точнее по логике кода , которую Вы хотели бы видеть, однако не то делаете ), Вы просто получаете "как бы" новый адрес в виде 0x02020000 + offset ( 0x4a ) = 0x0202004A и пытаетесь по нему записать *c = 0x1; значение , но это в концептуальном плане, как у Вас выглядит судя по коду ( реально код Ваш этого конечно не делает ) Если Вам нужно само значение по адресу 0x02020000 увеличить на 0x4a
Но мне, что-то внутри подсказывает, что Вам скорее нужно по адресу просто значение сдвинуть << 0x4a побитово ) Вы поконкретнее объясните, что требуется. PS Что-то какой-то метод разработки микроконтроллеров у ТС причем голых , Венда Мобайл будет слать конечно запросто за такие попытки, да и цель сильно смущает... В целом, Вам вряд ли дадут менять так данные ОС, Вам хотя бы в ring0 в kernel надо gate открыть, если неймется ( хотя конечно, что за контроллер у Вас, у АРМ - концепции колец безопасности - нет, но зато есть безопасные режимы с различными диапазонами, но если у Вас Intel Atom, который сейчас пихают во всем мобильники... то там уже кольца x86, но у Вас Венда 6 скорее всего для такой ОС, там какой-нибудь АРМ стоит, но Венда Мобайл режимы тоже фильтрует, и просто так значения в адресах не получится, там и protected mode и еще несколько... ), хотя не понимаю, для чего нужно проекту на Винде Мобайл изменять по адресам значения Это сообщение отредактировал(а) magesi - 2.8.2012, 12:08 |
||||
|
|||||
| batex |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 15.5.2010 Репутация: нет Всего: нет |
Требуется именно сменить значение по адресу 0x02020000 + offset ( 0x4a ) = 0x0202004A на 0x1. Адрес записан в виде базовый + смещение, потому что смещение для некоторых случаев - разное.
|
|||
|
||||
| magesi |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 120 Регистрация: 20.5.2012 Репутация: -4 Всего: -4 |
Но только Венда Мобайл не должна позволять такое делать ) Вы по логике access violation все равно будете получать Это сообщение отредактировал(а) magesi - 2.8.2012, 12:15 |
|||
|
||||
| batex |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 15.5.2010 Репутация: нет Всего: нет |
Ага, получу эксепшн. Вопрос в том, как получить доступ к этому участку памяти |
|||
|
||||
| magesi |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 120 Регистрация: 20.5.2012 Репутация: -4 Всего: -4 |
batex, через Cи-синатксис именно так, как я написал, но Вы ни слова не сказали откуда Вы пытаетесь такой код запустить, если из под самой ОС из некого подобия user-mode, то такой код не будет работать.
Поскольку, скорее всего у Вас - АРМ микрконтроллер ( хотя Вы не уточнили ), то Вам нужно читать документацию про свой микроконтроллер на сайте АРМ, про диапазоны адресов различных режимов ( mode ) и попасть в Supervisor mode, и учить как попадать туда из под Венды Мобайл и только так уже записывать в памяти. У АРМ такие моды:
http://infocenter.arm.com/help/index.jsp?t...c/Cihhcjia.html Это сообщение отредактировал(а) magesi - 2.8.2012, 12:31 |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: нет Всего: 88 |
Дело в том, что в разных процессах в по этому адресу лежат разные данные, поэтому вопрос "какому процессу принадлежит адрес" некорректен (в общем случае)
Опиши подробнее что вы делаете? может имеется в виду доступ к внутренним данным длл, загруженной по адресу 02020000? тогда нужно грузить длл в свой процесс, и тогда менять в своём процессе, предварительно получив права на запись (VirtualProtect) -------------------- Обижено школьников: 8 |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
скорее всего, необходим доступ к физическому адресу. Если это так, то необходимо действительно переходить в привелигерованный режим (драйвер?) и делать это оттуда.
Требуй от начальства подробностей. Что это, зачем и так далее. Это сообщение отредактировал(а) bsa - 2.8.2012, 15:57 |
|||
|
||||
| magesi |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 120 Регистрация: 20.5.2012 Репутация: -4 Всего: -4 |
тут скорее спецификации микропроцессора и Венды Мобайл читать надо, чем начальство мучать |
|||
|
||||
| batex |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 15.5.2010 Репутация: нет Всего: нет |
да в том то все и дело, что пришло письмо с требованием, при таком-то случаи, включить такой-то режим. И приложен скрин сторонней программы с подписью, что мол для вкл режима выставить такие значения. На скрине адрес 0x02020000, внизу введено смещение и ниже данные.
|
|||
|
||||
| magesi |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 120 Регистрация: 20.5.2012 Репутация: -4 Всего: -4 |
ну, не при каком-то, а там есть триггер перехода в различные режимы выложите в тему пожалуйста скрин и описание , быстрее же Вам поможем Это сообщение отредактировал(а) magesi - 2.8.2012, 20:38 |
|||
|
||||
| batex |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 15.5.2010 Репутация: нет Всего: нет |
Сегодня стало немного понятнее. 0x02020000 + 0x4a это физический адрес, следовательно, необходимо перейти в привилегированный режим. Пока что не могу найти как это сделать
Это сообщение отредактировал(а) batex - 3.8.2012, 11:50 |
|||
|
||||
| batex |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 15.5.2010 Репутация: нет Всего: нет |
Попробовал через функцию MmMapIoSpace.
вылетает эксепшн 0xDFFF0123. Интересно вот что. Если посмотреть архитектуру адресного пространства, то системное адресное пространство начинается с 0х80000000 и выше. Системное ап отображается линейно на физические? Т.е. физический 0х02020000 это системный 0х82020000? или нет? Это сообщение отредактировал(а) batex - 3.8.2012, 13:51 |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |