๐ Java ASM is an open-source java library for manipulating bytecode.
ๆฌ้กน็ฎๆจๅจ็ณป็ปๅฐไป็ปๅฆไฝๅญฆไน Java ASM็็ฅ่ฏ๏ผไธป่ฆๆถๅCore APIใOPCODEๅTree API็ญๅ ๅฎนใ่ณไบๅญฆไน ็้ขๆ็ฎๆ ๅฐฑๆฏ๏ผ็จไธไธชๅฝข่ฑก็่ฏดๆณๆฅ่ฎฒ๏ผ่ฎฉๅญ่็ ๅจไฝ ็ๆไธญโ่ทณ่โ๏ผ็็ไฝ ็ๅทฆๆ๏ผไธไธชๅฎๆด็ClassFileๆ่งฃๆไธๅ็ฒๅบฆ็ๅญ่็ ๅ ๅฎน๏ผ็็ไฝ ็ๅณๆ๏ผไธๅ็ฒๅบฆ็ๅญ่็ ๅ ๅฎนๅ้ๆฐ็ป็ปๆไธไธชClassFile็ปๆใ
ๅฆๆไฝ ่งๅพไปฃ็ ่ฟไธ้๏ผ ๐ ๏ผ๏ผๆฌข่ฟๅ ๆ๏ผ โญ ๏ผๆฏๆ๏ผ
_______ , _ _
(, /' /'/ /' `\ ' ) _)
/' /' / /' ._) // _/~/'
/'____ . , ____ ,/' / (____ /'/_/~ /'
_ /'/' )| / /' ) /`--,/ ) /' /~ /'
/' ` /'/' /' | /' /' /' /' / /' /' /'
(_____,/' (___,/(___|/(__(___,/(__ (,/' (_,(_____,/'(,/' (_,
ๅฆๆๆไปฌๅญฆไผไบJava ASMไนๅ๏ผๅฏ่ฝ่ฟๆฏ้่ฆไธไธชๅ ทไฝ็ๅบ็จๅบๆฏๆฅ่ฟ่กไฝฟ็จ๏ผ่ฟไธชๅบๆฏๅฐฑๆฏ็ฑ Java Agent ๅผๅฏ็ใ
้ฃไน๏ผJava ASMๅJava Agent่ฟไธค่ ไน้ดๆฏไปไนๅ ณ็ณปๅข๏ผ Java ASMๆฏไธไธชๆไฝๅญ่็ ็ๅทฅๅ ท๏ผtool๏ผ๏ผ่Java Agentๆไพไบไฟฎๆนๅญ่็ ็ๆบไผ๏ผopportunity๏ผใ ๆณๅ่ฟๆ ทไธไธชๅบๆฏ๏ผ ๆไธไธชJVMๆญฃๅจ่ฟ่ก๏ผ็ช็ถJava AgentๅจJVMไธๆๅผไธๆๅคง้จ๏ผJava ASM้่ฟๅคง้จๅฒ่ฟJVM้้ข๏ผๅฐฑ่ฆๅผๅงไฟฎๆนๅญ่็ ไบใ
.class --- Java ASM --- Java Agent --- JVM
ๅๆไธชๆฏๆน๏ผJava ASMๅฐฑๆฏโไธๅนๅ้้ฉฌโ๏ผ่Java Agentๅฐฑๆฏโไผฏไนโใ ๅฆๆ้ไธๅฐโไผฏไนโ๏ผๅฏ่ฝโๅ้้ฉฌโ็ๆ่ฝๅฐฑๅๆฒกไบ๏ผๆญฃๅ ไธบๆไบโไผฏไนโ๏ผโๅ้้ฉฌโๅฐฑๆไบๆฝๅฑๆ่ฝ็ๆบไผใ
ไธๆไผฏไน๏ผ็ถๅๆๅ้้ฉฌใ
ๅ้้ฉฌๅธธๆ๏ผ่ไผฏไนไธๅธธๆใ
ๆ
่ฝๆๅ้ฉฌ๏ผ็ฅ่พฑไบๅฅด้ถไบบไนๆ๏ผ้ชๆญปไบๆงฝๆฅไน้ด๏ผไธไปฅๅ้็งฐไนใ
ไปGitee ไปๅบไธ่ฝฝไปฃ็ ๏ผไฝฟ็จๅฆไธๅฝไปค๏ผ
git clone https://gitee.com/lsieun/learn-java-asm
ไปGitHub ไปๅบไธ่ฝฝไปฃ็ ๏ผไฝฟ็จๅฆไธๅฝไปค๏ผ
git clone https://github.com/lsieun/learn-java-asm
- Git
- Java 8
- Apache Maven
- IntelliJ IDEA (Ultimate or Community Edition)
ๅจlearn-java-asm
้กน็ฎๅฝไธญ๏ผไฝฟ็จ็ASM็ๆฌไธบ9.0
ใๅฆๆๆณไฝฟ็จๆๆฐ ็ๆฌ๏ผๅฏไปฅไฟฎๆนpom.xml
ๆไปถไธญ็asm.version
ๅฑๆง๏ผ
<asm.version>9.0</asm.version>
ๅจlearn-java-asm
้กน็ฎๅฝไธญ๏ผๅ
ๅซmain
ๆนๆณ็็ฑปไธป่ฆไฝไบrun
ๅ
๏ผsrc/main/java/run
๏ผใ
- ใJava ASM็ณปๅไธ๏ผCore APIใ
- ๆ็ซ ๅฐๅ๏ผ lsieun.github.io | 51CTO
- ่ง้ขๅฐๅ๏ผ 51CTO | Bilibili
- ใJava ASM็ณปๅไบ๏ผOPCODEใ
- ๆ็ซ ๅฐๅ๏ผlsieun.github.io | 51CTO
- ่ง้ขๅฐๅ๏ผ51CTO | Bilibili
- ใJava ASM็ณปๅไธ๏ผTree APIใ
- ๆ็ซ ๅฐๅ๏ผlsieun.github.io | 51CTO
- ่ง้ขๅฐๅ๏ผ51CTO | Bilibili
ไป็ปๆ็ปๆไธๆฅ่ฏด๏ผJava ASMๆCore APIๅTree APIไธค้จๅ็ปๆใ
โโโโ asm.jar
โ
โโโโ Core API โโโโโโโโโโผโโโ asm-util.jar
โ โ
โ โโโโ asm-commons.jar
Java ASM โโโโค
โ
โ โโโโ asm-tree.jar
โโโโ Tree API โโโโโโโโโโค
โโโโ asm-analysis.jar
ไปไพ่ตๅ
ณ็ณป่งๅบฆไธ่ฏด๏ผJava ASMๅฝไธญ็ๅไธช.jar
ไน้ด็ไพ่ตๅ
ณ็ณปๅฆไธ๏ผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ โโโโโโโโโดโโโโโโโโโ โ
โ util โ analysis โ commons โ
โ โโโโโโโโดโโโโโโโโโโโโโโโโโดโโโโโโโ โ
โ โ tree โ โ
โโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโค
โ core โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
ไปๅบ็จ็่งๅบฆๆฅ่ฏด๏ผJava ASMๅฏไปฅ่ฟ่กClass GenerationใClass TransformationๅClass Analysisไธไธช็ฑปๅ็ๆไฝใ
โโโโ find potential bugs
โ
โโโโ analysis โโโโโโโโโโผโโโ detect unused code
โ โ
โ โโโโ reverse engineer code
โ
Java ASM โโโโผโโโ generation
โ
โ โโโโ optimize programs
โ โ
โโโโ transformation โโโโผโโโ obfuscate programs
โ
โโโโ insert performance monitoring code
ๅจไธ่กจๅฝไธญ๏ผtopใnullๅvoidไธ่ ็ธๅฏนๅบ็่ฝฌๆขๅผ๏ผ
โโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ .class โ ASM Type โ ASM Value in Frame โ
โโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ top โ null โ BasicValue.UNINITIALIZED_VALUE โ
โโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ aconst_null โ BasicInterpreter.NULL_TYPE โ BasicValue.REFERENCE_VALUE โ
โโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ void โ Type.VOID_TYPE โ null โ
โโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
ๅจ็ผๅไปฃ็ ็่ฟ็จไธญ๏ผไผ้ๅฐไธไบTypoๆ็คบ๏ผๅๅ ๆฏinsn
็ญๅ
ๅฎนไธๆฏๅๆณ็ๅ่ฏใ
่งฃๅณๆนๆณ๏ผๅๅฉไบIntelliJ IDEA็Spellchecking ็ๅ่ฝใ
ๆไฝๆญฅ้ชค๏ผ
- ็ฌฌไธๆญฅ๏ผๅจ
Settings/Preferences
ๅฝไธญ๏ผๆพๅฐEditor | Natural Languages | Spelling
ไฝ็ฝฎใ - ็ฌฌไบๆญฅ๏ผๅจๅณไพง็Custom dictionariesไฝ็ฝฎ๏ผๆทปๅ custom dictionary๏ผๅจ
learn-java-asm
้กน็ฎๆ น็ฎๅฝไธ๏ผๆไธไธชaccepted-words.dic
ๆไปถ๏ผๆทปๅ ่ฏฅๆไปถๅณๅฏใ
้ ็ฝฎๅฎๆไนๅ๏ผ้่ฆ้ๆฐๅฏๅจIntelliJ IDEAๆ่ฝ็ๆใ
ๅจ็ผๅไปฃ็ ็่ฟ็จไธญ๏ผไธบไบๆนไพฟ็่งฃไปฃ็ ๏ผๆๆทปๅ ไบไธไบ็ฌ่ฎฐ๏ผๆ ผๅผๅฆไธ๏ผ
NOTE: ๅธๆ่ฟๆฏไธๆกๆ็จ็็ฌ่ฎฐ
ไฝๆฏ๏ผๅจ้ป่ฎคๆ ๅตไธ๏ผๅฎๅนถไธไผ้ซไบฎๆพ็คบ๏ผๅ ๆญคไธๅฎนๆ่ขซๅฏ่งๅฐใ
่งฃๅณๆนๆณ๏ผๅๅฉไบIntelliJ IDEA็TODO comments ๅ่ฝใ
ๆไฝๆญฅ้ชค๏ผ
- ็ฌฌไธๆญฅ๏ผๅจ
Settings/Preferences
ๅฝไธญ๏ผๆพๅฐEditor | TODO
ไฝ็ฝฎใ - ็ฌฌไบๆญฅ๏ผๅจๅณไพง็Patternsไฝ็ฝฎ๏ผๆทปๅ ไปฅไธๅ ๅฎน๏ผ
\bnote\b.*
้ ็ฝฎๅฎๆไนๅ๏ผ้่ฆ้ๆฐๅฏๅจIntelliJ IDEAๆ่ฝ็ๆใ
ๅจ้ป่ฎคๆ
ๅตไธ๏ผ่ฟ่กไปปไฝ็ฑป๏ผ้ฝไผ่พๅบ่ฐ่ฏไฟกๆฏใๅจ่ฐ่ฏไฟกๆฏไธญ๏ผไผๅธฆๆ[DEBUG]
ๆ ่ฏใ
ๅฆๆๆณๅ
ณ้ญ่ฐ่ฏไฟกๆฏ๏ผๅฏไปฅไฟฎๆนlsieun.cst.Const
็ฑป็DEBUG
ๅญๆฎตๅผไธบfalse
๏ผ้ป่ฎคๅผไธบtrue
๏ผ๏ผ
public class Const {
public static final boolean DEBUG = false;
}
็ถๅ๏ผๆง่กmvn clean compile
ๅฏน็ฑป่ฟ่ก้ๆฐ็ผ่ฏ๏ผ
mvn clean compile
็ญๅพ ็ผ่ฏๅฎๆไนๅ๏ผๅๆฌก่ฟ่ก็จๅบใ
- ๅฆๆๆจๆๅฅฝ็ๆณๆณ๏ผๅฏไปฅๆissues
- ๅฆๆๆจๆณ่ดก็ฎไปฃ็ ๏ผๅฏไปฅ่ฟ่กfork
- ๅฆๆๆจๆๅ ถๅฎ้ฎ้ข๏ผๅฏไปฅๆทปๅ QQ็พค๏ผๅ่่็ณปๆนๅผ๏ผ
This project is licensed under the MIT License. See the LICENSE file for the full license text.