Jaeha Kung

71 papers A* 9A 12B 2C 4Journal 31Unranked 12
YearRankTypeTitle / Venue / Authors
2026 J jnl
IEEE Internet Things J.
Dahoon Park, Hyungdong Park, Inguk Yeo, Jiyun Kim, Sunghyun Lee, Suhak Lee, Hyunseob Shin, Sung-Il Pae, Deliang Fan, Jaeha Kung, Kon-Woo Kwon
2026 A* conf
HPCA
Sangwoo Hwang, Donghun Lee, Jahyun Koo, Jaeha Kung
2025 J jnl
IEEE Trans. Very Large Scale Integr. Syst.
Seock-Hwan Noh, Seungpyo Lee, Banseok Shin, Sehun Park, Yongjoo Jang, Jaeha Kung
2025 A conf
ISLPED
Sangwoo Jung, Hojin Lee, Yejin Lee, Jiyong Park, Dahoon Park, Hyunseob Shin, Jong-Hyeok Yoon, Jaeha Kung
2025 C conf
ICCD
Yongjoo Jang, Sangwoo Hwang, Hojin Lee, Sangwoo Jung, Donghun Lee, Wonbo Shim, Jaeha Kung
2025 J jnl
CoRR
Yongjoo Jang, Sangwoo Hwang, Hojin Lee, Sangwoo Jung, Donghun Lee, Wonbo Shim, Jaeha Kung
2025 J jnl
CoRR
Seock-Hwan Noh, Hoyeon Lee, Junkyum Kim, Junsu Im, Jay H. Park, Sungjin Lee, Sam H. Noh, Yeseong Kim, Jaeha Kung
2025 A conf
DATE
Hyunseob Shin, Jaeha Kung
2025 A* conf
ISCA
Seock-Hwan Noh, Banseok Shin, Jeik Choi, Seungpyo Lee, Jaeha Kung, Yeseong Kim
2025 J jnl
CoRR
Seock-Hwan Noh, Banseok Shin, Jeik Choi, Seungpyo Lee, Jaeha Kung, Yeseong Kim
2025 A conf
ISLPED
Seock-Hwan Noh, Sungju Kim, Seohyun Kim, Daehoon Kim, Jaeha Kung, Yeseong Kim
2025 J jnl
CoRR
Seock-Hwan Noh, Sungju Kim, Seohyun Kim, Daehoon Kim, Jaeha Kung, Yeseong Kim
2025 J jnl
IEEE Trans. Emerg. Top. Comput.
Sangwoo Hwang, Jaeha Kung
2025 A conf
ISLPED
Jiyong Park, Dahoon Park, Yeeun Hong, Jaeha Kung
2025 conf
ASP-DAC
Gunil Kang, Dahoon Park, Hojin Lee, Sangwoo Jung, Jiyong Park, Jung Gyu Min, Youngjoo Lee, Jaeha Kung
2024 conf
CICC
Jeongyoon Wie, Sangwoo Jung, Taeryoung Seol, Geunha Kim, Sehwan Lee, Homin Jang, Samhwan Kim, YeonJae Shin, Jae Eun Jang, Jaeha Kung, Arup K. George, Junghyup Lee
2024 conf
A-SSCC
Dong-gu Choi, Jaehyun Lee, Jahyun Koo, Woo Kyoung Han, Dahoon Park, Jaeha Kung, Junghyup Lee, Jong-Hyeok Yoon
2024 J jnl
IEEE Trans. Circuits Syst. I Regul. Pap.
Sangwoo Jung, Jaehyun Lee, Dahoon Park, Youngjoo Lee, Jong-Hyeok Yoon, Jaeha Kung
2024 conf
ICEIC
Seonghun Jeong, Jooyeon Lee, Jaeha Kung
2024 C conf
ISCAS
Jooyeon Lee, Donghun Lee, Jaeha Kung
2024 conf
ICTC
Hyunseob Shin, Yejin Lee, Jaeha Kung
2024 conf
ASPLOS (3)
Jungwoo Kim, Seonggyun Oh, Jaeha Kung, Yeseong Kim, Sungjin Lee
2024 A* conf
DAC
Jahyun Koo, Dahoon Park, Sangwoo Jung, Jaeha Kung
2024 J jnl
CoRR
Jahyun Koo, Dahoon Park, Sangwoo Jung, Jaeha Kung
2024 J jnl
CoRR
Sangwoo Hwang, Jaeha Kung
2024 J jnl
IEEE Access
Matthew Bodenham, Jaeha Kung
2024 A* conf
NeurIPS
Sangwoo Hwang, Seunghyun Lee, Dahoon Park, Donghun Lee, Jaeha Kung
2023 conf
ISSCC
Taeryoung Seol, Sehwan Lee, Geunha Kim, Samhwan Kim, Euiseong Kim, Seungyeob Baik, Jaeha Kung, Ji-Woong Choi, Arup K. George, Junghyup Lee
2023 J jnl
CoRR
Seock-Hwan Noh, Seungpyo Lee, Banseok Shin, Sehun Park, Yongjoo Jang, Jaeha Kung
2023 A* conf
DAC
Seunghyun Lee, Jeik Choi, Seock-Hwan Noh, Jahyun Koo, Jaeha Kung
2023 J jnl
IEEE Trans. Computers
Seock-Hwan Noh, Jahyun Koo, Seunghyun Lee, Jongse Park, Jaeha Kung
2023 conf
NEWCAS
Banseok Shin, Sehun Park, Jaeha Kung
2023 J jnl
IEEE Trans. Circuits Syst. II Express Briefs
Gunho Park, Jaeha Kung, Youngjoo Lee
2022 J jnl
IEEE Trans. Circuits Syst. I Regul. Pap.
Arup K. George, Wooyoon Shim, Jaeha Kung, Ji-Hoon Kim, Minkyu Je, Junghyup Lee
2022 J jnl
IEEE Trans. Emerg. Top. Comput.
Sehun Park, Jae-Joon Kim, Jaeha Kung
2022 conf
AICAS
Sangwoo Jung, Jaehyun Lee, Huiseong Noh, Jong-Hyeok Yoon, Jaeha Kung
2022 J jnl
CoRR
Seock-Hwan Noh, Jahyun Koo, Seunghyun Lee, Jongse Park, Jaeha Kung
2022 J jnl
ACM Trans. Design Autom. Electr. Syst.
Jooyeon Lee, Junsang Park, Seunghyun Lee, Jaeha Kung
2022 C conf
ICCD
Seock-Hwan Noh, Junsang Park, Dahoon Park, Jahyun Koo, Jeik Choi, Jaeha Kung
2022 J jnl
CoRR
Seock-Hwan Noh, Junsang Park, Dahoon Park, Jahyun Koo, Jeik Choi, Jaeha Kung
2022 J jnl
IEEE Comput. Archit. Lett.
Sejin Kim, Jungwoo Kim, Yongjoo Jang, Jaeha Kung, Sungjin Lee
2021 C conf
ISCAS
Sangwoo Hwang, Junghyup Lee, Jaeha Kung
2021 J jnl
IEEE Comput. Archit. Lett.
Yongjoo Jang, Sejin Kim, Daehoon Kim, Sungjin Lee, Jaeha Kung
2021 J jnl
IEEE Trans. Circuits Syst. I Regul. Pap.
Gunho Park, Jaeha Kung, Youngjoo Lee
2021 J jnl
ACM Trans. Design Autom. Electr. Syst.
Naebeom Park, Sungju Ryu, Jaeha Kung, Jae-Joon Kim
2021 A conf
BMVC
Dahoon Park, Kon-Woo Kwon, Sunghoon Im, Jaeha Kung
2021 J jnl
CoRR
Dahoon Park, Kon-Woo Kwon, Sunghoon Im, Jaeha Kung
2020 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Junki Park, Wooseok Yi, Daehyun Ahn, Jaeha Kung, Jae-Joon Kim
2020 J jnl
IEEE Access
Minwoo Jang, Seungkyu Lee, Jaeha Kung, Daehoon Kim
2020 J jnl
IEEE Comput. Archit. Lett.
Minsub Kim, Jaeha Kung, Sungjin Lee
2019 conf
ISOCC
Sangwoo Jung, Jaeha Kung
2019 A* conf
DAC
Jaeha Kung, Junki Park, Sehun Park, Jae-Joon Kim
2019 A conf
ISLPED
Junseo Jo, Jaeha Kung, Sunggu Lee, Youngjoo Lee
2019 A conf
ISLPED
Sangwoo Jung, Seungsik Moon, Youngjoo Lee, Jaeha Kung
2018 J jnl
IEEE Trans. Very Large Scale Integr. Syst.
Jaeha Kung, Duckhwan Kim, Saibal Mukhopadhyay
2018 J jnl
J. Signal Process. Syst.
Jaeha Kung, David C. Zhang, Gooitzen S. van der Wal, Sek M. Chai, Saibal Mukhopadhyay
2018 A conf
DATE
Junki Park, Jaeha Kung, Wooseok Yi, Jae-Joon Kim
2018 A conf
DATE
Saibal Mukhopadhyay, Marilyn Wolf, Mohammed Faisal Amir, Evan Gebhardt, Jong Hwan Ko, Jaeha Kung, Burhan Ahmad Musassar
2017 J jnl
IEEE Trans. Emerg. Top. Comput.
Duckhwan Kim, Jaeha Kung, Saibal Mukhopadhyay
2017 A* conf
ISCA
Jaeha Kung, Yun Long, Duckhwan Kim, Saibal Mukhopadhyay
2017 A conf
DATE
Jong Hwan Ko, Duckhwan Kim, Taesik Na, Jaeha Kung, Saibal Mukhopadhyay
2017
Jaeha Kung
2017 conf
MWSCAS
Jong Hwan Ko, Yun Long, Mohammad Faisal Amir, Duckhwan Kim, Jaeha Kung, Taesik Na, Amit Ranjan Trivedi, Saibal Mukhopadhyay
2017 B conf
IJCNN
Taesik Na, Jong Hwan Ko, Jaeha Kung, Saibal Mukhopadhyay
2016 A conf
ISLPED
Jaeha Kung, Duckhwan Kim, Saibal Mukhopadhyay
2016 A* conf
ISCA
Duckhwan Kim, Jaeha Kung, Sek M. Chai, Sudhakar Yalamanchili, Saibal Mukhopadhyay
2016 B conf
IJCNN
Yun Long, Eui Min Jung, Jaeha Kung, Saibal Mukhopadhyay
2015 A conf
ISLPED
Jaeha Kung, Duckhwan Kim, Saibal Mukhopadhyay
2015 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Jaeha Kung, Duckhwan Kim, Saibal Mukhopadhyay
2011 conf
ISOCC
Jaeha Kung, Youngsoo Shin
2011 A* conf
DAC
Jaeha Kung, Inhak Han, Sachin S. Sapatnekar, Youngsoo Shin
redb/extractors/decompiler/apk/smali_parser.py
← Index redb/extractors/decompiler/apk/smali_parser.py python
"""Smali file parser — extracts individual method bodies from apktool output.

Parses .smali files produced by apktool and extracts per-method bodies,
instruction counts, and register counts.
"""

import os
import re
from dataclasses import dataclass, field
from typing import Dict, List, Optional


@dataclass
class SmaliMethod:
    """Parsed smali method data."""
    class_name: str
    method_name: str
    method_signature: str
    body: str
    instruction_count: int = 0
    register_count: int = 0
    access_flags: List[str] = field(default_factory=list)


# Directives start with '.' — these are metadata, not instructions
_DIRECTIVE_RE = re.compile(r"^\s*\.")
# Labels start with ':'
_LABEL_RE = re.compile(r"^\s*:")
# Blank or comment lines
_BLANK_OR_COMMENT_RE = re.compile(r"^\s*(#.*)?$")
# Method declaration
_METHOD_START_RE = re.compile(
    r"^\.method\s+(.*?)\s+(\S+)\(([^)]*)\)(\S+)\s*$"
)
_METHOD_START_SIMPLE_RE = re.compile(
    r"^\.method\s+(.*)"
)
# .registers or .locals directive
_REGISTERS_RE = re.compile(r"^\s*\.registers\s+(\d+)")
_LOCALS_RE = re.compile(r"^\s*\.locals\s+(\d+)")
# .line directive
_LINE_RE = re.compile(r"^\s*\.line\s+\d+")


class SmaliParser:
    """Parser for apktool smali output files."""

    @staticmethod
    def parse_smali_file(filepath: str) -> List[SmaliMethod]:
        """Parse a single .smali file and return list of methods.

        Each .smali file contains one class with all its methods.
        """
        with open(filepath, "r", encoding="utf-8", errors="replace") as f:
            content = f.read()

        return SmaliParser._parse_smali_content(content, filepath)

    @staticmethod
    def _parse_smali_content(content: str, source: str = "") -> List[SmaliMethod]:
        """Parse smali text content and extract methods."""
        lines = content.split("\n")
        methods = []

        # Extract class name from .class directive
        class_name = ""
        for line in lines:
            if line.startswith(".class "):
                parts = line.split()
                class_name = parts[-1]  # Last token is the class descriptor
                break

        in_method = False
        method_lines = []
        method_header = ""
        access_flags = []
        skip_method = False

        for line in lines:
            if line.startswith(".method "):
                in_method = True
                method_lines = []
                method_header = line
                skip_method = False

                # Parse access flags and method signature
                remainder = line[len(".method "):].strip()
                tokens = remainder.split()
                access_flags = []
                method_sig_token = tokens[-1] if tokens else ""

                for t in tokens[:-1]:
                    access_flags.append(t)

                # Skip abstract and native methods (no body)
                if "abstract" in access_flags or "native" in access_flags:
                    skip_method = True

            elif line.startswith(".end method"):
                if in_method and not skip_method:
                    body = "\n".join(method_lines)
                    method_name, signature = SmaliParser._parse_method_sig(
                        method_header
                    )
                    instruction_count = SmaliParser.count_instructions(body)
                    register_count = SmaliParser._extract_register_count(body)

                    methods.append(
                        SmaliMethod(
                            class_name=class_name,
                            method_name=method_name,
                            method_signature=signature,
                            body=body,
                            instruction_count=instruction_count,
                            register_count=register_count,
                            access_flags=access_flags,
                        )
                    )
                in_method = False
                method_lines = []
                access_flags = []

            elif in_method and not skip_method:
                method_lines.append(line)

        return methods

    @staticmethod
    def parse_smali_directory(dirpath: str) -> Dict[str, SmaliMethod]:
        """Parse all .smali files in a directory tree.

        Returns dict keyed by 'ClassName->methodName(signature)ReturnType'.
        """
        result = {}
        for root, _dirs, files in os.walk(dirpath):
            for fname in files:
                if fname.endswith(".smali"):
                    fpath = os.path.join(root, fname)
                    try:
                        methods = SmaliParser.parse_smali_file(fpath)
                        for m in methods:
                            key = SmaliParser.make_method_key(
                                m.class_name, m.method_name, m.method_signature
                            )
                            result[key] = m
                    except Exception:
                        continue
        return result

    @staticmethod
    def normalize_smali_body(body: str) -> str:
        """Normalize smali body for consistent hashing.

        Strips comments, .line directives, normalizes whitespace.
        """
        lines = []
        for line in body.split("\n"):
            stripped = line.strip()
            # Skip empty lines, comments, and .line directives
            if not stripped or stripped.startswith("#"):
                continue
            if _LINE_RE.match(stripped):
                continue
            lines.append(stripped)
        return "\n".join(lines)

    @staticmethod
    def count_instructions(body: str) -> int:
        """Count actual Dalvik instructions (skip directives, labels, blanks)."""
        count = 0
        for line in body.split("\n"):
            stripped = line.strip()
            if not stripped:
                continue
            if _DIRECTIVE_RE.match(stripped):
                continue
            if _LABEL_RE.match(stripped):
                continue
            if _BLANK_OR_COMMENT_RE.match(stripped):
                continue
            count += 1
        return count

    @staticmethod
    def _extract_register_count(body: str) -> int:
        """Extract register count from .registers or .locals directive.

        apktool outputs .locals (local registers only) by default.
        .registers (total = locals + params) is used with --use-registers.
        We return whichever is present.
        """
        for line in body.split("\n"):
            stripped = line.strip()
            m = _REGISTERS_RE.match(stripped)
            if m:
                return int(m.group(1))
            m = _LOCALS_RE.match(stripped)
            if m:
                return int(m.group(1))
        return 0

    @staticmethod
    def _parse_method_sig(header_line: str) -> tuple:
        """Parse method name and signature from .method header line.

        Input: '.method public onCreate(Landroid/os/Bundle;)V'
        Returns: ('onCreate', '(Landroid/os/Bundle;)V')
        """
        remainder = header_line[len(".method "):].strip()
        tokens = remainder.split()
        if not tokens:
            return ("unknown", "()")

        # Last token contains methodName(params)returnType
        method_part = tokens[-1]

        paren_idx = method_part.find("(")
        if paren_idx == -1:
            return (method_part, "()")

        method_name = method_part[:paren_idx]
        signature = method_part[paren_idx:]

        return (method_name, signature)

    @staticmethod
    def make_method_key(class_name: str, method_name: str, signature: str) -> str:
        """Build a canonical method key for cross-tool matching.

        Format: 'Lcom/example/Foo;->methodName(params)ReturnType'
        """
        return f"{class_name}->{method_name}{signature}"