Построение блоков обработки исключений при декомпиляции Java-байткода

Построение блоков обработки исключений при декомпиляции Java-байткода

Язык статьи
Русский
Аннотация
Задача декомпиляции Java-байткода состоит в построении исходного кода на языке Java, эквивалентного данному байткоду. Байткод — линейная программа с условными и безусловными переходами, а язык Java содержит структуры управления, который образуют иерархию в исходном коде. Эту иерархию необходимо восстанавливать при декомпиляции, в частности, необходимо восстановить блоки обработки исключений try-catch-finally. В проекте Excelsior RVM (виртуальной машины Java со статическим компилятором) байткод декомпилируется для проведения оптимизирующих преобразований. При построении блоков обработки исключений декомпилятор системы Excelsior RVM полагает, что байткод был получен путем компиляции исходного кода стандартным компилятором языка Java, и пытается совершить обратное преобразование. Иногда это не удается для байткода, полученного другими инструментами. В данной работе предложен алгоритм декомпиляции, восстанавливающий блоки обработки исключений из произвольного корректного байткода. Этот алгоритм реализован, интегрирован в систему Excelsior RVM и протестирован на реальных приложениях.
DOI
10.31144/si.2307-6410.2013.n2.p1-22
УДК
Страницы
1-22
Файл
Номер