Получить представление байт-кода локальной на сервере Nodejs c

#node.js #v8 #embedded-v8

#node.js #v8 #встроенный-v8

Вопрос:

Я немного затрудняюсь с кодовой базой nodejs v8.

Цель состоит в том, чтобы получить байт-код функции / модуля (глядя на код, они одинаковы) и разобрать его с помощью BytecodeArray::Disassemble функции, возможно, без побочных эффектов, иначе говоря, выполняя код.

Проблема в том, что не ясно, как получить байт-код в первую очередь.

Ответ №1:

(Здесь разработчик версии 8.) API версии 8 не предоставляет доступ к байт-коду функций. Это сделано намеренно, потому что байт-код является внутренней деталью реализации. Для проверки байт-кода необходимо использовать --print-bytecode флаг.

Если вы настаиваете на том, чтобы возиться с внутренними деталями, то, конечно, вы можете обойти общедоступный API и покопаться во внутренних компонентах V8. Из v8::internal::JSFunction вы можете перейти к v8::internal::SharedFunctionInfo , проверить, является ли это HasBytecodeArray() , и если да, вызвать GetBytecodeArray() на нем. Дизассемблирование байт-кода никогда не имеет побочных эффектов и никогда не выполняет байт-код. Вполне возможно, что функция не имеет байт-кода в данный момент времени — байт-код создается лениво, когда это необходимо, и выбрасывается, если он не использовался какое-то время. Если вы копнете достаточно далеко, вы также можете вмешаться в эти механизмы, но…:

Излишне говорить, что доступ к внутренним деталям полностью не поддерживается, не рекомендуется, и даже если вы заставите его работать в версии узла x.y, он может сломаться в x.(y 1), потому что это то, что означает «внутренние детали».

Комментарии:

1. Большое вам спасибо