Как стать автором
Обновить

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

Я сейчас прочитал статью, которую вы приложили. Лично мне кажется, что официальная спецификация JVM будет более понятной, чем эта приложенная статья. По крайней мере, считаю, что она, возможно, была нацелена на людей, которые уже знают (хорошо) структуру байт-кода. Если вас просто смутило одинаковое название и тема статей, то не думаю, что это то из-за чего статью можно назвать копией. Так как у нас совершенно разные методы изложения.

Ну, раз уж вы считаете эту статью копией, то может думать о моей статье, как улучшенной версией (мне так кажется, хотя кому как. Возможно, та статья для кого-то будет понятней). Во всяком случае, советую вам прочитать обе статьи и сравнить уже их контексты, а не названия или темы статей.

Это конечно сугубо мое мнение, просто не понимаю, зачем, видя что на ресурсе уже есть статья с разбором "Hello World", делать разбор "Hello World" другими словами. Ну сделайте вы разбор программы, которая на 2 строчки больше, вопросов бы наверное не было.


Читал обе статьи. Ни в коем случае не пытаюсь Вас обидеть и уж тем более не хочу судить о том, какая лучше, так как это сугубо субъективное мнение. Контекст, как вы выразились, у этих статей как раз идентичен, а вот содержимое действительно отличается. Про копию, я не совсем корректно выразился, за что прошу меня извинить.
Статьи отличаются, но исключительно в контексте оформления. В обоих чуть более человеческое и простая для читателя трактовка документации.

Я заморочился лет 10 назад и перевел спецификацию байткода Java на формальный язык Java. Пришлось придумать несколько анатаций, с помощью которых можно описывать бинарные форматы. Далее я написал универсальный загрузчик/сериалайзер который умеет загружать бинарные файлы (.class файлы как частный случай) с использованием описания формата (читай набор java классов со специальными анатациями). К сожалению, на опкоды меня не хватило — они просто как массив байтов хронятся (или что-то типа того, уже не помню).
Итак, Java bytecode specification, выраженная на языке Java: github.com/esavin/annotate4j-classfile
Классы, которые умеют это все загружать/выгружать тут: github.com/esavin/annotate4j-core
Несколько раз пытался написать статью тут, но так и не осилил.
Примерно год назад с помощью этой библиотеки смог зареверсить бинарный формат от устройства, которое снимает суточную активность сердца (датчик Холтера вроде это называется).
А самое неприятное в спеке для меня было вот что:
All 8-byte constants take up two entries in the constant_pool table of the class
file. If a CONSTANT_Long_info or CONSTANT_Double_info structure is the entry
at index n in the constant_pool table, then the next usable entry in the table is
located at index n+2. The constant_pool index n+1 must be valid but is considered
unusable.
То есть для long и double info в constant pool используется две ячейки, причем во второй — всегда пусто.
Позже это было признано неудачным дизайнерским решением:
In retrospect, making 8-byte constants take two constant pool entries was a poor choice.
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.