Java ASM манипуляция байт-кодом - Как ввести в середине метода? - PullRequest
1 голос
/ 24 февраля 2020

Используя ASM, как я могу внедрить метод именно туда, куда я хочу, go?

пример:

public void exampleMethod() {
    doOneThing();
    doSomeMoreStuff();

    if (someCondition) {
        doEvenMoreThings();
    }

    callMyInjectedMethodHere(); // This call has been injected

    if (someOtherCondition) {
        doRandomStuff();
    }

    doStuff();
}

1 Ответ

3 голосов
/ 25 февраля 2020

ASM имеет посетителя и дерево API, которое позволяет вам обрабатывать инструкцию байт-кода метода по инструкции. То, что вам нужно сделать, это посетить все инструкции, в вашем случае два вызова метода, инструкцию ветвления, вызов метода и метку, которая является целью предыдущей ветви, а затем отправить дополнительную инструкцию вызова метода. Таким образом, вы можете изменить метод.

Однако обратите внимание, что тела метода обычно меняются быстрее, чем сигнатуры, и что такие инъекции имеют тенденцию быть очень fr agile. Если вы можете избежать этого, избегайте этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...