#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. Большое вам спасибо