eXeL@B —› Программирование —› Неполучается поставить HWBP на ACCESS. |
Посл.ответ | Сообщение |
|
Создано: 22 марта 2012 21:22 · Поправил: Skino · Личное сообщение · #1 На EXECUTE пожалуйста, всё работает должным образом. В ином же случает, HWBP срабатывает только когда обращаются к памяти из того же потока, где были поставлены сами HWBP. Вот небольшой пример кода: Code:
Объясните дураку что не так. Пробывал и с локальными и глобальными - без толку. |
|
Создано: 22 марта 2012 21:36 · Поправил: SReg · Личное сообщение · #2 Code:
| Сообщение посчитали полезным: Skino |
|
Создано: 22 марта 2012 23:00 · Личное сообщение · #3 Обновил первый пост, переделал функцию по твоему подобию, но всё равно не фурычит... Вот дэфайны на всякий... Code:
|
|
Создано: 22 марта 2012 23:19 · Поправил: SReg · Личное сообщение · #4 Skino да все там работает Code:
Code:
|
|
Создано: 23 марта 2012 01:31 · Поправил: Skino · Личное сообщение · #5 |
|
Создано: 23 марта 2012 08:17 · Поправил: Veliant · Личное сообщение · #6 |
|
Создано: 23 марта 2012 11:14 · Личное сообщение · #7 Skino пишет: Твой код тоже не работает код рабочий!!! Skino пишет: есть ли программа или способ узнать стоят ли HWBP? олей посмотреть не? попробуй включить привелегии отладчика Code:
|
|
Создано: 23 марта 2012 15:29 · Личное сообщение · #8 SReg пишет: олей посмотреть не? Скажи как я гляну. SReg пишет: попробуй включить привелегии отладчика Тоже непомогает. Расскажу что и как у меня работает. В инжектится DLL в ней создается новый поток, в нем уже: 1 - Включение привилегий отладчика. 2 - AddVectoredExceptionHandler(0x1337, HWBPPVectoredHandler). 3 - Ставится HWBP на RW байта. 4 - Циклится поток. Байт читается с левого потока. Который создается в той же DLL(только для теста). Можно и не создавать новый поток мне без разницы - лишь бы работало. |
|
Создано: 26 марта 2012 09:10 · Личное сообщение · #9 |
|
Создано: 26 марта 2012 15:04 · Личное сообщение · #10 drone пишет: - не ставить VEH в потоке (нафига?) Где я его только не ставлю. drone пишет: - не правильно обрабатываются события VEH Code:
Меседж даже не вылазиет... |
|
Создано: 26 марта 2012 22:05 · Поправил: ARCHANGEL · Личное сообщение · #11 Skino Я не понял, зачем юзать какую-то константу 0x1337 в строке Code:
Code:
Вас будет интересовать значение CALL_FIRST. Как посмотреть в ольке... Да очень просто - посмотрите drx регистры. А вообще я не пойму, что вас так удивляет. Конечно, не работает. А как оно может работать? Каждый поток имеет свой контекст, что позволяет планировщику выполнять переключение контекстов поток, замораживая один и размораживая другой. Т.е., выражаясь просто, у каждого потока есть свои значения для dr-регистров. И выставив через SetThreadContext эти значения в одном из них (потоков), вы не оказываете никакого влияния на другие. Выход - при загрузке библиотеки перечисляем все потоки, правим в них контекст, и устанавливаем свой CALLBACK в либе, который будет выполняться в контексте нового потока при создании такого в приложении, к которому инжектитесь. Естественно, этот колбэк тоже должен править контекст. Да, конечно, Байт читается с левого потока. Который создается в той же DLL(только для теста). Т.е. как я понял - последовательно вызывается CreateThread(), и нет синхронизации, т.е. второй поток может обратить к ячейке памяти раньше, чем первый установит аппаратный брейкпоинт. Используйте WaitForSingleObject и дождитесь завершения работы потока, устанавливающего аппаратники. ----- Stuck to the plan, always think that we would stand up, never ran. | Сообщение посчитали полезным: SReg, Sawyer, plutos |
|
Создано: 29 марта 2012 01:10 · Личное сообщение · #12 ARCHANGEL пишет: Выход - при загрузке библиотеки перечисляем все потоки Считывание байта происходит из новоиспеченного потока, т.е. на момент сканирования потока ещё не будет.ARCHANGEL пишет: Однако пишут там это только про регистр dr7, как же сохранить линейные адреса в dr1-dr4 Вот это мне и нужно, поставить GLOBAL (на процесс) HWBP. ARCHANGEL пишет: Т.е. как я понял - последовательно вызывается CreateThread(), и нет синхронизации, т.е. второй поток может обратить к ячейке памяти раньше, чем первый установит аппаратный брейкпоинт. Используйте WaitForSingleObject и дождитесь завершения работы потока, устанавливающего аппаратники. Для теста - это значит что байт читается постоянно, и до и после. |
|
Создано: 30 марта 2012 09:36 · Личное сообщение · #13 Skino попробуй этот код,когдато разбирался с этим,сейчас проверить работоспособность нет возможности Code:
|
|
Создано: 30 марта 2012 09:54 · Личное сообщение · #14 Skino пишет: Считывание байта происходит из новоиспеченного потока, т.е. на момент сканирования потока ещё не будет Не читаете вы до конца, там же написано:и устанавливаем свой CALLBACK в либе, который будет выполняться в контексте нового потока при создании такого в приложении, к которому инжектитесь Вот это мне и нужно, поставить GLOBAL (на процесс) HWBP. Ну, это, я думаю, уже все поняли. Для теста - это значит что байт читается постоянно, и до и после. Это как? Поток читает байт и до, и после своего создания??? ----- Stuck to the plan, always think that we would stand up, never ran. |
eXeL@B —› Программирование —› Неполучается поставить HWBP на ACCESS. |