· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Про исключения

<< . 1 . 2 .

Посл.отвђт Сообщен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... Тут гораздо тяжелее. У меня есть пара мыслей по этому поводу, но для их реализации нужно много времени и усилий, а их у меня нет :(

<< . 1 . 2 .


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.084