Смешивание кода на 16 битов и на 32 бита с nasm

Добавить selenium-server-standalone-3.4.0.jar. Это работает для меня. Ссылка для скачивания

5
задан ɢʀᴜɴᴛ 10 July 2017 в 19:03
поделиться

4 ответа

Проблема оказалась этим, я не настраивал свои таблицы дескрипторов правильно. У меня был один бит, зеркально отраженный неправильно так вместо того, чтобы идти в 16-разрядный режим, я шел в 32-разрядный режим (с сегментами, которые, оказалось, имели предел одного meg).

Спасибо за предложения!

Terry

5
ответ дан 14 December 2019 в 04:52
поделиться

0x66 и 0x67 являются кодами операций, которые используются, чтобы указать, что следующий код операции должен быть интерпретирован как разрядность не по умолчанию. Строго говоря, (и согласно этой ссылке),

"Когда NASM находится в режиме BITS 16, инструкции, которые используют 32-разрядные данные, снабжаются префиксом 0x66 байтов, и у тех, которые обращаются к 32-разрядным адресам, есть 0x67 префикс. В режиме BITS 32 реверс верен: 32-разрядные инструкции не требуют никаких префиксов, тогда как для инструкций с помощью 16-разрядных данных нужен 0x66, и тем, которые работают над 16-разрядными адресами, нужен 0x67".

Это предполагает, что это - bochs это в отказе.

3
ответ дан 14 December 2019 в 04:52
поделиться

Вы не шутили об этом являющемся низким уровнем!

Вы проверили сгенерированные коды операций / операнды, чтобы удостовериться, что nasm соблюдает Ваши директивы БИТОВ правильно? Также проверьте, чтобы удостовериться, что цели перехода корректны - возможно, nasm, использует неправильные смещения.

Если это не ошибка в nasm, возможно, в bochs существует ошибка. Я не могу предположить, что люди переключаются назад на 16-разрядный режим от 32-разрядного режима очень часто больше.

0
ответ дан 14 December 2019 в 04:52
поделиться

Если Вы находитесь в реальном режиме, Ваш размер по умолчанию - неявно 16 битов, таким образом, необходимо использовать режим BITS 16. Этот путь при необходимости в 32-разрядном размере операнда, Вы добавляете 0x66 префикс, и для 32-разрядного размера адреса Вы добавляете 0x67 префикс.

Посмотрите на Intel IA-32 Software Developer's Guide, Объем 3, Глава 16 (СМЕШИВАНИЕ 16-БИТНОГО И 32-БИТНОГО КОДА; число главы могло бы измениться согласно выпуску книги):

Режим реальной адресации, виртуальные 8 086 режимов и SMM являются собственными 16-разрядными режимами.

БИТЫ 32 директивы только перепутают ассемблер при использовании его за пределами Защищенного режима или Длинного Режима.

0
ответ дан 14 December 2019 в 04:52
поделиться