Программа запускается при загрузке системы и работает все время. Она внедряет свою длл во все процессы в системе. Естественно (почти) в каждом процессе у нее новый базовый адрес. Известно, что во многих системах (например в офисах и тд) решается узкий круг задач и выполняется некоторый (часто небольшой) набор программ. В этих случаях длл будет загружаться во многих программах по одному и тому жу базовому адресу, но он вряд ли совпадет с идеальным, установленным мной во время компиляции. Чтобы решить эту проблему хочу записывать все адреса по которым загружается библиотека на данной машине (например в реестр) и если какому-то из них можно отдать предпочтение то изменить идеальный адрес длл на этот. А теперь, г-да знатоки, внимание - вопрос: Как из всех адресов по которым загружается библиотека выбрать наиболее подходящий? Выбрать просто наиболее часто используемый не подходит, тк если какой-то адрес использовался больше чем другие всего на 1-2 раза, то вполне возможно, что "лидер" будет меняться часто - и как результат - программе придется изменять идеальный адрес все время, что еще хуже чем релокейшоны во время загрузки модуля. Заранеее большое спасибо.
чтобы ускорить загрузку (и след-но запуск каждого(!!!) процесса в системе). а то на РIII тормозит ощутимо.
bems Проанализируй все процессы и какие виртуальные адреса у них заняты, и то что не занято, то и будет твоим базовым адресом. Можно это сделать и на автомате легко, но это будет эффективно лишь в том случае, если состав программного обеспечения на компьютере будет не очень часто изменяться, а лучше вообще никогда. После получения наилучшего значения, правишь базовый адрес DLL и внедряешь ее во все приложения.
Только плохо то, что невозможно это осуществить программно(из Ring 3) вот и получается, что игра не стоит свеч. И вообще, я не думаю, что это может существенно замедлить загрузку программ. Можещ попробовать так: Возьми максимально большое значение для Базы(т.е FFFFFFFFh - Размер твоего кода) Там насколько я помню, всегда пусто.
релокэшн тут не причем, настрой нормально тачку и не будет тормозить, у меня када еще amd k6 2 500 стоял, тачка летала с ХР и никаких тормозов не ощущалось, блин панафтыкают туда касперычей через зад настроенных и всякой нечисти, потом удивляются, что тачка колом стоит !
Примерно так я хочу сделать НО! какие виртуальные адреса не заняты определяет система во время загрузки модуля и грузит его туда. Поэтому для сбора статистики я и хочу использовать адреса которые реально использовались - получу тоже самое, но часть работы сделает винда. Проблема в том, что мне нужно как-то узнать самое эффективное значение - например если в 70% случаев использовался один и тот же адрес то он мне и нужен. Но 70% это очень оптимистично. Вопрос в АЛГОРИТМЕ выбора эффективного значения, в обработке статистики а не ее получении
Да-да, я так и понял. Поэтому задача и стоит именно так - неужно найти ЯВНОГО лидера - если его нет, то сделать ничего не получиться, и придется смириться. Если лидер был, но состав ПО изменился, то возможно есть новый адрес - и еще эффективнее старого, поэтому подсчеты наверное нужно вести в фоновом режиме все время, но применять результаты не слишком часто, вопрос - КОГДА ИМЕННО?
Возможно. Еще до внедрения ДЛЛ (при мтарте системы) изменить базу ФАЙЛА - на какую решить заранее. Опыт показывает - может и реально замедляет
Настроить тачку нельзя, я заранее не знаю, что это за тачка. Проверялось на РIII-1000, тормоза с моей программой есть - без нее ХР летает. А между тем ДЛЛ весит 36 кило, не точто бы очень много. Остальные используемые ею длл-ки грузит динамически в 1-2 процесса, а в остальных обходится одной ныты.дылылы. Так что грешить приходиться только на релокешоны.
Ой...точно. Ну тогда максимально большое из доступных значений. Ну совсем весело...=> ты и не знаешь, какой софт там зарание установлен. PS: Не это тормозит твою машину,т.е ты не там ищешь.