Вопрос

Как мне переименовать вещи, используя BEL? Пока что я делаю, это проходить через каждый метод в классе и создать новую постоянную намандюпющую константу в постоянном бассейне, то я заменил старую постоянную Наменюндыпэ на этом

int nameRef = cpg.addNameAndType(newName, m.getSignature());
cpg.setConstant(m.getNameIndex(), cpg.getConstant(nameRef));

Похоже, это должно работать, но мой декомпилятор говорит мне, что постоянный бассейн коррумпирован после этого. Я упускаю шаг или что-то?

Это было полезно?

Решение

Вы предполагаете, что ConstantPoolGen это просто таблица показателей и ценностей. Но я верю, что на самом деле он имеет гораздо более сложную внутреннюю структуру. Глядя на то ConstantPoolGen Метод, ясно, что он также имеет ссылки на MethodGen Объекты, которые могут или не обновляться, когда вы запускаете свой код.

Я советую вам не манипулировать постоянным пулом напрямую, но чтобы получить каждый метод класса (как MethodGen объект) и используйте метод setName(). Отказ Постоянный пул будет обновлен автоматически.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top