Хотя об этом трудно рассуждать, помните, что загрузка mov al, byte es:[0xfff0]
не считывает из первой инструкции BIOS, даже если es
установлен на 0xf000
.
Первая инструкция считывается из 0xfffffff0
, при сбросе PCH, вероятно, будет также псевдонимом 0xf0000-0xfffff
- 0xffff0000-0xffffffff
, поэтому при загрузке BSP он выполнит код, который вы сбросили.
[ 1117] IIRC, AP не загружаются, если явно не проснуться.
Затем BSP продолжит инициализацию HW (исходя из дампа).
В какой-то момент он установит карту атрибутов для 0xf0000-0xfffff
для управления чтением и записью (или просто записью, а затем чтением) в память.
Конечным результатом является то, что когда процессор (поток HW) загружается, он будет выполнять код с флэш-памяти до тех пор, пока не выполнит дальний переход.
В этот момент база cs
правильно вычисляется в соответствии с правилами реального режима (почти как в нереальном режиме), и инструкция будет извлечена из 0xf0000-0xfffff
(то есть из ОЗУ).
Все это в то время как значение сегмента cs
фактически не изменилось.
BSP в какой-то момент начнет свою процедуру инициализации мультипроцессора, где он транслирует каждому (включая его самого) INIT-SIPI-SIPI, который приведет к сну для AP и ljmp 0xf000:0xfff0
для BSP.
] [+1122] Хитрость в том, что цель перехода, 0xf000:0xfff0
, не совпадает с адресом шины инструкции wbinvd
.
Там может быть что-то еще, возможно, другая процедура инициализации.
В конце инициализации BIOS может просто сбросить атрибуты 0xf0000-0xfffff
для сброса на флэш-память (поэтому возможен программный сброс), предотвращая (не преднамеренно) сброс промежуточного кода.
Это не очень эффективно, но BIOS обычно не являются шедеврами кода.
У меня недостаточно элементов, чтобы быть уверенным в том, что происходит, я хочу сказать, что ljmp 0xf000:0xfff0
и mov al, byte es:[0xfff0]
не должны читать из того же региона, в котором они находятся. [+1136] [1 124] [1 124] С учетом этого все ставки отменены.
Только правильный обратный инжиниринг скажет.
Что касается wbinvd
, я предположил в комментарии, что это может быть связано со средством «горячей» загрузки, а Питер Кордес предположил, что это может быть конкретно связано с кэшем как ОЗУ.
Это имеет смысл, я думаю, никогда не будет уверен, хотя.
Это также может быть случай культа груза, когда программист посчитал, что инструкция необходима на основе слухов. [+1135]
В Windows I все еще пошел бы жемчуг или awk. Загрузите и установите cygwin, затем используйте awk или независимо от того, что Вы знакомы с. awk были нужны функции времени для фильтрации и функций такой как getline
для навигации файла журнала.
Исключая: Исключение occurency количество - все время
$ awk '/^java.*:\W/ {print $1}' server.log* |sort|uniq -c|sort -nr
60 javax.ejb.EJBException:
45 java.rmi.ServerException:
2 javax.persistence.PersistenceException:
2 javax.ejb.ObjectNotFoundException:
1 java.lang.Error:
попробуйте (заплаченный) UltraEdit или Блокнот ++ (свободный)
Я использую Excel для парсинга файлов журнала. При использовании разграниченных вкладкой файлов журнала, это может работать отлично. Фильтрация и сортировка функций Excel предоставляют себя хорошо анализу файла журнала.
Попробуйте инструмент MS LogParser: http://www.microsoft.com/downloads/details.aspx?FamilyID=890cd06b-abf8-4c25-91b2-f8d975cf8c07&displaylang=en
В основном превращает Ваш плоский файл журнала в "базу данных", на которой можно работать подобный SQL-з¦прос¦м. Можно даже произвести в сетках, диаграммах и графиках.