Если посмотреть во внутренности WOW64 эмулятора под Windows 8 64 (интересно глянуть на других виндах, нету под рукой) можно увидеть что-то занятное:
ntdll!NtClose:
77750e4c b80d000000 mov eax,0xd
77750e51 64ff15c0000000 call dword ptr fs:[000000c0]
77750e58 c20400 ret 0x4
77750e5b 90
Вместо родного sysenter'а находится нечто новое - call.
Интересно, что студийный отладчик отказывается заходить внутрь call, делая вид, что там ничего нет, windbg и diana_dasm показывают честный переход на:
776521dc ea662565773300 jmp 0033:77652566
Вот что Livekd говорит о новом мистическом селекторе 0x33:
0: kd> dg 33
P Si Gr Pr Lo
Sel Base Limit Type l ze an es ng Flags
---- ----------------- ----------------- ---------- - -- -- -- -- --------
0033 00000000`00000000 00000000`00000000 Code RE Ac 3 Nb By P Lo 000002fb
Он вроде бы RE, но почитать эту память из usermode, изменив значение ds на 33 у меня не получается.
UPD: Можно прочитать адрес 77652566 по DS селектору, там живет некий обработчик прерывания (?), заканчивающийся iretd. Судя по всему, вызывается он через некий специальный механизм, ибо получает параметры в некоторых регистрах, которые не подготавливаются в ntdll!NtClose.
No comments:
Post a Comment