Giter VIP home page Giter VIP logo

learn-java-asm's Introduction

Learn Java ASM

Gitee license Gitee stars Gitee forks Gitee issues Gitee last commit

Github GitHub GitHub stars GitHub forks GitHub issues GitHub last commit

๐Ÿ Java ASM is an open-source java library for manipulating bytecode.

ๆœฌ้กน็›ฎๆ—จๅœจ็ณป็ปŸๅœฐไป‹็ปๅฆ‚ไฝ•ๅญฆไน Java ASM็š„็Ÿฅ่ฏ†๏ผŒไธป่ฆๆถ‰ๅŠCore APIใ€OPCODEๅ’ŒTree API็ญ‰ๅ†…ๅฎนใ€‚่‡ณไบŽๅญฆไน ็š„้ข„ๆœŸ็›ฎๆ ‡ๅฐฑๆ˜ฏ๏ผŒ็”จไธ€ไธชๅฝข่ฑก็š„่ฏดๆณ•ๆฅ่ฎฒ๏ผŒ่ฎฉๅญ—่Š‚็ ๅœจไฝ ็š„ๆ‰‹ไธญโ€œ่ทณ่ˆžโ€๏ผš็œ‹็œ‹ไฝ ็š„ๅทฆๆ‰‹๏ผŒไธ€ไธชๅฎŒๆ•ด็š„ClassFileๆ‹†่งฃๆˆไธๅŒ็ฒ’ๅบฆ็š„ๅญ—่Š‚็ ๅ†…ๅฎน๏ผ›็œ‹็œ‹ไฝ ็š„ๅณๆ‰‹๏ผŒไธๅŒ็ฒ’ๅบฆ็š„ๅญ—่Š‚็ ๅ†…ๅฎนๅˆ้‡ๆ–ฐ็ป„็ป‡ๆˆไธ€ไธชClassFile็ป“ๆž„ใ€‚

ๅฆ‚ๆžœไฝ ่ง‰ๅพ—ไปฃ็ ่ฟ˜ไธ้”™๏ผˆ ๐Ÿ’– ๏ผ‰๏ผŒๆฌข่ฟŽๅŠ ๆ˜Ÿ๏ผˆ โญ ๏ผ‰ๆ”ฏๆŒ๏ผ

           _______                                 ,        _        _        
          (,     /'                              /'/      /' `\     ' )     _)
               /'                              /' /     /'   ._)    //  _/~/' 
             /'____ .     ,   ____          ,/'  /     (____      /'/_/~ /'   
   _       /'/'    )|    /  /'    )        /`--,/           )   /' /~  /'     
 /' `    /'/'    /' |  /' /'    /'       /'    /          /'  /'     /'       
(_____,/' (___,/(___|/(__(___,/(__   (,/'     (_,(_____,/'(,/'      (_,       

1. ๅฆ‚ไฝ•ไฝฟ็”จ

1.1 ไปฃ็ ไธ‹่ฝฝ

Gitee Github

ไปŽGitee ไป“ๅบ“ไธ‹่ฝฝไปฃ็ ๏ผŒไฝฟ็”จๅฆ‚ไธ‹ๅ‘ฝไปค๏ผš

git clone https://gitee.com/lsieun/learn-java-asm

ไปŽGitHub ไป“ๅบ“ไธ‹่ฝฝไปฃ็ ๏ผŒไฝฟ็”จๅฆ‚ไธ‹ๅ‘ฝไปค๏ผš

git clone https://github.com/lsieun/learn-java-asm

1.2 ๅผ€ๅ‘็Žฏๅขƒ

Licence Git Java Apache Maven IntelliJ IDEA

ๅœจlearn-java-asm้กน็›ฎๅฝ“ไธญ๏ผŒไฝฟ็”จ็š„ASM็‰ˆๆœฌไธบ9.0ใ€‚ๅฆ‚ๆžœๆƒณไฝฟ็”จๆœ€ๆ–ฐMaven Central ็‰ˆๆœฌ๏ผŒๅฏไปฅไฟฎๆ”นpom.xmlๆ–‡ไปถไธญ็š„asm.versionๅฑžๆ€ง๏ผš

<asm.version>9.0</asm.version>

1.3. ่ฟ่กŒไปฃ็ 

ๅœจlearn-java-asm้กน็›ฎๅฝ“ไธญ๏ผŒๅŒ…ๅซmainๆ–นๆณ•็š„็ฑปไธป่ฆไฝไบŽrunๅŒ…๏ผˆsrc/main/java/run๏ผ‰ใ€‚

2. ่ฏพ็จ‹่ต„ๆ–™

51cto Bilibili lsieun.github.io

  • ใ€ŠJava ASM็ณปๅˆ—ไธ€๏ผšCore APIใ€‹
  • ใ€ŠJava ASM็ณปๅˆ—ไบŒ๏ผšOPCODEใ€‹
  • ใ€ŠJava ASM็ณปๅˆ—ไธ‰๏ผšTree APIใ€‹

2.1. ASM็š„็ป„ๆˆ้ƒจๅˆ†

ไปŽ็ป„ๆˆ็ป“ๆž„ไธŠๆฅ่ฏด๏ผŒ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                           โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

2.2. ASM่ƒฝๅคŸๅšไป€ไนˆ

ไปŽๅบ”็”จ็š„่ง’ๅบฆๆฅ่ฏด๏ผŒ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

2.3. top, nullๅ’Œvoid

ๅœจไธ‹่กจๅฝ“ไธญ๏ผŒ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              โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

3. ๆณจๆ„ไบ‹้กน

3.1. ๆทปๅŠ typoๅญ—ๅ…ธ

ๅœจ็ผ–ๅ†™ไปฃ็ ็š„่ฟ‡็จ‹ไธญ๏ผŒไผš้‡ๅˆฐไธ€ไบ›Typoๆ็คบ๏ผŒๅŽŸๅ› ๆ˜ฏinsn็ญ‰ๅ†…ๅฎนไธๆ˜ฏๅˆๆณ•็š„ๅ•่ฏใ€‚

่งฃๅ†ณๆ–นๆณ•๏ผšๅ€ŸๅŠฉไบŽIntelliJ IDEA็š„Spellchecking ็š„ๅŠŸ่ƒฝใ€‚

ๆ“ไฝœๆญฅ้ชค๏ผš

  • ็ฌฌไธ€ๆญฅ๏ผŒๅœจSettings/Preferencesๅฝ“ไธญ๏ผŒๆ‰พๅˆฐEditor | Natural Languages | Spellingไฝ็ฝฎใ€‚
  • ็ฌฌไบŒๆญฅ๏ผŒๅœจๅณไพง็š„Custom dictionariesไฝ็ฝฎ๏ผŒๆทปๅŠ custom dictionary๏ผŒๅœจlearn-java-asm้กน็›ฎๆ น็›ฎๅฝ•ไธ‹๏ผŒๆœ‰ไธ€ไธชaccepted-words.dicๆ–‡ไปถ๏ผŒๆทปๅŠ ่ฏฅๆ–‡ไปถๅณๅฏใ€‚

้…็ฝฎๅฎŒๆˆไน‹ๅŽ๏ผŒ้œ€่ฆ้‡ๆ–ฐๅฏๅŠจIntelliJ IDEAๆ‰่ƒฝ็”Ÿๆ•ˆใ€‚

3.2. ๆŸฅ็œ‹็ฌ”่ฎฐ

ๅœจ็ผ–ๅ†™ไปฃ็ ็š„่ฟ‡็จ‹ไธญ๏ผŒไธบไบ†ๆ–นไพฟ็†่งฃไปฃ็ ๏ผŒๆˆ‘ๆทปๅŠ ไบ†ไธ€ไบ›็ฌ”่ฎฐ๏ผŒๆ ผๅผๅฆ‚ไธ‹๏ผš

NOTE: ๅธŒๆœ›่ฟ™ๆ˜ฏไธ€ๆกๆœ‰็”จ็š„็ฌ”่ฎฐ

ไฝ†ๆ˜ฏ๏ผŒๅœจ้ป˜่ฎคๆƒ…ๅ†ตไธ‹๏ผŒๅฎƒๅนถไธไผš้ซ˜ไบฎๆ˜พ็คบ๏ผŒๅ› ๆญคไธๅฎนๆ˜“่ขซๅฏŸ่ง‰ๅˆฐใ€‚

่งฃๅ†ณๆ–นๆณ•๏ผšๅ€ŸๅŠฉไบŽIntelliJ IDEA็š„TODO comments ๅŠŸ่ƒฝใ€‚

ๆ“ไฝœๆญฅ้ชค๏ผš

  • ็ฌฌไธ€ๆญฅ๏ผŒๅœจSettings/Preferencesๅฝ“ไธญ๏ผŒๆ‰พๅˆฐEditor | TODOไฝ็ฝฎใ€‚
  • ็ฌฌไบŒๆญฅ๏ผŒๅœจๅณไพง็š„Patternsไฝ็ฝฎ๏ผŒๆทปๅŠ ไปฅไธ‹ๅ†…ๅฎน๏ผš
\bnote\b.*

้…็ฝฎๅฎŒๆˆไน‹ๅŽ๏ผŒ้œ€่ฆ้‡ๆ–ฐๅฏๅŠจIntelliJ IDEAๆ‰่ƒฝ็”Ÿๆ•ˆใ€‚

3.3. ๅ…ณ้—ญ่ฐƒ่ฏ•ไฟกๆฏ

ๅœจ้ป˜่ฎคๆƒ…ๅ†ตไธ‹๏ผŒ่ฟ่กŒไปปไฝ•็ฑป๏ผŒ้ƒฝไผš่พ“ๅ‡บ่ฐƒ่ฏ•ไฟกๆฏใ€‚ๅœจ่ฐƒ่ฏ•ไฟกๆฏไธญ๏ผŒไผšๅธฆๆœ‰[DEBUG]ๆ ‡่ฏ†ใ€‚

ๅฆ‚ๆžœๆƒณๅ…ณ้—ญ่ฐƒ่ฏ•ไฟกๆฏ๏ผŒๅฏไปฅไฟฎๆ”นlsieun.cst.Const็ฑป็š„DEBUGๅญ—ๆฎตๅ€ผไธบfalse๏ผˆ้ป˜่ฎคๅ€ผไธบtrue๏ผ‰๏ผš

public class Const {
    public static final boolean DEBUG = false;
}

็„ถๅŽ๏ผŒๆ‰ง่กŒmvn clean compileๅฏน็ฑป่ฟ›่กŒ้‡ๆ–ฐ็ผ–่ฏ‘๏ผš

mvn clean compile

็ญ‰ๅพ…็ผ–่ฏ‘ๅฎŒๆˆไน‹ๅŽ๏ผŒๅ†ๆฌก่ฟ่กŒ็จ‹ๅบใ€‚

4. ไบคๆตๅ้ฆˆ

  • ๅฆ‚ๆžœๆ‚จๆœ‰ๅฅฝ็š„ๆƒณๆณ•๏ผŒๅฏไปฅๆissues
  • ๅฆ‚ๆžœๆ‚จๆƒณ่ดก็Œฎไปฃ็ ๏ผŒๅฏไปฅ่ฟ›่กŒfork
  • ๅฆ‚ๆžœๆ‚จๆœ‰ๅ…ถๅฎƒ้—ฎ้ข˜๏ผŒๅฏไปฅๆทปๅŠ QQ็พค๏ผˆๅ‚่€ƒ่”็ณปๆ–นๅผ๏ผ‰

5. ่”็ณปๆ–นๅผ

wechat Tencent QQ QQ Group Javaๅญ—่Š‚็ ไบคๆตQQ็พค

6. License

This project is licensed under the MIT License. See the LICENSE file for the full license text.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.