Decompiling Java using staged encapsulation
The paper presents an approach to program structuring for use in decompiling Java bytecode to Java source. The structuring approach uses three intermediate representations: (1) a list of typed, aggregated statements with an associated exception table, (2) a control flow graph, and (3) a structure en...
Saved in:
| Published in | Proceedings Eighth Working Conference on Reverse Engineering pp. 368 - 374 |
|---|---|
| Main Authors | , |
| Format | Conference Proceeding |
| Language | English |
| Published |
IEEE
2001
|
| Subjects | |
| Online Access | Get full text |
| ISBN | 0769513034 9780769513034 |
| ISSN | 1095-1350 |
| DOI | 10.1109/WCRE.2001.957845 |
Cover
| Abstract | The paper presents an approach to program structuring for use in decompiling Java bytecode to Java source. The structuring approach uses three intermediate representations: (1) a list of typed, aggregated statements with an associated exception table, (2) a control flow graph, and (3) a structure encapsulation tree. The approach works in six distinct stages, with each stage focusing on a specific family of Java constructs, and each stage contributing more detail to the structure encapsulation tree. After completion of all stages the structure encapsulation tree contains enough information to allow a simple extraction of a structured Java program. The approach targets general Java bytecode including bytecode that may be the result of front-ends for languages other than Java, and also bytecode that has been produced by a bytecode optimizer. Thus, the techniques have been designed to work for bytecode that may not exhibit the typical structured patterns of bytecode produced by a standard Java compiler. The structuring techniques have been implemented as part of the Dava decompiler which has been built using the Soot framework. |
|---|---|
| AbstractList | The paper presents an approach to program structuring for use in decompiling Java bytecode to Java source. The structuring approach uses three intermediate representations: (1) a list of typed, aggregated statements with an associated exception table, (2) a control flow graph, and (3) a structure encapsulation tree. The approach works in six distinct stages, with each stage focusing on a specific family of Java constructs, and each stage contributing more detail to the structure encapsulation tree. After completion of all stages the structure encapsulation tree contains enough information to allow a simple extraction of a structured Java program. The approach targets general Java bytecode including bytecode that may be the result of front-ends for languages other than Java, and also bytecode that has been produced by a bytecode optimizer. Thus, the techniques have been designed to work for bytecode that may not exhibit the typical structured patterns of bytecode produced by a standard Java compiler. The structuring techniques have been implemented as part of the Dava decompiler which has been built using the Soot framework. |
| Author | Hendren, L. Miecznikowski, J. |
| Author_xml | – sequence: 1 givenname: J. surname: Miecznikowski fullname: Miecznikowski, J. organization: Sch. of Comput. Sci., McGill Univ., Montreal, Que., Canada – sequence: 2 givenname: L. surname: Hendren fullname: Hendren, L. |
| BookMark | eNotj0FLw0AUhBesYFO9i6fcJel72d0ke5TYqqUgiOKxvOy-lJU0Cd1U8N8bqaeZgY9hJhKzru9YiFuEFBHM8rN6W6UZAKZGF6XSFyKCIjcaJUg1E_OJ0QlKDVciCuELIANpYC7uH9n2h8G3vtvHG_qm-BT-bBhpzy7mztIQTi2Nvu-uxWVDbeCbf12Ij_XqvXpOtq9PL9XDNvEIakxKMgSQoyVpNGW5sqzcNANKcoUzzuRgUQE7zOQUWENTY83UGJBY5ywX4u7c65l5Nxz9gY4_u_Mv-Qu6_EKk |
| ContentType | Conference Proceeding |
| DBID | 6IE 6IL CBEJK RIE RIL |
| DOI | 10.1109/WCRE.2001.957845 |
| DatabaseName | IEEE Electronic Library (IEL) Conference Proceedings IEEE Xplore POP ALL IEEE Xplore All Conference Proceedings IEEE Electronic Library (IEL) IEEE Proceedings Order Plans (POP All) 1998-Present |
| DatabaseTitleList | |
| Database_xml | – sequence: 1 dbid: RIE name: IEEE Electronic Library (IEL) url: https://proxy.k.utb.cz/login?url=https://ieeexplore.ieee.org/ sourceTypes: Publisher |
| DeliveryMethod | fulltext_linktorsrc |
| Discipline | Engineering Computer Science |
| EndPage | 374 |
| ExternalDocumentID | 957845 |
| GroupedDBID | 23M 29P 6IE 6IF 6IH 6IK 6IL 6IN AAJGR AAWTH ADZIZ ALMA_UNASSIGNED_HOLDINGS BEFXN BFFAM BGNUA BKEBE BPEOZ CBEJK CHZPO IEGSK IPLJI M43 OCL RIE RIL RNS |
| ID | FETCH-LOGICAL-i104t-8a9a0061ca395a264ce4d30308ad7d9d960c140ed123d96e50fb1beaf9031b6e3 |
| IEDL.DBID | RIE |
| ISBN | 0769513034 9780769513034 |
| ISSN | 1095-1350 |
| IngestDate | Tue Aug 26 17:33:02 EDT 2025 |
| IsPeerReviewed | false |
| IsScholarly | true |
| Language | English |
| LinkModel | DirectLink |
| MergedId | FETCHMERGED-LOGICAL-i104t-8a9a0061ca395a264ce4d30308ad7d9d960c140ed123d96e50fb1beaf9031b6e3 |
| PageCount | 7 |
| ParticipantIDs | ieee_primary_957845 |
| PublicationCentury | 2000 |
| PublicationDate | 20010000 |
| PublicationDateYYYYMMDD | 2001-01-01 |
| PublicationDate_xml | – year: 2001 text: 20010000 |
| PublicationDecade | 2000 |
| PublicationTitle | Proceedings Eighth Working Conference on Reverse Engineering |
| PublicationTitleAbbrev | WCRE |
| PublicationYear | 2001 |
| Publisher | IEEE |
| Publisher_xml | – name: IEEE |
| SSID | ssj0020390 ssj0000396114 |
| Score | 1.5368432 |
| Snippet | The paper presents an approach to program structuring for use in decompiling Java bytecode to Java source. The structuring approach uses three intermediate... |
| SourceID | ieee |
| SourceType | Publisher |
| StartPage | 368 |
| SubjectTerms | Computer science Constraint optimization Data mining Design optimization Encapsulation High level languages Java Pattern matching Tree graphs Visualization |
| Title | Decompiling Java using staged encapsulation |
| URI | https://ieeexplore.ieee.org/document/957845 |
| hasFullText | 1 |
| inHoldings | 1 |
| isFullTextHit | |
| isPrint | |
| link | http://utb.summon.serialssolutions.com/2.0.0/link/0/eLvHCXMwjV1NS8NAEF1sT3qp1orf7MHrpgnZTbLn0lIKiojF3srs7qQUoRVNPfjrnc2m9QMPQg6ZQAjZTWbe2515w9gNIMhCKhAIkPgWZk5oCrTCZCZVBZYSrC9wvr3LxlM5malZo7Nd18IgYp18hpE_rffy3dpu_FJZX9PnJVWLtfIiC6Vau-WUONVZ4iNNw7XIDkIEWokkVXFg7AQnyGXLRnhnZ2-3L2Pdfxo8DD1rTKLwsB9NV-qYM-qEYu63WqrQp5o8R5vKRPbjl5DjP1_nkPW-ivv4_S5sHbE9XHVZZ9vdgTc_e5cdfJMqPGbkmHz2-dJXr_MJvAP3GfMLTuBygY7TLUB8OyTW9dh0NHwcjEXTaEEsiY1VogANHstYSLUCgkgWpUu9kg243GlHLMcSEUNHYY4MVHFpEoNQanIJJsP0hLVX6xWeMm7LBBygyYjIyTy24KRzsbMuJhify_KMdf1AzF-ClsY8jMH5n1cv2H7I-PLHJWtXrxu8IghQmet68j8BZaaqDw |
| linkProvider | IEEE |
| linkToHtml | http://utb.summon.serialssolutions.com/2.0.0/link/0/eLvHCXMwjV1NT8JAEN0oHtQLihi_7cHrljbdLeyZQFCBGAORG5ndnRJiAkaLB3-9s92CH_Fg0kNnk6bpZjvz3u7MG8ZuAEG0hASOALFrYWa5okDLdaoT2cJMgHEFzoNh2huLu4mclDrbRS0MIhbJZxi62-Is3y7Nym2VNRQtLyG32Y4UQkhfrLXZUIkSlcYu1pRsi2wvRaAkjxMZec5OgIKctiildzb2-gAzUo2n9mPH8cY49K_70XaliDrdqi_nfivECl2yyXO4ynVoPn5JOf7zgw5Y_au8L3jYBK5DtoWLGquu-zsE5e9eY_vfxAqPGLkml38-d_XrwR28Q-By5mcBwcsZ2oAeAWLcPrWuzsbdzqjd42WrBT4nPpbzFihwaMZAoiQQSDIobOK0bMA2rbLEcwxRMbQU6MhAGWU61giZIqegU0yOWWWxXOAJC0wWgwXUKVE50YwMWGFtZI2NCMg3RXbKam4ipi9eTWPq5-Dsz9FrttsbDfrT_u3w_pzt-fwvd12wSv66wksCBLm-KhbCJ4aVrVw |
| openUrl | ctx_ver=Z39.88-2004&ctx_enc=info%3Aofi%2Fenc%3AUTF-8&rfr_id=info%3Asid%2Fsummon.serialssolutions.com&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=proceeding&rft.title=Proceedings+Eighth+Working+Conference+on+Reverse+Engineering&rft.atitle=Decompiling+Java+using+staged+encapsulation&rft.au=Miecznikowski%2C+J.&rft.au=Hendren%2C+L.&rft.date=2001-01-01&rft.pub=IEEE&rft.isbn=9780769513034&rft.issn=1095-1350&rft.spage=368&rft.epage=374&rft_id=info:doi/10.1109%2FWCRE.2001.957845&rft.externalDocID=957845 |
| thumbnail_l | http://covers-cdn.summon.serialssolutions.com/index.aspx?isbn=/lc.gif&issn=1095-1350&client=summon |
| thumbnail_m | http://covers-cdn.summon.serialssolutions.com/index.aspx?isbn=/mc.gif&issn=1095-1350&client=summon |
| thumbnail_s | http://covers-cdn.summon.serialssolutions.com/index.aspx?isbn=/sc.gif&issn=1095-1350&client=summon |