Методика установки хуков на API вызовы в Windows CE
От: Vovik1982 Россия  
Дата: 30.11.07 09:46
Оценка:
Описал методику "как это сделать".
vovik1982.livejournal.com

Если у кого будут дополнения — буду рад. Надо дорабатывать чтобы было совсем универсально...
Re: Методика установки хуков на API вызовы в Windows CE
От: Sash_xp  
Дата: 30.11.07 09:58
Оценка:
Здравствуйте, Vovik1982, Вы писали:

V>Описал методику "как это сделать".

V>vovik1982.livejournal.com

V>Если у кого будут дополнения — буду рад. Надо дорабатывать чтобы было совсем универсально...

Все, что описано ниже относится к Windows CE 6 (ядро 5.2)

Вы имели в виду "Все, что описано ниже относится к Windows Mobile 6 (ядро Windows CE 5.2)"?
... << RSDN@Home 1.2.0 alpha rev. 784>>
Re[2]: Методика установки хуков на API вызовы в Windows CE
От: Vovik1982 Россия  
Дата: 30.11.07 09:59
Оценка:
Да, естественно... Очепятка..
Re: Методика установки хуков на API вызовы в Windows CE
От: Alexander Shargin Россия RSDN.ru
Дата: 30.11.07 10:24
Оценка: 1 (1)
Здравствуйте, Vovik1982, Вы писали:

V>Описал методику "как это сделать".

V>vovik1982.livejournal.com

V>Если у кого будут дополнения — буду рад. Надо дорабатывать чтобы было совсем универсально...


Несколько комментов.

Память в CE делится на 2 части — область ядра и пользовательская область. Чтобы получить возможность работать с областью ядра (верхние 2 гигабайта), используется SetKMode и разыменование указателей. Read/WriteProcessMemory здесь не работает, так как процессы находятся в пользовательской области (кроме nk.exe).

Пользовательская область в свою очередь делится на 2 части — слоты процессов и high memory area (HMA). К HMA имеют доступ все. К слоту процесса по умолчанию имеют доступ только потоки, в нём же созданные. При попытке обратиться к слоту другого процесса путём простого разыменования указателя возникнет ошибка. Но можно "добавить" себе прав с помощью SetProcPermissions(0xFFFFFFFF), после чего можно обращаться к памяти любого процесса напрямую. Ну или использовать Read/WriteProcessMemory — это переносимее (будет работать и в CE6).

ToolHelp, действительно, имеет проблемы с памятью. Многие, кто его использовал (включая сам Микрософт), крепко обломались на этом. Проблема лечится использованием флага TH32CS_SNAPNOHEAPS — именно на снапшот куч обычно не хватает памяти, а как правило он и не нужен.

Информация о внутренних структурах ядра ищется в Platform Builder. Структуры для процессов и модулей называются Process и Module соответственно, описаны в kernel.h.
--
Я думал, ты огромный страшный Бажище,
А ты недоучка, крохотный Бажик...
Re[2]: Методика установки хуков на API вызовы в Windows CE
От: Vovik1982 Россия  
Дата: 30.11.07 10:28
Оценка:
Память на 2 части делится не только в CE
По поводу "не будет работать" — повторюсь — код приведенный там РАБОТАЕТ!!! Я его тестил на нескольких девайсах и на эмуляторе.

Про ToolHelp — спасибо, буду знать.

Process + Module в kernel.h я нашел. Только почему-то то, что я видел в памяти несколько отличалось от того, что описано в структурах... Не знаю почему((
Re[3]: Методика установки хуков на API вызовы в Windows CE
От: Alexander Shargin Россия RSDN.ru
Дата: 30.11.07 10:33
Оценка:
Здравствуйте, Vovik1982, Вы писали:

V>Память на 2 части делится не только в CE

V>По поводу "не будет работать" — повторюсь — код приведенный там РАБОТАЕТ!!! Я его тестил на нескольких девайсах и на эмуляторе.

Я этого и не отрицал. Я объяснил, как обращаться к нужному адресу в памяти, не используя метод тыка.

V>Process + Module в kernel.h я нашел. Только почему-то то, что я видел в памяти несколько отличалось от того, что описано в структурах... Не знаю почему((


По моему опыту совпадает, если смотреть в правильную версию заголовков. Например, между CE4.2 и CE5.0 есть отличия. Ты смотрел именно пятёрку?
--
Я думал, ты огромный страшный Бажище,
А ты недоучка, крохотный Бажик...
Re[2]: Методика установки хуков на API вызовы в Windows CE
От: Vovik1982 Россия  
Дата: 30.11.07 10:34
Оценка:
Кстати, Вы не против, если я запостю Ваши комменты туда к себе (естессно со ссылкой)... Соберу инфу — получится более полная статья
Re[3]: Методика установки хуков на API вызовы в Windows CE
От: Alexander Shargin Россия RSDN.ru
Дата: 30.11.07 10:34
Оценка:
Здравствуйте, Vovik1982, Вы писали:

V>Кстати, Вы не против, если я запостю Ваши комменты туда к себе (естессно со ссылкой)... Соберу инфу — получится более полная статья


Конечно, без проблем.
--
Я думал, ты огромный страшный Бажище,
А ты недоучка, крохотный Бажик...
Re[4]: Методика установки хуков на API вызовы в Windows CE
От: Vovik1982 Россия  
Дата: 30.11.07 10:35
Оценка:
Здравствуйте, Alexander Shargin, Вы писали:

AS>Здравствуйте, Vovik1982, Вы писали:


V>>Память на 2 части делится не только в CE

V>>По поводу "не будет работать" — повторюсь — код приведенный там РАБОТАЕТ!!! Я его тестил на нескольких девайсах и на эмуляторе.

AS>Я этого и не отрицал. Я объяснил, как обращаться к нужному адресу в памяти, не используя метод тыка.


Сорри, понял Опять-таки СПАСИБО

V>>Process + Module в kernel.h я нашел. Только почему-то то, что я видел в памяти несколько отличалось от того, что описано в структурах... Не знаю почему((


AS>По моему опыту совпадает, если смотреть в правильную версию заголовков. Например, между CE4.2 и CE5.0 есть отличия. Ты смотрел именно пятёрку?


Да, я качал PlatformBuilder с MS. Поэтому и был удивлен несоответствию...
Re[4]: Методика установки хуков на API вызовы в Windows CE
От: Left2 Украина  
Дата: 30.11.07 11:10
Оценка:
AS>По моему опыту совпадает, если смотреть в правильную версию заголовков. Например, между CE4.2 и CE5.0 есть отличия. Ты смотрел именно пятёрку?

Насколько я понимаю, теоретически эти хидеры могут быть модифицированы при билде Windows Mobile? Т.е. ТЕОРЕТИЧЕСКИ они могут и не совпадать, поскольку при билде Windows Mobile могут быть внесены какие-то кастомизации?
... << RSDN@Home 1.2.0 alpha rev. 717>>
Re[5]: Методика установки хуков на API вызовы в Windows CE
От: Vovik1982 Россия  
Дата: 30.11.07 11:17
Оценка:
Здравствуйте, Left2, Вы писали:

AS>>По моему опыту совпадает, если смотреть в правильную версию заголовков. Например, между CE4.2 и CE5.0 есть отличия. Ты смотрел именно пятёрку?


L>Насколько я понимаю, теоретически эти хидеры могут быть модифицированы при билде Windows Mobile? Т.е. ТЕОРЕТИЧЕСКИ они могут и не совпадать, поскольку при билде Windows Mobile могут быть внесены какие-то кастомизации?


Нет. Это — работа загрузчика (loader). Он не кастомайзится. Я проверял на 5 девайсах различных изготовителей. Поменяться может на следующей версии винды.
Re[5]: Методика установки хуков на API вызовы в Windows CE
От: Alexander Shargin Россия RSDN.ru
Дата: 30.11.07 11:21
Оценка: 1 (1)
Здравствуйте, Left2, Вы писали:

L>Насколько я понимаю, теоретически эти хидеры могут быть модифицированы при билде Windows Mobile? Т.е. ТЕОРЕТИЧЕСКИ они могут и не совпадать, поскольку при билде Windows Mobile могут быть внесены какие-то кастомизации?


Да, теоретически это вполне возможно. Плюс могут быть отличия между CE5.0 и, к примеру, CE5.2. Но надо смотреть конкретно. Я не смотрел, как обстоят дела с этими структурами в Windows Mobile 6.0. Надо будет глянуть на досуге.
--
Я думал, ты огромный страшный Бажище,
А ты недоучка, крохотный Бажик...
Re[6]: Методика установки хуков на API вызовы в Windows CE
От: Vovik1982 Россия  
Дата: 30.11.07 11:23
Оценка:
Здравствуйте, Alexander Shargin, Вы писали:

AS>Здравствуйте, Left2, Вы писали:


L>>Насколько я понимаю, теоретически эти хидеры могут быть модифицированы при билде Windows Mobile? Т.е. ТЕОРЕТИЧЕСКИ они могут и не совпадать, поскольку при билде Windows Mobile могут быть внесены какие-то кастомизации?


AS>Да, теоретически это вполне возможно. Плюс могут быть отличия между CE5.0 и, к примеру, CE5.2. Но надо смотреть конкретно. Я не смотрел, как обстоят дела с этими структурами в Windows Mobile 6.0. Надо будет глянуть на досуге.


Я отлаживал это на Windows mobile 6.0 (там как раз ядро 5.2). Можно попробовать, будет ли этот код работать на пятерке...
Re[2]: Методика установки хуков на API вызовы в Windows CE
От: Аноним  
Дата: 06.12.07 09:33
Оценка:
Здравствуйте, Alexander Shargin, Вы писали:

AS>Память в CE делится на 2 части — область ядра и пользовательская область. Чтобы получить возможность работать с областью ядра (верхние 2 гигабайта), используется SetKMode


В Windows Mobile 6.0 (автор именно в нем работает) не поддерживается SetKMode. Она осталась только в Embeded CE 6.0, но и там названа obsolete.
Re[3]: Методика установки хуков на API вызовы в Windows CE
От: Alexander Shargin Россия RSDN.ru
Дата: 06.12.07 10:31
Оценка:
Здравствуйте, Аноним, Вы писали:

А>В Windows Mobile 6.0 (автор именно в нем работает) не поддерживается SetKMode. Она осталась только в Embeded CE 6.0, но и там названа obsolete.


В Windows Mobile 6.0 эта функция прекрасно работает, и если посмотреть исходный код автора, он её активно использует. Её отменили начиная с Windows CE 6.0, тогда как все существующие на сегодняшний день версии Windows Mobile основаны на Windows CE не старше 5.x.
--
Я думал, ты огромный страшный Бажище,
А ты недоучка, крохотный Бажик...
Re[4]: Методика установки хуков на API вызовы в Windows CE
От: Rud0x1 Россия  
Дата: 06.12.07 11:15
Оценка:
Здравствуйте, Alexander Shargin, Вы писали:

AS>Здравствуйте, Аноним, Вы писали:


А>>В Windows Mobile 6.0 (автор именно в нем работает) не поддерживается SetKMode. Она осталась только в Embeded CE 6.0, но и там названа obsolete.


AS>В Windows Mobile 6.0 эта функция прекрасно работает, и если посмотреть исходный код автора, он её активно использует. Её отменили начиная с Windows CE 6.0, тогда как все существующие на сегодняшний день версии Windows Mobile основаны на Windows CE не старше 5.x.


Сорри, запутала меня Микрософт нелогичными номерами версий.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.