Ну как же "под отладчиком", когда я запускаю SDE, а в загрузившемся в нём CMD уже отладчик? И в отладчике открываю уже свой EXE-шник. Отладчик при этом загружается медленно, т.е. эмулятор работает поверх отладчика. Но при этом вместо своей проги в отладчике я вижу PinVM. Да. Другие, которые у меня есть, вообще не работают. OllyDbg просто запускает прогу; WinDbg не грузит даже; IDA в зависимости от выбранного отладчика либо просто запускает прогу (Local Windows debugger), либо идёт по шагам, но работает неполноценно (Bochs x64 - окна консоли нет, cpuid показывает чушь), остальные не могу запустить.
Jin X, Тогда запускается под эмулятором отладчик, а не отлаживаемое апп. Эмуляция локальна в системе, в одном процессе. Что бы видеть как апп эмулируется нужно взять под отладку эмулируемое апп. Но само апп отлаживать не получится - код его не исполняется, а транслируется и эмулируется. Вот к примеру cpuid, на скрине её эмуляция - номер функции индексируется в таблице(снизу) и выбираются 4 значения и сохраняются в контекст. Красным выделены функции 0 & 7(Eax = 0/7). Для cpuid(7): A = 0, B = F3BFF7AF, C = 405F5E, D = 10. Тоесть в отладчике можно только посмотреть код/данные, там ничего не исполняется, ну кроме самого эмулятора. Не удивительно что у вас под отладчиком реальная cpuid, а не виртуальная
Отлаживал и нашёл странность. Часто используется инструкция C5 F8 77: LDS. Это просто VEX, обычная инструкция VZEROUPPER. Олли гнилой совсем отладчик, x64dbg корректно обрабатывает.
А почему так? Если я выполню CreateProcess, новый процесс же будет эмулироваться? Почему тогда отладить его не получается? Почему не эмулируется отладка этой проги? К примеру, если я запускаю какой-нибудь DOSBox (тоже эмулятор), и в нём открываю Turbo Debugger, в который загружаю прогу, я же вижу код проги под отладчиком, а не эмулятора. Или в DOSBox и Pin эмуляция принципиально по-разному устроена?
Jin X, Потому что SDE это локальный эмулятор, он инжектится в процесс, перехватывает точки входа в юзер и эмулирует инструкции в потоках, при этом окружение реальное, те например поточный стек и сервисы ядра вызываются как при исполнении. Всякие dosbox/vmware это полноценные визоры, они глобальные(эмулируют всю ОС). Поэтому вот и разница - в полноценном визоре вы увидите непосредственно cupid например в коде и её виртуальный результат, а в таких как SDE эмуляторах такой инструкции нет, так как она эмулируется в том же режиме и в том же процессе. Может и есть какой то механизм наследования, тоесть отслеживание и инжект в потомки, я видел какие то коменты с этим связанные в sde, но это нужно проверять. Но в любом случае кода эмулируемого там нет и отлаживать нечего. Хотя в описании к sde есть даже целая статья по отладке, но то видимо отладка через сурки. --- Сообщение объединено, 21 май 2019 --- Кстате мой dye работает аналогично. Только разница в типе управления cfg, sde(pin) эмулирует инструкции, у меня они исполняются напрямую в поточных буферах. Это даёт преимущество по профайлу(те возможна пакетная обработка, когда блок загружается на исполнение; при эмуляции такое невозможно). В остальном одинаково - захватываются входы в юзер, некоторые сервисы специально обрабатываются, что бы управление не вышло из под визора. Смысла в локальной эмуляции я вообще не вижу, нужен лишь адресный декодер, который транслирует EA в VA, те монитор выборки.
Jin X, Думаю вам это не нужно. Тем более есть старый и достаточный билд который легко находится, а есчо вы не разбираетесь в предмете. Так что не вижу смысла это вам давать, тем более что это используется для анализа защиты, вы сольёте сурки, потом придётся фиксить. А на отладку нужна куча времени. Те у меня нет причин вам доверять, я вас не знаю.