Haiyan Guo

76 papers A 1B 5C 1Misc 1Journal 55Unranked 13
YearRankTypeTitle / Venue / Authors
2026 J jnl
Signal Process.
Haiyan Guo, Haimiao Zhang, Jun Qiu
2025 Misc conf
ICASSP
Zirui Ge, Xinzhou Xu, Haiyan Guo, Zhen Yang, Björn W. Schuller
2025 J jnl
CoRR
Binjian Wu, Qian Li, Zhe Kuang, Hongyuan Gao, Xinyi Liu, Haiyan Guo, Qiuju Chen, Yangruizhe Jiang, Yuqi Zhang, Jinyin Zha, Mingyu Li, Qiuhan Ren, Sishuo Feng, Haicang Zhang, Xuefeng Lu, Jian Zhang
2025 conf
ISAIMS
Xiaohong Song, Jiang Long, Haiyan Guo, Jiayue Dan, Chuyi Zhang, Shanshan Du, Geer Teng
2024 J jnl
IEEE Trans. Veh. Technol.
Pengcheng Chen, Bin Lyu, Shimin Gong, Haiyan Guo, Jie Jiang, Zhen Yang
2024 A conf
INTERSPEECH
Zirui Ge, Xinzhou Xu, Haiyan Guo, Tingting Wang, Zhen Yang, Björn W. Schuller
2024 J jnl
Discret. Math.
Haiyan Guo, Bo Zhou
2024 J jnl
IEEE Commun. Lett.
Shuqing Xu, Haiyan Guo, Wen Dong, Bin Lyu
2023 J jnl
EURASIP J. Audio Speech Music. Process.
Tingting Wang, Haiyan Guo, Zirui Ge, Qiquan Zhang, Zhen Yang
2023 J jnl
Speech Commun.
Yi Wei, Haiyan Guo, Zirui Ge, Zhen Yang
2023 J jnl
IEEE Trans. Veh. Technol.
Yizhi Li, Yulong Zou, Haiyan Guo, Jia Zhu, Boyu Ning
2023 J jnl
IEEE Trans. Veh. Technol.
Haiyan Guo, Zhen Yang, Yulong Zou, Bin Lyu, Yuhan Jiang, Lajos Hanzo
2023 J jnl
Acta Informatica
Haiyan Guo, Bo Zhou
2023 J jnl
IEEE Trans. Green Commun. Netw.
Pengcheng Chen, Bin Lyu, Yan Liu, Haiyan Guo, Zhen Yang
2023 J jnl
CoRR
Haiyan Guo, Bo Zhou, Bizhu Lin
2023 J jnl
CoRR
Zirui Ge, Xinzhou Xu, Haiyan Guo, Tingting Wang, Zhen Yang
2023 conf
WCSP
Zhe Li, Pengcheng Chen, Jie Jiang, Bin Lyu, Haiyan Guo, Zhen Yang
2023 J jnl
CoRR
Zirui Ge, Haiyan Guo, Zhen Yang
2023 J jnl
Circuits Syst. Signal Process.
Zirui Ge, Haiyan Guo, Tingting Wang, Zhen Yang
2023 J jnl
Circuits Syst. Signal Process.
Zirui Ge, Haiyan Guo, Tingting Wang, Zhen Yang
2022 J jnl
IEEE Trans. Veh. Technol.
Haiyan Guo, Yulong Zou, Tonghua Wu, Fei Zhou
2022 J jnl
IEEE Trans. Wirel. Commun.
Liangsen Zhai, Yulong Zou, Jia Zhu, Haiyan Guo
2022 J jnl
Digit. Signal Process.
Tingting Wang, Haiyan Guo, Qiquan Zhang, Zhen Yang
2022 J jnl
CoRR
Haiyan Guo, Zhen Yang, Yulong Zou, Bin Lyu, Yuhan Jiang, Lajos Hanzo
2022 J jnl
RAIRO Oper. Res.
Haiyan Guo, Bo Zhou
2022 J jnl
IEEE Commun. Lett.
Yizhi Li, Haiyan Guo, Yanbing Chen, Bin Lyu, Yuntian Feng
2022 C conf
ICCC
Pengcheng Chen, Bin Lyu, Haiyan Guo, Zhen Yang
2021 J jnl
IEEE Netw.
Yulong Zou, Jia Zhu, Tonghua Wu, Haiyan Guo, Hao Wei
2021 J jnl
Int. J. Found. Comput. Sci.
Bo Zhou, Zhenan Li, Haiyan Guo
2021 J jnl
Entropy
Chen Zhou, Haiyan Guo, Shujuan Cao
2021 J jnl
Comput. J.
Caixia Liang, Bo Zhou, Haiyan Guo
2021 conf
WCSP
Shuying Lin, Yulong Zou, Jia Zhu, Haiyan Guo, Bin Li, Fei Xie
2021 J jnl
Speech Commun.
Tingting Wang, Haiyan Guo, Xue Yan, Zhen Yang
2021 conf
MICCAI (8)
Ruiheng Chang, Dong Wang, Haiyan Guo, Jia Ding, Liwei Wang
2020 J jnl
Speech Commun.
Xue Yan, Zhen Yang, Tingting Wang, Haiyan Guo
2020 conf
SpaCCS Workshops
Qingmin Meng, Hao Zheng, Haiyan Guo
2020 J jnl
IEEE Access
Qingmin Meng, Jingcheng Wei, Xiaoming Wang, Haiyan Guo
2020 J jnl
Appl. Math. Comput.
Haiyan Guo, Bo Zhou
2020 J jnl
CoRR
Haiyan Guo, Bo Zhou
2020 J jnl
Discuss. Math. Graph Theory
Haiyan Guo, Bo Zhou
2020 J jnl
IEEE Trans. Veh. Technol.
Yuhan Jiang, Yulong Zou, Haiyan Guo, Jia Zhu, Jiahao Gu
2019 J jnl
Inf. Manag.
Lianying Zhang, Haiyan Guo
2019 conf
WCSP
Yonghai Lin, Zhen Yang, Haiyan Guo
2019 J jnl
Sensors
Peng Li, Aijun Cong, Zhengkai Dong, Yu Wang, Yu Liu, Haiyan Guo, Xiaomin Li, Qiang Fu
2019 J jnl
IEEE Trans. Commun.
Haiyan Guo, Zhen Yang, Yulong Zou, Mujun Qian, Jia Zhu, Lajos Hanzo
2019 J jnl
IEEE Trans. Commun.
Yuhan Jiang, Yulong Zou, Haiyan Guo, Theodoros A. Tsiftsis, Manav R. Bhatnagar, Rodrigo C. de Lamare, Yu-Dong Yao
2019 J jnl
Electron. Commer. Res.
Ronggang Zhou, Xiaorui Wang, Yuhan Shi, Renqian Zhang, Leyuan Zhang, Haiyan Guo
2019 J jnl
CoRR
Caixia Liang, Bo Zhou, Haiyan Guo
2019 J jnl
IEEE Internet Things J.
Bin Lyu, Zhen Yang, Haiyan Guo, Feng Tian, Guan Gui
2019 J jnl
IEEE Internet Things J.
Haiyan Guo, Zhen Yang, Yulong Zou, Theodoros A. Tsiftsis, Manav R. Bhatnagar, Rodrigo C. de Lamare
2019 J jnl
IEEE Access
Bin Lyu, Ting Qi, Haiyan Guo, Zhen Yang
2018 B conf
GLOBECOM
Yulong Zou, Xiao Jiang, Jia Zhu, Haiyan Guo
2018 B conf
GLOBECOM
Yulong Zou, Lidong Cai, Haiyan Guo, Jia Zhu
2018 J jnl
CoRR
Yulong Zou, Ming Sun, Jia Zhu, Haiyan Guo
2018 J jnl
IEEE Trans. Wirel. Commun.
Yulong Zou, Ming Sun, Jia Zhu, Haiyan Guo
2018 J jnl
IEEE Internet Things J.
Bin Lyu, Haiyan Guo, Zhen Yang, Guan Gui
2017 J jnl
IEEE Access
Haiyan Guo, Zhen Yang, Linghua Zhang, Jia Zhu, Yulong Zou
2017 conf
ICC
Haiyan Guo, Zhen Yang, Linghua Zhang, Jia Zhu, Yulong Zou
2017 J jnl
CoRR
Haiyan Guo, Zhen Yang, Linghua Zhang, Jia Zhu, Yulong Zou
2017 J jnl
IEEE Trans. Commun.
Haiyan Guo, Zhen Yang, Linghua Zhang, Jia Zhu, Yulong Zou
2017 J jnl
Behav. Inf. Technol.
Ronggang Zhou, Xiaorui Wang, Leyuan Zhang, Haiyan Guo
2016 conf
WCSP
Haiyan Guo, Zhen Yang, Linghua Zhang, Lei Ye
2016 B conf
GLOBECOM
Haiyan Guo, Zhen Yang, Linghua Zhang, Jia Zhu, Yulong Zou
2016 J jnl
Pattern Anal. Appl.
Nijun Li, Xu Cheng, Haiyan Guo, Zhenyang Wu
2015 conf
IEEM
Lianying Zhang, Haiyan Guo, Xiaoyan Huo
2015 J jnl
Circuits Syst. Signal Process.
Haiyan Guo, Xiaoxiong Li, Lin Zhou, Zhenyang Wu
2014 B conf
ICPR
Nijun Li, Xu Cheng, Haiyan Guo, Zhenyang Wu
2014 J jnl
J. Softw.
Haiyan Guo, Xiaoxiong Li, Lin Zhou, Zhenyang Wu
2014 B conf
ICIP
Suofei Zhang, Xu Cheng, Haiyan Guo, Lin Zhou, Zhenyang Wu
2011 J jnl
Microelectron. J.
Haiyan Guo, Haizhou Wu, Bo Zhang, Zhaoji Li
2011 conf
WCSP
Haiyan Guo, Zhen Yang, Weiping Zhu
2010 J jnl
Microelectron. J.
Haiyan Guo, Haizhou Wu, Bo Zhang, Zhaoji Li
2010 conf
WCNIS
Ning Xu, Zhen Yang, Haiyan Guo
2008 J jnl
Genom. Proteom. Bioinform.
Weiwei Wang, Qibin Luo, Haiyan Guo, Peter Bossier, Gilbert Van Stappen, Patrick Sorgeloos, Naihong Xin, Qishi Sun, Songnian Hu, Jun Yu
2007 conf
PCM
Zongyuan Deng, Zhen Yang, Xi Shao, Ning Xu, Chao Wu, Haiyan Guo
2007 conf
CHIMIT
Shaoke Zhang, Chen Zhao, Qiang Zhang, Hui Su, Haiyan Guo, Jie Cui, Yingxin Pan, Paul Moody
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}"