GN>Угу, пришли не форум и сказали: "смотрите, какой правильный и без ошибок код, а вот компилятор у MS кривоей" . На самом деле, MSVC делает всё в рамках стандарта, а вот в коде есть попытка играться с undefined behavior (см. подпись _Winnie в тему ).
ок, убили надо было другую тему писать
GN>Базовые принципы виртуалок — вести себя в точности так же, как реальное железо. Если кто-то нашёл дыру в сквозной эмуляции, то подправят парсер опкодов, и будут эту команду эмулировать софтверно, что бы она возвращала то, что нужно.
imho если бы они полностью эмулировали все железо то винда бы грузилась неделю (кажется http://sourceforge.net/projects/bochs так делает), насколько хватает моих скромных знаний в accelerated режиме, функции виртуалок заключаться в изоляции от host OS и прозрачной обработке всех исключений, а ring3 код течет без задержек
GN>Немного подумав, пришёл к выводу, что Джоанна опять перемудрила с hardcoded адресами структур ядра . Этот код не всегда будет работать на вполне аппаратных Pentium IV с HT. Там 2 IDT! Причём, 2я таблица находится где-то по адресам 0xFXXXXXXX.
VMware рулит — VM->Setting->Options->Advanced->Disable acceleration обрубает Джоанину пилюлю
GN>Так что, welcome to real world .
ок, я так и озаглавил баг репорт Джоанне
cl /nologo /O1 /c /Zl /Zp1 — не работает
cl /nologo /O2 /c /Zl /Zp1 — не работает
cl /nologo /Og /c /Zl /Zp1 — не работает
cl /nologo /Ot /c /Zl /Zp1 — работает
cl /nologo /Od /c /Zl /Zp1 — работает
printf("%X\n", rpill) в любом месте — работает независимо от опций компилятора
rpill is static — работает независимо от опций компилятора
это интересная проверка запускается программа под эмулятором (VirtualPC, VMWare, etc. возвращает 1) или нет (возвращает 0), под XPSP2 в юзермоде она работает нормально, защита стека там по умолчанию только для системных приложений и только при аппаратной поддержке процессора (код был взят с http://invisiblethings.org Joanna Rutkowska)
Здравствуйте, eton, Вы писали:
E>это интересная проверка запускается программа под эмулятором (VirtualPC, VMWare, etc. возвращает 1) или нет (возвращает 0), под XPSP2 в юзермоде она работает нормально,
E>защита стека там по умолчанию только для системных приложений и только при аппаратной поддержке процессора
По-моему, правильнее сказать "защита стека для всех приложений включается по умолчанию только при аппаратной поддержке процессора". Если аппаратной поддержки нет — можно включить руками.
E>(код был взят с http://invisiblethings.org Joanna Rutkowska)
2й раз вижу недовольных кодом Джоанны. Первый раз это был автор PHide , который говорил, что использование hardcoded адресов структур ядра — моветон.
E>работает если функция ((void(*)())&rpill)() прыгает на содержимое rpill в стэке, не работает если та же функция прыгает на мусор в стэке E>
?swallow_redpill@@YAHXZ PROC NEAR ; swallow_redpill
; File h:\zen\cc\test\stackexec.cpp
; Line 2
push ebp
mov ebp, esp
sub esp, 12 ; 0000000cH
; Line 4
mov BYTE PTR _rpill$[ebp], 15 ; 0000000fH
; Line 5
mov BYTE PTR _rpill$[ebp+1], 1
; Line 7
lea eax, DWORD PTR _m$[ebp]
mov BYTE PTR _rpill$[ebp+2], 13 ; 0000000dH
mov DWORD PTR _rpill$[ebp+3], eax
; Line 8
mov BYTE PTR _rpill$[ebp+7], 195 ; 000000c3H
; Line 9
lea ecx, DWORD PTR _rpill$[ebp]
call ecx
; Line 10
xor eax, eax
mov al, BYTE PTR _m$[ebp+5]
mov dl, 208 ; 000000d0H
cmp dl, al
sbb eax, eax
neg eax
; Line 11
mov esp, ebp
pop ebp
ret 0
?swallow_redpill@@YAHXZ ENDP; swallow_redpill
Не самый лучший образец кода, поэтому я бы просто переписал всё на __asm.
PS: Точнее — забил бы. Завтра эту дыру в виртуалках всё равно закроют .
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
GN>2й раз вижу недовольных кодом Джоанны. Первый раз это был автор PHide , который говорил, что использование hardcoded адресов структур ядра — моветон.
почему же, я доволен
GN>PS: Точнее — забил бы. Завтра эту дыру в виртуалках всё равно закроют .
вряд ли, так как затрагивает базовые принципы виртуальных машин, поэтому и названо так матрично претенциозно swallow_redpill()
Здравствуйте, eton, Вы писали:
GN>>2й раз вижу недовольных кодом Джоанны. Первый раз это был автор PHide , который говорил, что использование hardcoded адресов структур ядра — моветон. E>почему же, я доволен
Угу, пришли не форум и сказали: "смотрите, какой правильный и без ошибок код, а вот компилятор у MS кривоей" . На самом деле, MSVC делает всё в рамках стандарта, а вот в коде есть попытка играться с undefined behavior (см. подпись _Winnie в тему ).
GN>>PS: Точнее — забил бы. Завтра эту дыру в виртуалках всё равно закроют . E>вряд ли, так как затрагивает базовые принципы виртуальных машин
Базовые принципы виртуалок — вести себя в точности так же, как реальное железо. Если кто-то нашёл дыру в сквозной эмуляции, то подправят парсер опкодов, и будут эту команду эмулировать софтверно, что бы она возвращала то, что нужно.
E>поэтому и названо так матрично претенциозно swallow_redpill()
Немного подумав, пришёл к выводу, что Джоанна опять перемудрила с hardcoded адресами структур ядра . Этот код не всегда будет работать на вполне аппаратных Pentium IV с HT. Там 2 IDT! Причём, 2я таблица находится где-то по адресам 0xFXXXXXXX.
Так что, welcome to real world .
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Здравствуйте, eton, Вы писали:
E>в accelerated режиме, функции виртуалок заключаться в изоляции от host OS и прозрачной обработке всех исключений, а ring3 код течет без задержек
На сколько мне известно, ring3 код парсится перед выполнением, и непосредственно выполняются только безопасные с точки зрения VM места.
GN>>Так что, welcome to real world . E>ок, я так и озаглавил баг репорт Джоанне
Хотя это скорее не багрепорт, а инфа о design flow.
ЗЫ: Что-то я сам не догадался написать, может эта умная девушка ещё и красивая , вместе можно горы свернуть .
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Мда, я старый деревенский чурбан меньше всего ожидал увидеть ссыку с главной страницы сайта . Видимо гугл плохо на мозги влияет, мы не ищем лёгких путей (с) .
Оказывается, есть ещё:
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth