Корректно ли выполняется все 32-битное WinAPI под VirtualBox(v.4.0.8)? Я имею ввиду, соответствуют ли номера вызываемых функций(значения eax) перед вызовом sysenter/int 2e/fs:c0 в VirtualBox значениям eax в реальных ОС? Прежде всего интересует win7 32bit.
курите? Весь софт ставится отдельно, виртуалка эмулирует только железо. Отсюда очевидно, что вы туда поставите, тому и будет соответствовать.
выпиваю, но не сейчас просто программа, пользующая ядреные вызовы вместо апи иногда не работает на VirtualBox, но замечательно пашет на реальном железе. отсуда и сей вопрос. хотя дело может быть в самом виндовозе, а не в виртуалке, я поэтому и спрашиваю.
Кстати, я работая с VirtualBox наткнулся на такую штуку, что команда sidt возвращает невалидное для ОС значение. Где-то читал по этому поводу, что при выполнении этой команды в VB возвращается указатель на таблицу обработчиков исключений самой виртуалки, а не гостевой ОС. Возможно, проблемы падающего софта связаны как раз с такими командами...
Проблема в этом действительно была, но только тогда не работало на реальных машинах(с разным кол-вом CPU). Сейчас работает на любых от 1 до 4 ядерных компах, но спонтанно не пашет на VB. Правда, делать VB многоядерным я не пробовал. Главное мое подозрение состоит в том, что виндовоз, обнаружив VM, меняет для некоторых своих API номера функций, только я этого пока не обнаружил )))) поэтому и создал тему.
Некоторые инструкции могут выполняться не так как нужно из-за багов в VirtualBox. Правда разумеется они достаточно редкоиспользуемые иначе бы в VirtualBox невозможно было запустить никакую ОС.
Это да, и не только из-за багов, но я на 99% уверен что это не тот случай... Deader А вообще код в студию)
Итого я вам всем скажу, что на виртуальных машинах проги выполняются СОВЕРШЕННО ПО ДРУГОМУ, нежели на реальных осях. Код я выкладывать не буду, ибо не имею права. Но попробуйте создать, например, поток через Int2E/call fs:[C0] без уведомления crss и вы увидите, что поток прекрасно работает всех на реальных осях и не пашет на виртуалках. Сделаю в своей проге опцию для виртуалок - "включить лохосовместимость(запускать на вм)". ----------------------- зы 2-й, пример - если вы создадите процесс без zwcreateprocess(для незнающих говорю - это можно сделать) - он будет работать в реале и не будет на вм. вм - лажа.
сишники - лохи мелкомягкие, Delphi+Assembler рулит! На Delphi и Asm я сделаю вещи, которые сишникам(перекреститься 3 раза еп.т.м.) и не снились.