Можно ли выполнить 32-битный код в 64-битном процессе, переключив режим? - PullRequest
7 голосов
/ 22 февраля 2011

На этой странице http://www.x86 -64.org / pipermail / обсуждения / 2004-август / 005020.html Он сказал, что есть способ смешать 32-битный код и 64-битный код в приложении. Он предположил, что приложение является 32-битным (в режиме совместимости), а затем переключается в 64-битный режим для выполнения 64-битного кода и наоборот.

Предположим, что моя ОС 64-битная Linux, а мое приложение 64-битное. Я делаю дальний прыжок, чтобы перейти в режим совместимости и выполнить 32-битный код. Может ли он работать правильно, когда я делаю системный вызов или вызов функции?

Есть ли издержки переключения режима между режимом совместимости и 64-битным режимом? Я думаю, что одна из издержек заключается в том, что мне нужен отдельный стек для 32-разрядных и 64-разрядных систем.

Могу ли я интегрировать эту идею в JVM, может быть, я могу динамически генерировать 32-битный код в 64-битной JVM и выполнять его путем переключения режимов?

1 Ответ

1 голос
/ 23 февраля 2011

Системные вызовы с открытым кодом должны быть в порядке, поскольку ваш 32-битный код будет использовать 32-битную точку входа в ядро.

Разумеется, вызовы функций могут выполняться только для другого 32-битного кода.Это включает libc - так что ваш 32-битный код должен быть либо автономным, либо вам нужно будет предусмотреть использование функций библиотеки, которые ему необходимы.Помните, что обычно системные вызовы не вызываются напрямую - обычно вы используете обертку libc, которая будет недоступна для вашего 32-битного кода.

Конечно, есть издержки для переключения между режимами.Вам следует обратиться к документации вашего процессора, чтобы узнать, что это такое.

...