라이브러리를 개발 중이며 런타임에 내 객체의 메소드 중 일부에 추가 코드를 추가해야합니다. 여기에는 두 가지 점이 있습니다. 우선, 내가 여분의 코드를 추가하고 싶었던 프로그램은 어떤 다른 사람에 의해 전에 쓰여지고, 나는 그것을 편집하고 싶지 않다. 둘째, 제 작품은 메소드를 호출하기 전에 aspect를 추가하는 것과 매우 비슷합니다. 인터넷에서 검색하고
나는 ASM을 사용을 .class 파일에 정적 최종 필드를 추가하려면, 소스 파일은 public class Example {
public Example(int code) {
this.code = code;
}
public int getCode() {
return code;
}
priva
다음은 몇 가지 코드입니다. static synchronized void q(ua paramua, int paramInt) {
try {
if (d) { if (paramInt > -16711936);
return; }
if (q * 514194583 > 0) { if (paramInt > -16711936);
abf localabf
ASM 4 사용. 다른 언어에서 바이트 코드를 생성 중입니다. 그것은 다음과 같은 것을 만들어 내고 있지만, 무슨 일이 일어나고 있는지 명확하지 않습니다. 내 생각 엔 try/catch 블록이 스택을 방해하고있는 것 같습니다. 첫 번째 두 줄은 Lambda2를로드하고 있습니다. Lambda2는 맨 끝에 스택에서 가장 깊은 항목이 될 필요가 있습니다. 그러나
글쎄, ASM4 바이트 코드 라이브러리에서 PDF 튜토리얼/문서/책 (읽으십시오)을 읽었습니다. 나는 예제를 시험해보고 나가서, 읽음으로써, 실제로 코드를 타이프하고, 실행하고, 결과물로부터 학습하면서 배웠다. 나는이 부분을 건너 온 : 나는 슈퍼에 전달하는 것을 파악하지 못할 http://download.forge.objectweb.org/asm/asm4
저는 ASM 4를 사용하여 일부 클래스를 즉시 생성합니다. 예외 처리를위한 코드를 생성 할 때까지는 모든 것이 아주 잘 진행되었습니다. 생성 된 바이트 코드는 맨 아래에 있습니다. 여기 java.lang.VerifyError: Instruction type does not match stack map in method some.eval.ToEvaluate$
내 asm 코드를 간소화하고 싶습니다. 지금까지 Eclipse에서 바이트 코드 개요로 코드 작성 방법을 배우고 있습니다. 디버그 정보가있는 바이트 코드 만 볼 수 있기 때문에 안전하게 제거 할 수있는 항목을 알지 못하고 가능한 모든 사례를 직접 테스트 할 수있는 지식이있는 사람이 빠른 대답을 선호합니다. 이러한 가정은 사실입니까? 심지어 visitLabel
그래서 여기 내가 ASM의 클래스 검증을 사용하여 확인하기 위해 노력하고 바이트 코드의 조각이다 org/apache/xerces/impl/io/UTF8Reader 클래스의 일부입니다. 내가 ASM에서 제공하는 클래스의 검증을 통해이 클래스의 바이트 코드를 실행하면 이제, 나는 다음과 같은 결과를 얻을 : org.objectweb.asm.tree.analys
invokevirtual 작업을 호출 한 객체의 이름 (Objectname @ object_id 형식)을 알아야합니다. MethodInsnNode 객체 만 주어진다면 가능합니까? 나는 그것이 지역 변수에 인덱스 0으로 저장된다는 것을 알고 있지만 그것을 얻는 방법을 모른다.
수입이 어떤 수입을 가지고 있는지 알아낼 방법이 있습니까? this 질문에 : 존 소총은 당신이 사용하는 반사를 할 수 있지만, 컴파일 된 코드 내에서 사용되는 모든 종류를 찾으려면, 약간 다른 문제입니다 할 수 있다고 말한다. BCEL을 바이트 코드 분석 f}으로보고 싶을 수 있습니다. 이것이 내가하는 방법을 알고 싶습니다.