Понимание работы invokevirtual с реальным файлом ijvm

Я пытаюсь реализовать инструкцию invokevirtual в c, и хотя я прочитал, как теоретически это работает, мне трудно понять, что происходит при чтении реального файла ijvm. В частности, пусть следующий файл ijvm:

1d ea df ad 00 01 00 00 00 00 00 04 00 00 00 10
00 00 00 00 00 00 00 1a 10 00 10 00 10 00 10 02
10 03 b6 00 00 10 02 ff 00 03 00 00 15 01 15 02
60 ac

Я так понимаю после 5 бипуш инструкций (10 00 10 00 10 00 10 02 10 03), инструкция invokevirtual называется (b6 00 00) со смещением 16 байт (0x10 читать из cPool) для метода. Однажды IRETURN называется (ac)программа должна продолжить с того места, где она находилась до вызова метода для оставшегося файла (10 02 ff), Я также понимаю, что первые 4 байта метода (00 03 00 00)предоставьте некоторую информацию о количестве параметров (00 03) и размер локальной переменной области (00 00),

Что мне неясно, так это как читать остальную часть метода. Что я понимаю, так это то, что я должен запихнуть в стек OBJREF а затем параметры метода в стек, которые в этом случае задаются равными 3, поэтому 4, включая OBJREF в целом. Но какие конкретно эти 3 параметра нужно вставить в этот файл? Являются ли результаты последующего ILOAD а также IADD операции?

Может кто-нибудь объяснить, как должен выглядеть стек прямо перед INVOKEVIRTUAL Инструкция называется а как после каждой новой инструкции из метода? Я был бы признателен, если бы вы сослались на меня и на какую-нибудь ссылку с реальным примером, подобным этому. Большое спасибо за уделенное время.

0 ответов

Другие вопросы по тегам