![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
Townsmen |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 20.7.2011 Репутация: нет Всего: 1 |
Доброго времени суток!
Есть такое консольное приложение, оно ищет в процессе int и в результате выдает адреса найденных совпадений:
Но при тестировании приложения, оно выдает немного разное количество найденных чисел чем ArtMoney. Например: я ищу в программе "Калькулятор плюс" число 45, в результате ArtMoney нашло 7 адресов с числом 45, а єта программа 12 с числом 45. Почему такие результаты? мне кажется программа проверяет больше диапазонов адресов чем ArtMoney, или у меня неправильный алгоритм прохождения по диапазонам или неправильно использую VirtualQueryEx Это сообщение отредактировал(а) Townsmen - 8.6.2012, 09:53 |
|||
|
||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 9 Всего: 45 |
Можно попросить список найденных адресов (как программой, так и артмани)? -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
Townsmen |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 20.7.2011 Репутация: нет Всего: 1 |
я проверял адреса, приложение нашло все те самые что артмани и еще 5 адресов. Все зависит от числа которое ищем, в одних случаях все адреса одинаковые. В конце поиска программы выводятся все адреса найденные в консоль. |
|||
|
||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 9 Всего: 45 |
Я не просто так спрашиваю. Я хочу убедиться, что адреса выровнены или не выровнены по 4-х байтной границе.
Повторяю просьбу:
-------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
Townsmen |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 20.7.2011 Репутация: нет Всего: 1 |
||||
|
||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 9 Всего: 45 |
Просто показать списки можно?
А то у меня начинает складываться такое чувство, что я Вас прошу выдать военную тайну.... ![]() -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
Townsmen |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 20.7.2011 Репутация: нет Всего: 1 |
можно, просто я неправильно понял что с меня требуется... Сейчас скриншоты сделаю или текстом написать?
Добавлено через 6 минут и 59 секунд ![]() |
|||
|
||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 9 Всего: 45 |
Спасибо, так пойдёт!
Увы, на вид всё выравнено (addr % 4 даёт 0). То есть, действительно, находит больше. Было бы неплохо, если бы Вы вывели на печать значение mbi.Type для каждого найденного адреса, возможно, определилась бы какая-нибудь закономерность....
Мне кажется, это имеет смысл проверять, если mbi.State есть MEM_COMMIT. -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
GremlinProg |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
![]() а как так получилось, что одно из попаданий лежит в обеих программах в соседних 4-байтовых ячейках:
версии программы совпадают?
если проверять все адреса процесса, тогда надо сделать исключение по крайней мере для служебных диапазонов: секции и заголовки PE, в них-то искать ничего не надо я так думаю ) Добавлено через 1 минуту и 34 секунды вернее, конечно не сами секции, а заголовки этих секций -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
||||
|
|||||
Townsmen |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 20.7.2011 Репутация: нет Всего: 1 |
я даже сам незнаю почему так получилось
Если допустить что произошла ошибка в нумерации адресов, то дальше все адреса должны не совпадать, а они совпадают. Получается только 1 адрес не на своем месте чего то.
Надо будет сегодня проверить, жаль что сейчас не могу... вечером напишу результаты. |
||||||
|
|||||||
Townsmen |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 20.7.2011 Репутация: нет Всего: 1 |
Сделал еще вывод mbi.State и mbi.Type но никакой закономерности не вижу, только что mbi.State для всех адресов неизменная. Последний адрес в артмани вообще не совпал
![]() ![]() |
|||
|
||||
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 13 Всего: 85 |
Ха, ха, может быть конечно... Но прежде чем искать соломинку в "чужом глазу", неплохо бы убрать "брёвна" из "своего глаза"
Простой пример, допустим RegionSize = 256, цикл запишется так: for(t=0; t <= (256/128); ...) т.е for(t=0; t <= 2); ...) т.е цикл будет отработан 3 раза 3*128=384 (напомню, это при размере 256). Выход за пределы, как минимум. Это только самое первое "бревно", валяющеея на поверхности. ![]() Это сообщение отредактировал(а) volatile - 10.6.2012, 01:43 |
|||
|
||||
Townsmen |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 20.7.2011 Репутация: нет Всего: 1 |
Уже исправил, что еще не так? Саме больше на мой взгляд ошибок в этом участке кода:
|
|||
|
||||
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 13 Всего: 85 |
Новички почему-то любят писать сложные конструкции, наверно думают что так поступают крутые программеры. Так вот, крутые программеры, такие невменяемые конструкции не пишут. Я например, в силу своей природной тупости, не могу охватить весь этот участок мысленным взором. Зачем переменная цикла прибавляется два раза, в разных местах? Вы как автор программы, можете объясить? |
|||
|
||||
Townsmen |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 20.7.2011 Репутация: нет Всего: 1 |
Эту часть кода я взял с хабрхабра. Но он там был нерабочий и мне пришлось немного его самому переделывать (получается цикл в цикле). Если честно я немного удивлен как этот код работает, он наверное пропускает некоторые участки памяти, но то что нужно найти он находит
![]() |
|||
|
||||
volatile |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 13 Всего: 85 |
К слову, еще баг, если например будем искать строку, и граница 128 байтного блока (кстати, почему именно 128?) придется на эту строку, то он ее не найдет.
Ну а в чем тогда проблема-то, если все так замечателно? ![]()
Кстати попробуйте убрать эту часть, PAGE_WRITECOPY - это не право записи. Имхо, это копирование блока, и запись в этот откопированный блок, то есть запись в копию, которая не при делах. Во внутреннем цикле введите еще одну переменную LPBYTE temp_adr = lpAddress, (или какое вам нравиться, имя) перед этой строкой:
И ниже все lpAddress, замените на эту переменную. Потому-что нельзя менять переменную цикла, в двух местах. Это сообщение отредактировал(а) volatile - 10.6.2012, 18:01 |
||||
|
|||||
Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 16 Всего: 39 |
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Еще замечание - все адреса, где ваша программа расходится во мнениях с артмани принадлежат области данных исследуемой программы (скорее всего стеку и/или куче). А содержимое таких областей имеет тенденцию меняться со временем. Попробуйте запустить артмани и вашу программу 2 раза (по очереди)
|
|||
|
||||
Townsmen |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 20.7.2011 Репутация: нет Всего: 1 |
для строки 128 байт массив 100% не годится, там лутше сразу регионом считывать. Вы читаете мои мысли, после того как Вы написали что lpAddress прибавляю в 2 раза в цикле, то я потом немного помозговал и переделал:
и еще уберу (mbi.Protect & PAGE_WRITECOPY) Dem_max, спасибо за ссылку нужно будет разобраться в немного в коде |
||||
|
|||||
Townsmen |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 20.7.2011 Репутация: нет Всего: 1 |
Сделал изменения и программа уже более точно начала искать, уже ближе к адресам артмани. Наверное нужно переделать что бы она считывала весь регион сразу и проверяла. Смотрел http://forum.tuts4you.com/topic/16209-how-...ess/#entry81108
Вижу здесь записывают сразу регион:
А это для поиска строки может пойдет, но для поиска чисел некоректно:
|
||||
|
|||||
500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: 3 Всего: 14 |
Что то вы в дебри полезли, напомню (из умной книжки)
-------------------- |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |