K. H. Kim

117 papers A* 2A 9B 21C 20Misc 2Journal 33Unranked 29
YearRankTypeTitle / Venue / Authors
2024 conf
VLSI Technology and Circuits
K. S. Choi, S. H. Kim, J. W. Seo, H. S. Kang, Seung Wan Chu, S. W. Bae, J. H. Kwon, G. S. Kim, Y. T. Park, J. H. Kwak, D. I. Song, S. M. Park, Y. T. Kim, K. C. Jang, J. S. Cho, H. S. Lee, B. H. Lee, J. W. Park, J. H. Lee, H. H. Kwon, D. S. You, C. S. Hyun, J. J. Lee, S. C. Lee, I. D. Kim, J. H. Myung, H. S. Won, J. H. Chun, K. H. Kim, J. H. Kang, S. B. Kim, K. H. Lee, S. O. Chung, S. S. Kim, I. S. Jin, B. K. Lee, C. W. Kim, Joodong Park, S. Y. Cha
2017 J jnl
CoRR
Farman Ali, Daehan Kwak, Pervez Khan, S. M. Riazul Islam, K. H. Kim, Kyung Sup Kwak
2010 C conf
ISORC
K. H. Kim, Jing Qian, Zhen Zhang, Qian Zhou, Kyung-Deok Moon, Jun Hee Park, Kwang-Roh Park, Doo-Hyun Kim
2010 conf
IPTComm
Alessandro Amirante, Simon Pietro Romano, K. H. Kim, Henning Schulzrinne
2010 C conf
ISORC
Juan A. Colmenares, K. H. Kim, Zhen Zhang, Chae-Deok Lim, Kee-Wook Rim
2009 conf
SEUS
K. H. Kim
2008 J jnl
J. Oper. Res. Soc.
Y. H. Lee, J. I. Kim, K. H. Kang, K. H. Kim
2007 C conf
ISORC
K. H. Kim, Juan A. Colmenares, Kee-Wook Rim
2007 J jnl
J. Oper. Res. Soc.
K. H. Kim, M. J. Lee
2007 A conf
IPDPS
K. H. Kim, Stephen F. Jenks
2005 J jnl
Multim. Syst.
Sung-Jin Kim, Falko Kuester, K. H. Kim
2005 conf
IESS
Roman Obermaisser, Emmanuel Henrich, K. H. Kim, Hermann Kopetz, Moon-hae Kim
2004 C conf
ISORC
K. H. Kim, Juqiang Liu
2004 J jnl
Real Time Syst.
K. H. Kim
2003 C conf
ISADS
K. H. Kim, Seok-Joong Kang
2003 C conf
ISORC
K. H. Kim
2003 conf
FTDCS
K. H. Kim, Yuqing Li
2002 conf
ISMSE
Sung-Jin Kim, Falko Kuester, K. H. Kim
2002 B conf
ICTAI
K. H. Kim
2002 B conf
SRDS
Juqiang Liu, K. H. Kim, Moon-hae Kim
2002 J jnl
J. Oper. Res. Soc.
K. T. Park, K. H. Kim
2002 conf
Symposium on Object-Oriented Real-Time Distributed Computing
K. H. Kim
2002 ed.
DIPES
Bernd Kleinjohann, K. H. Kim, Lisa Kleinjohann, Achim Rettberg
2002 J jnl
IEEE Distributed Syst. Online
K. H. Kim
2002 conf
WORDS
K. H. Kim, Seok-Joong Kang, Yuqing Li
2002 Misc conf
International Conference on Computational Science (3)
B. K. Woo, Dong-Soo Kim, S. S. Hong, K. H. Kim, Tai-Myung Chung
2002 conf
Symposium on Object-Oriented Real-Time Distributed Computing
K. H. Kim, Chansik Im, Prasad Athreya
2002 conf
HASE
K. H. Kim
2001 conf
WORDS
K. H. Kim, Juqiang Liu
2001 B conf
COMPSAC
Galo Gimenez, K. H. Kim
2001 B conf
SRDS
K. H. Kim
2001 C conf
ISADS
K. H. Kim, Juqiang Liu, H. Miyazaki, Eltefaat Shokri
2001 C conf
ISORC
K. H. Kim, Raymond A. Paul
2000 J jnl
Computer
K. H. Kim
2000 C conf
ISORC
K. H. Kim
2000 C conf
ISORC
K. H. Kim, Juqiang Liu, Moon-hae Kim
2000 C conf
ISORC
Insup Lee, Mike Jones, Hermann Kopetz, K. H. Kim, Thomas F. Lawrence, Bhavani Thuraisingham
2000 B conf
SRDS
K. H. Kim
2000 B conf
ICPADS
K. H. Kim
2000 J jnl
IEEE Trans. Knowl. Data Eng.
K. H. Kim, Chittur Subbaraman
2000 B conf
COMPSAC
Moon-hae Kim, Jung-Guk Kim, K. H. Kim, Myeong-Soo Lee, Shin-Yeol Park
1999 C conf
ISORC
K. H. Kim, Masaki Ishida, Juqiang Liu
1999 B conf
COMPSAC
K. H. Kim, Juqiang Liu, Masaki Ishida, Inho Kim
1999 J jnl
IEEE Trans. Knowl. Data Eng.
K. H. Kim, Chittur Subbaraman
1999 conf
FTDCS
K. H. Kim
1999 C conf
ISADS
K. H. Kim
1999 C conf
ISORC
K. H. Kim
1999 J jnl
Int. J. Softw. Eng. Knowl. Eng.
K. H. Kim
1998 A conf
ISSRE
K. H. Kim, Chittur Subbaraman
1998 J jnl
Int. J. Softw. Eng. Knowl. Eng.
Eltefaat Shokri, Herbert Hecht, Patrick Crane, Jerry Dussault, K. H. Kim
1998 C conf
ISORC
Eltefaat Shokri, Patrick Crane, K. H. Kim
1998 B conf
SRDS
K. H. Kim, Chittur Subbaraman
1998 B conf
COMPSAC
Eltefaat Shokri, Patrick Crane, K. H. Kim, Chittur Subbaraman
1998 C conf
ISORC
K. H. Kim, Chittur Subbaraman
1998 conf
HASE
K. H. Kim
1998 B conf
COMPSAC
Wolfgang A. Halang, K. H. Kim, Kinji Mori, Ulrich Schmid, Horst F. Wedde
1997 J jnl
Int. J. Softw. Eng. Knowl. Eng.
Sankyu Park, Key-Sun Choi, K. H. Kim
1997 B conf
SRDS
K. H. Kim, Chittur Subbaraman
1997 J jnl
Comput. Graph.
Sang-Young Cho, Phillip C.-Y. Sheu, K. H. Kim
1997 J jnl
Commun. ACM
K. H. Kim, Chittur Subbaraman
1997 conf
HASE
K. H. Kim, Chittur Subbaraman, Eltefaat Shokri
1997 B conf
COMPSAC
K. H. Kim, Chittur Subbaraman
1997 J jnl
Computer
K. H. Kim
1997 J jnl
Comput. Commun.
K. H. Kim, Carlos Serro
1997 conf
WORDS
K. H. Kim, Luiz F. Bacellar
1997 conf
FTDCS
K. H. Kim
1997 conf
WORDS
C. M. Nguyen, K. H. Kim
1996 J jnl
Fuzzy Sets Syst.
K. H. Kim, F. W. Roush
1996 A conf
ISSRE
K. H. Kim, Mladen A. Vouk, David F. McAllister
1996 A conf
ISSRE
K. H. Kim, Luiz F. Bacellar, Chittur Subbaraman
1996 B conf
COMPSAC
K. H. Kim, Cuong Nguyen, Chan-Mo Park
1996 conf
WORDS
K. H. Kim, Chittur Subbaraman, Yuseok Kim
1996 B conf
COMPSAC
Carl K. Chang, K. H. Kim, Annie Kuntzmann-Combelles, Iwao Toda
1996 C conf
SEKE
K. H. Kim
1995 B conf
COMPSAC
Joanne Bechta Dugan, K. H. Kim
1995 conf
FTDCS
K. H. Kim, Carlos Serro
1995 C conf
ISADS
K. H. Kim, Kinji Mori, Hiroaki Nakanishi
1995 conf
FTDCS
K. H. Kim
1993 J jnl
IEEE Trans. Parallel Distributed Syst.
K. H. Kim, Alireza Kavianpour
1993 A conf
ICDCS
K. H. Kim, Eltefaat Shokri
1993 C conf
ISADS
K. H. Kim
1992 B conf
SRDS
K. H. Kim, Hermann Kopetz, Kinji Mori, Eltefaat Shokri, Günter Grünsteidl
1992 conf
NATO ASI RTC
K. H. Kim
1992 J jnl
IEEE Trans. Parallel Distributed Syst.
Seung-Min Yang, K. H. Kim
1992 conf
IFIP Congress (1)
K. H. Kim
1991 conf
FTCS
Myron Hecht, J. Agron, Herbert Hecht, K. H. Kim
1991 conf
FTCS
K. H. Kim, W. J. Guan, Andreas Damm, J. A. Rohr
1991 J jnl
Comput. Aided Des.
K. H. Kim, S. B. Park
1991 J jnl
IEEE Trans. Computers
Alireza Kavianpour, K. H. Kim
1991 B conf
SRDS
K. H. Kim, J. H. You
1990 conf
ICPP (1)
Alireza Kavianpour, K. H. Kim
1990 B conf
SRDS
Hermann Kopetz, K. H. Kim
1989 J jnl
IEEE Trans. Software Eng.
K. H. Kim
1989 conf
Fehlertolerierende Rechensysteme
K. H. Kim
1989 J jnl
IEEE Trans. Computers
K. H. Kim, Howard O. Welch
1989 A conf
ICDCS
Seung-Min Yang, K. H. Kim
1989 J jnl
IEEE Trans. Computers
K. H. Kim, Seung-Min Yang
1988 B conf
SRDS
K. H. Kim, Seung-Min Yang
1988 J jnl
IEEE Trans. Software Eng.
K. H. Kim
1988 J jnl
Autom.
K. H. Kim, F. W. Roush
1987 J jnl
Robotica
W. Edward Red, K. H. Kim
1987 J jnl
Proc. IEEE
Wesley W. Chu, K. H. Kim, William C. McDonald
1986 conf
Symposium on Reliability in Distributed Software and Database Systems
K. H. Kim, Seung-Min Yang
1984 A conf
ICDCS
K. H. Kim
1984 A* conf
ICDE
K. H. Kim
1983 J jnl
Computer
K. H. Kim
1982 J jnl
IEEE Trans. Software Eng.
K. H. Kim
1982 A conf
RTSS
K. H. Kim, A. Abou-El-Maga, S. Neu, Seung-Min Yang
1980 A conf
RTSS
K. H. Kim
1980 Misc conf
Performance
K. H. Kim, Mahmoud Naghibzadeh
1978 B conf
COMPSAC
K. H. Kim, Herbert Hecht, J. Huang, Mahmoud Naghibzadeh
1978 A* conf
ISCA
K. H. Kim, C. V. Ramamoorthy
1975 J jnl
IEEE Trans. Software Eng.
C. V. Ramamoorthy, K. H. Kim, W. T. Chen
1974 conf
AFIPS National Computer Conference
C. V. Ramamoorthy, K. H. Kim
1974 conf
Fachtagung Prozessrechner
C. V. Ramamoorthy, R. C. Cheugn, K. H. Kim
1972 J jnl
IEEE Trans. Computers
Chittoor V. Ramamoorthy, James R. Goodman, K. H. Kim
1972 C conf
IEEE Symposium on Computer Arithmetic
C. V. Ramamoorthy, K. H. Kim
tests/unit/test_smali_normalization.py
← Index tests/unit/test_smali_normalization.py python
"""Unit tests for smali semantic normalization.

Tests the three normalization levels (category, opcode, opcode_api),
opcode categorization, ACFG feature index mapping, and integration
with MinHash computation.
"""
import pytest

pytestmark = [pytest.mark.unit, pytest.mark.apk, pytest.mark.decompile]


class TestCategorizeOpcode:
    """Tests for opcode -> semantic category mapping."""

    def test_arithmetic(self):
        from redb.extractors.decompiler.apk.smali_normalization import categorize_opcode
        assert categorize_opcode("add-int") == "ALU"
        assert categorize_opcode("mul-long/2addr") == "ALU"
        assert categorize_opcode("neg-int") == "ALU"

    def test_data_movement(self):
        from redb.extractors.decompiler.apk.smali_normalization import categorize_opcode
        assert categorize_opcode("move-result") == "MOV"
        assert categorize_opcode("const/4") == "CONST"
        assert categorize_opcode("const-string") == "CONST"

    def test_memory_access(self):
        from redb.extractors.decompiler.apk.smali_normalization import categorize_opcode
        assert categorize_opcode("iget-object") == "LOAD"
        assert categorize_opcode("sput-wide") == "STORE"
        assert categorize_opcode("aget-byte") == "LOAD"

    def test_invocation(self):
        from redb.extractors.decompiler.apk.smali_normalization import categorize_opcode
        assert categorize_opcode("invoke-virtual") == "CALL"
        assert categorize_opcode("invoke-static") == "CALL"
        assert categorize_opcode("invoke-direct") == "CALL"

    def test_control_flow(self):
        from redb.extractors.decompiler.apk.smali_normalization import categorize_opcode
        assert categorize_opcode("if-eqz") == "BRANCH"
        assert categorize_opcode("goto") == "JMP"
        assert categorize_opcode("goto/16") == "JMP"
        assert categorize_opcode("return-void") == "RET"

    def test_comparison(self):
        from redb.extractors.decompiler.apk.smali_normalization import categorize_opcode
        assert categorize_opcode("cmp-long") == "CMP"
        assert categorize_opcode("cmpl-float") == "CMP"
        assert categorize_opcode("cmpg-double") == "CMP"

    def test_conversion(self):
        from redb.extractors.decompiler.apk.smali_normalization import categorize_opcode
        assert categorize_opcode("int-to-long") == "CONV"
        assert categorize_opcode("float-to-int") == "CONV"

    def test_object_type(self):
        from redb.extractors.decompiler.apk.smali_normalization import categorize_opcode
        assert categorize_opcode("new-instance") == "ALLOC"
        assert categorize_opcode("check-cast") == "TYPE"
        assert categorize_opcode("instance-of") == "TYPE"

    def test_exception_sync(self):
        from redb.extractors.decompiler.apk.smali_normalization import categorize_opcode
        assert categorize_opcode("throw") == "EXC"
        assert categorize_opcode("monitor-enter") == "SYNC"

    def test_unknown(self):
        from redb.extractors.decompiler.apk.smali_normalization import categorize_opcode
        assert categorize_opcode("nop") == "OTHER"


class TestNormalizeInstruction:
    """Tests for single instruction normalization at various levels."""

    def test_category_level(self):
        from redb.extractors.decompiler.apk.smali_normalization import normalize_instruction
        assert normalize_instruction("add-int v0, v1, v2", "category") == "ALU"
        assert normalize_instruction("invoke-virtual {p0}, Lcom/Foo;->bar()V", "category") == "CALL"
        assert normalize_instruction("return-void", "category") == "RET"

    def test_opcode_level_strips_width(self):
        from redb.extractors.decompiler.apk.smali_normalization import normalize_instruction
        # Width variants collapse to same base
        assert normalize_instruction("add-int v0, v1, v2", "opcode") == "add"
        assert normalize_instruction("add-long v0, v2, v4", "opcode") == "add"
        assert normalize_instruction("add-float v0, v1, v2", "opcode") == "add"
        # Addressing modes collapse too
        assert normalize_instruction("add-int/2addr v0, v1", "opcode") == "add"

    def test_opcode_api_invoke(self):
        from redb.extractors.decompiler.apk.smali_normalization import normalize_instruction
        result = normalize_instruction(
            "invoke-virtual {p0, v0}, Lcom/example/Foo;->bar(I)V"
        )
        assert result == "CALL Lcom/example/Foo;->bar(I)V"

    def test_opcode_api_invoke_no_ref(self):
        from redb.extractors.decompiler.apk.smali_normalization import normalize_instruction
        # If somehow no method ref is found, fallback to CALL
        assert normalize_instruction("invoke-virtual {v0}") == "CALL"

    def test_opcode_api_field_load(self):
        from redb.extractors.decompiler.apk.smali_normalization import normalize_instruction
        result = normalize_instruction(
            "iget-object v0, p0, Lcom/Foo;->mField:Ljava/lang/String;"
        )
        assert result == "LOAD Lcom/Foo;->mField:Ljava/lang/String;"

    def test_opcode_api_field_store(self):
        from redb.extractors.decompiler.apk.smali_normalization import normalize_instruction
        result = normalize_instruction(
            "iput-object v0, p0, Lcom/Foo;->mField:Ljava/lang/String;"
        )
        assert result == "STORE Lcom/Foo;->mField:Ljava/lang/String;"

    def test_opcode_api_androguard_field_format(self):
        """androguard uses space instead of colon in field references."""
        from redb.extractors.decompiler.apk.smali_normalization import normalize_instruction
        result = normalize_instruction(
            "iget-object v0, p0, Lcom/Foo;->mField Ljava/lang/String;"
        )
        assert result.startswith("LOAD")
        assert "Lcom/Foo;->mField" in result

    def test_opcode_api_new_instance(self):
        from redb.extractors.decompiler.apk.smali_normalization import normalize_instruction
        result = normalize_instruction(
            "new-instance v0, Lcom/example/MyClass;"
        )
        assert result == "ALLOC Lcom/example/MyClass;"

    def test_opcode_api_const_string(self):
        from redb.extractors.decompiler.apk.smali_normalization import normalize_instruction
        result = normalize_instruction(
            'const-string v0, "hello world"'
        )
        assert result == 'CONST_STR "hello world"'

    def test_opcode_api_const_string_jumbo(self):
        from redb.extractors.decompiler.apk.smali_normalization import normalize_instruction
        result = normalize_instruction(
            'const-string/jumbo v0, "large string"'
        )
        assert result == 'CONST_STR "large string"'

    def test_opcode_api_fallback_to_category(self):
        from redb.extractors.decompiler.apk.smali_normalization import normalize_instruction
        # Non-special instructions fall back to category
        assert normalize_instruction("add-int v0, v1, v2") == "ALU"
        assert normalize_instruction("return-void") == "RET"
        assert normalize_instruction("nop") == "OTHER"

    def test_empty_input(self):
        from redb.extractors.decompiler.apk.smali_normalization import normalize_instruction
        assert normalize_instruction("") == ""
        assert normalize_instruction("   ") == ""


class TestNormalizeMethodBody:
    """Tests for full method body normalization."""

    def test_filters_directives_labels_comments(self):
        from redb.extractors.decompiler.apk.smali_normalization import normalize_method_body
        body = """\
.locals 2
# comment
:label_0
add-int v0, v1, v2
.line 42
invoke-virtual {p0}, Lcom/Foo;->bar()V
return-void
"""
        result = normalize_method_body(body, "category")
        assert result == ["ALU", "CALL", "RET"]

    def test_opcode_api_preserves_api_refs(self):
        from redb.extractors.decompiler.apk.smali_normalization import normalize_method_body
        body = """\
const/4 v0, 0x0
invoke-virtual {p0, v0}, Lcom/Foo;->setX(I)V
iget-object v1, p0, Lcom/Foo;->name:Ljava/lang/String;
return-void
"""
        result = normalize_method_body(body, "opcode_api")
        assert result[0] == "CONST"
        assert result[1] == "CALL Lcom/Foo;->setX(I)V"
        assert result[2] == "LOAD Lcom/Foo;->name:Ljava/lang/String;"
        assert result[3] == "RET"

    def test_empty_body(self):
        from redb.extractors.decompiler.apk.smali_normalization import normalize_method_body
        assert normalize_method_body("") == []
        assert normalize_method_body("\n\n") == []


class TestNormalizationWithMinHash:
    """Integration tests: normalization + MinHash computation."""

    def test_minhash_returns_signature(self):
        from redb.extractors.decompiler.apk.method_extractor import compute_minhash
        body = """\
const/4 v0, 0x0
invoke-virtual {p0, v0}, Lcom/Foo;->bar(I)V
iget-object v1, p0, Lcom/Foo;->name:Ljava/lang/String;
add-int v2, v0, v1
return-void
"""
        sig = compute_minhash(body)
        assert sig is not None
        assert len(sig) == 64
        assert all(0 <= v < 256 for v in sig)

    def test_minhash_register_invariance(self):
        """Same operations with different registers should produce identical signatures."""
        from redb.extractors.decompiler.apk.method_extractor import compute_minhash
        body_a = """\
const/4 v0, 0x0
invoke-virtual {p0, v0}, Lcom/Foo;->bar(I)V
iget-object v1, p0, Lcom/Foo;->name:Ljava/lang/String;
add-int v2, v0, v1
return-void
"""
        body_b = """\
const/4 v3, 0x0
invoke-virtual {p1, v3}, Lcom/Foo;->bar(I)V
iget-object v4, p1, Lcom/Foo;->name:Ljava/lang/String;
add-int v5, v3, v4
return-void
"""
        sig_a = compute_minhash(body_a)
        sig_b = compute_minhash(body_b)
        assert sig_a == sig_b

    def test_minhash_width_invariance(self):
        """Width variants of same operations should produce identical signatures."""
        from redb.extractors.decompiler.apk.method_extractor import compute_minhash
        body_int = """\
add-int v0, v1, v2
sub-int v3, v0, v1
mul-int v4, v0, v3
return v4
"""
        body_long = """\
add-long v0, v2, v4
sub-long v6, v0, v2
mul-long v8, v0, v6
return-wide v8
"""
        sig_int = compute_minhash(body_int)
        sig_long = compute_minhash(body_long)
        # Both normalize to ALU, ALU, ALU, RET -> identical
        assert sig_int == sig_long

    def test_minhash_different_apis_differ(self):
        """Methods calling different APIs should produce different signatures."""
        from redb.extractors.decompiler.apk.method_extractor import compute_minhash
        body_a = """\
const/4 v0, 0x0
invoke-virtual {p0, v0}, Lcom/crypto/AES;->encrypt([B)[B
invoke-virtual {v0}, Ljava/io/OutputStream;->write([B)V
return-void
"""
        body_b = """\
const/4 v0, 0x0
invoke-virtual {p0, v0}, Ljava/lang/String;->length()I
invoke-virtual {v0}, Ljava/io/PrintStream;->println(I)V
return-void
"""
        sig_a = compute_minhash(body_a)
        sig_b = compute_minhash(body_b)
        assert sig_a != sig_b

    def test_minhash_too_few_instructions(self):
        from redb.extractors.decompiler.apk.method_extractor import compute_minhash
        assert compute_minhash("return-void\nnop") is None


class TestACFGBlockFeatures:
    """Tests for per-block ACFG feature extraction via smali_cfg."""

    def test_simple_linear_method(self):
        from redb.extractors.decompiler.apk.smali_cfg import compute_cfg_metrics
        body = """\
add-int v0, v1, v2
invoke-virtual {p0}, Lcom/Foo;->bar()V
return-void
"""
        metrics = compute_cfg_metrics(body)
        assert metrics.block_count >= 1
        assert len(metrics.block_features) == metrics.block_count
        # Each feature vector has 8 elements
        for feat in metrics.block_features:
            assert len(feat) == 8

    def test_branching_method_has_multiple_blocks(self):
        from redb.extractors.decompiler.apk.smali_cfg import compute_cfg_metrics
        body = """\
const/4 v0, 0x0
if-eqz v0, :cond_0
invoke-virtual {p0}, Lcom/Foo;->a()V
goto :goto_0
:cond_0
invoke-virtual {p0}, Lcom/Foo;->b()V
:goto_0
return-void
"""
        metrics = compute_cfg_metrics(body)
        assert metrics.block_count >= 3
        assert len(metrics.block_features) == metrics.block_count

    def test_feature_vector_arithmetic_count(self):
        from redb.extractors.decompiler.apk.smali_cfg import compute_cfg_metrics
        body = """\
add-int v0, v1, v2
sub-int v3, v0, v1
mul-int v4, v0, v3
return v4
"""
        metrics = compute_cfg_metrics(body)
        assert len(metrics.block_features) == 1
        feat = metrics.block_features[0]
        # feat[0] = instr_count (4), feat[1] = arithmetic (3)
        assert feat[0] == 4
        assert feat[1] >= 3  # 3 ALU ops

    def test_feature_vector_call_count(self):
        from redb.extractors.decompiler.apk.smali_cfg import compute_cfg_metrics
        body = """\
invoke-virtual {p0}, Lcom/A;->a()V
invoke-static {v0}, Lcom/B;->b()V
return-void
"""
        metrics = compute_cfg_metrics(body)
        feat = metrics.block_features[0]
        # feat[4] = call count
        assert feat[4] == 2