![]() |
Модераторы: 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 |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |