Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 자바
- 개발
- 스프링 부트
- JPA
- Spring Boot
- 보안
- java
- Python
- db
- rabbitmq
- 웹
- 디자인 패턴
- 장고
- ORM
- Spring
- django
- bytecode
- 데이터베이스
- 자료구조
- 파이썬
- node.js
- python3
- HTTP
- 파이썬3
- BCI
- 스프링
- 스프링부트
- mysql
- 웹 개발
- 안드로이드
Archives
- Today
- Total
semtax의 개발 일지
자바 시스템 클래스 들을 ASM으로 변경하는법 본문
반응형
자바 시스템 클래스 들을 ASM으로 변경하는법
아래와 같이 자기가 직접 정의된 클래스 로더를 만들어서 수행하면 된다.
대충 순서는 다음과 같다.
- ClassLoader와 Class 클래스를 이용해서 변경하려는 클래스를 읽어 옴
- setAccessible함수를 이용해서 권한을 수정가능한 상태로 변경함
- reflection을 이용해서 ClassLoader.defineClass 을 호출하여 변경하려는 클래스에 접근
- 접근한 클래스를 변경후 반환
아래는 예제 코드이다.
private Class loadClass(byte[] b) {
// Override defineClass (as it is protected) and define the class.
Class clazz = null;
try {
ClassLoader loader = ClassLoader.getSystemClassLoader();
Class cls = Class.forName("java.lang.ClassLoader");
java.lang.reflect.Method method =
cls.getDeclaredMethod("defineClass", new Class[] {
String.class, byte[].class, int.class, int.class });
// Protected method invocation.
method.setAccessible(true);
try {
Object[] args =
new Object[] { className, b, new Integer(0), new Integer(b.length)};
clazz = (Class) method.invoke(loader, args);
} finally {
method.setAccessible(false);
}
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
return clazz;
}
출처 : Asm 공식문서 FAQ
반응형
'개발 > Java' 카테고리의 다른 글
ASM Library Guideline 챕터6 정리 (0) | 2020.01.13 |
---|---|
ASM Library Guideline 챕터 4 정리 (0) | 2020.01.10 |
ASM Library Guideline 챕터3 정리 (0) | 2020.01.10 |
ASM Library Guideline 챕터 2 정리 (0) | 2020.01.08 |
ASM Library Guideline 챕터 1 정리 (0) | 2020.01.07 |
Comments