|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Мар 11, 2004 01:23:31 Трассировщик должен быть и эмулятором, т.е. RDTSC особых проблем не доставит. Т.к. код выполняется в мультизадачной системе, то в RDTSC-обвязку необходимо закладывать достаточно большие параметры, в противном случае код будет вылетать и вовсе без причин. Например, в армадилле куски RDTSC-кода сделаны именно так, хотя и там разработчики-дуболомы накрутили. Так вот, такой код обходится просто: Если опкод по EIP == опкоду RDTSC
{
eip += 2;
eax = 1;
edx = 1;
}
в этом случае я просто загоняю единицы в счетчики, эмулируя выполнение RDTSC. Можно гнать псевдослучайное число в небольшом диапазоне. Вот так: rand()%100 - от 0 до 99 Если и это недостаточно интеллектуально, то и тут можно сделать определенный прогресс - для этого уже есть заготовки кода в ядре Линукса. Основная идея проста - мы просто вычитаем то время, которое нужно нам самим. Потом подсовываем это в eax/edx трассируемой программе. Даже теоретически это необнаружимо. Кажется так и поступают VMWare/VPC, если не ошибаюсь. Что до int 1... Тут гораздо тяжелее. У меня есть пара мыслей по этому поводу, но для их реализации нужно много времени и усилий, а их у меня нет :( |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.084 |