Ole K. Hejlesen

57 papers B 1Journal 15Unranked 41
YearRankTypeTitle / Venue / Authors
2025 J jnl
Int. J. Medical Informatics
Camilla Heisel Nyholm Thomsen, Thomas Kronborg, Stine Veje Hangaard, Peter Vestergaard, Ole K. Hejlesen, Morten Hasselstrøm Jensen
2024 conf
MIE
Anne-Maj Knudsen, Ann-Cathrine D. Dunvald, Stine Veje Hangaard, Ole K. Hejlesen, Thomas Kronborg
2024 conf
MIE
Jannie T. D. Nørlev, Thomas Kronborg, Ole K. Hejlesen, Morten Hasselstrøm Jensen, Peter Vestergaard, Stine Veje Hangaard
2024 conf
MIE
Camilla Heisel Nyholm Thomsen, Stine Veje Hangaard, Thomas Kronborg, Peter Vestergaard, Ole K. Hejlesen, Morten Hasselstrøm Jensen
2024 conf
MIE
Nynne Sophie Holdt-Caspersen, Claus Dethlefsen, Ole K. Hejlesen, Peter Vestergaard, Stine Veje Hangaard, Iben Engelbrecht Giese, Julie Egmose, Morten Hasselstrøm Jensen
2024 conf
MIE
Sisse Heiden Laursen, Flemming Witt Udsen, Lisa Korsbakke Emtekær Hæsum, Thomas Kronborg, Ole K. Hejlesen, Stine Veje Hangaard
2024 conf
MIE
Camilla Heisel Nyholm Thomsen, Jannie T. D. Nørlev, Stine Veje Hangaard, Morten Hasselstrøm Jensen, Sika N. S. Kristensen, Tinna B. Aradóttir, Peter Vestergaard, Ole K. Hejlesen, Thomas Kronborg
2024 conf
MIE
Gunnar Hartvigsen, Silje Paulsen, Ole K. Hejlesen, Clara Bender, Stine Veje Hangaard, Eirik Årsand, Tina Rishaug, André Henriksen
2024 conf
MIE
Tanja F. Holm, Morten Hasselstrøm Jensen, Ole K. Hejlesen, Søren Hagstrøm, Mette Madsen, Stine Veje Hangaard
2024 J jnl
Comput. Methods Programs Biomed.
Simon Lebech Cichosz, Morten Hasselstrøm Jensen, Ole K. Hejlesen, Stine Dam Henriksen, Asbjørn Mohr Drewes, Søren Schou Olesen
2024 conf
MIE
Pernille Heyckendorff Secher, Julie Egmose, Ole K. Hejlesen, Stine Veje Hangaard
2022 J jnl
Int. J. Medical Informatics
Flemming Witt Udsen, Mads Nibe Stausholm, Ole K. Hejlesen, Simon Lebech Cichosz
2021 J jnl
Comput. Biol. Medicine
Thomas Kronborg, Stine Veje Hangaard, Simon Lebech Cichosz, Ole K. Hejlesen
2021 J jnl
Comput. Biol. Medicine
Simon Lebech Cichosz, Thomas Kronborg, Morten Hasselstrøm Jensen, Ole K. Hejlesen
2020 conf
MIE
Simon Lebech Cichosz, Morten Hasselstrøm Jensen, Thomas Kronborg Larsen, Ole K. Hejlesen
2020 conf
MIE
Thomas Kronborg, Stine Veje Hangaard, Ole K. Hejlesen
2020 conf
MIE
Stine Veje Hangaard, Sisse H. Laursen, Flemming Witt Udsen, Peter Vestergaard, Ole K. Hejlesen
2020 conf
MIE
Morten Hasselstrøm Jensen, Simon Lebech Cichosz, Ole K. Hejlesen, Irl. B. Hirsch, Peter Vestergaard
2018 conf
MIE
Sisse H. Laursen, Amanda A. Buus, Lisbet Brandi, Peter Vestergaard, Ole K. Hejlesen
2018 J jnl
Int. J. Medical Informatics
Thomas Kronborg, Lasse Mark, Simon Lebech Cichosz, Pernille Heyckendorff Lilholt, Ole K. Hejlesen
2016 conf
CENTERIS/ProjMAN/HCist
Clara Schaarup, Stine Veje Hangaard, Ole K. Hejlesen
2016 conf
MIE
Stine Veje Hangaard, Clara Schaarup, Ole K. Hejlesen
2016 J jnl
Int. J. Medical Informatics
Pernille Heyckendorff Lilholt, Lisa Korsbakke Emtekær Hæsum, Lars Holger Ehlers, Ole K. Hejlesen
2015 conf
MIE
Clara Schaarup, Ole K. Hejlesen
2015 J jnl
Int. J. Medical Informatics
Pernille Heyckendorff Lilholt, Morten Hasselstrøm Jensen, Ole K. Hejlesen
2015 conf
MedInfo
Simon Lebech Cichosz, Mette Dencker Johansen, Ole K. Hejlesen
2014 conf
MIE
Simon Lebech Cichosz, Mette Dencker Johansen, Ole K. Hejlesen
2014 conf
MIE
Clara Schaarup, Ole K. Hejlesen
2014 conf
MIE
Stine Veje Hangaard, Morten Algy Bonderup, Pernille Heyckendorff Lilholt, Mette Dencker Johansen, Ole K. Hejlesen
2014 conf
MIE
Lasse Lefevre Samson, Louise Bilenberg Pape-Haugaard, Mette Søgaard, Henrik Carl Schønheyder, Ole K. Hejlesen
2014 conf
MIE
Pernille Heyckendorff Lilholt, Sisse Heiden, Ole K. Hejlesen
2013 conf
MedInfo
Sisse Heiden, Amanda A. Buus, Morten Hasselstrøm Jensen, Ole K. Hejlesen
2013 conf
MedInfo
Lasse Lefevre Samson, Louise Bilenberg Pape-Haugaard, Mette Søgaard, Henrik C. Schønheyder, Ole K. Hejlesen
2013 conf
MedInfo
Eirik Årsand, Stein Olav Skrøvseth, Ole K. Hejlesen, Alexander Horsch, Fred Godtliebsen, Astrid Grøttland, Gunnar Hartvigsen
2013 conf
MedInfo
Lisa Korsbakke Emtekær Hæsum, Lars Holger Ehlers, Ole K. Hejlesen
2012 conf
MIE
Algy Bonderup, Stine Veje Hangaard, Pernille Heyckendorff Lilholt, Mette Dencker Johansen, Ole K. Hejlesen
2012 conf
HEALTHINF
J. Lauritzen, Eirik Årsand, Alexander Horsch, Luis Fernández-Luque, Taridzo Chomutare, Johan Gustav Bellika, Ole K. Hejlesen, Gunnar Hartvigsen
2011 conf
MIE
Morten Algy Bonderup, Stine Veje Hangaard, Pernille Heyckendorff Lilholt, Mette Dencker Johansen, Ole K. Hejlesen
2011 conf
MIE
Birthe Dinesen, Stig Kjær Andersen, Ole K. Hejlesen, Egon Toft
2010 conf
MedInfo
Peter Brønnum Nielsen, Søren Lundbye-Christensen, Torben Bjerregaard Larsen, Lars Hvilsted Rasmussen, Søren Risom Kristensen, Anna-Marie Münster, Ole K. Hejlesen
2009 conf
MIE
Peter Brønnum Nielsen, Esben Haldrup Eriksen, Rasmus Thoft Milthers, Ole K. Hejlesen
2009 conf
MIE
Ole K. Hejlesen, Simon Lebech Cichosz, Steffen Vangsgaard, Mikkel Frank Andresen, Lars Peter Madsen
2009 conf
MIE
Anne Thilde Andersen, Nikolaj Børty Nielsen, Michael Trudslev, Behamin Bakhshaie, Shona Pedersen, Ole K. Hejlesen
2008 conf
MIE
Taxiarchis Botsis, Ole K. Hejlesen, Johan Gustav Bellika, Gunnar Hartvigsen
2006 conf
Probabilistic Graphical Models
Kristian G. Olesen, Ole K. Hejlesen, Ram Dessau, Ivan Beltoft, Michael Trangeled
2005 conf
MIE
Ole K. Hejlesen, Kristian G. Olesen, Ram Dessau, Ivan Beltoft, Michael Trangeled
2004 conf
MedInfo
Ole K. Hejlesen, Bernhard M. Ege, Karl-Hans Englmeier, Steve Aldington, Leo McCanna, Toke Bek
2003 J jnl
Int. J. Medical Informatics
Egil Boisen, Ann Bygholm, David A. Cavan, Ole K. Hejlesen
2003 J jnl
Int. J. Medical Informatics
Søren Plougmann, Ole K. Hejlesen, David A. Cavan
2003 J jnl
Int. J. Medical Informatics
Søren Plougmann, Ole K. Hejlesen, Benjamin Turner, David Kerr, David A. Cavan
2001 J jnl
Int. J. Medical Informatics
Søren Plougmann, Ole K. Hejlesen, David A. Cavan
2001 conf
MedInfo
Ole K. Hejlesen, Søren Plougmann, Bernhard M. Ege, Ole Vilhelm Larsen, Toke Bek, David A. Cavan
2000 J jnl
Comput. Methods Programs Biomed.
Bernhard M. Ege, Ole K. Hejlesen, Ole Vilhelm Larsen, Karina Møller, Barry Jennings, David Kerr, David A. Cavan
1999 J jnl
IEEE Trans. Biomed. Eng.
Roman Hovorka, Romulus S. Tudor, David Southerden, Darryl R. Meeking, Steen Andreassen, Ole K. Hejlesen, David A. Cavan
1998 conf
MedInfo
Ann Bygholm, Ole K. Hejlesen, Christian Nøhr
1998 J jnl
Int. J. Medical Informatics
Christian Nøhr, Ann Bygholm, Ole K. Hejlesen
1995 B conf
AIME
Ole K. Hejlesen, Steen Andreassen, Stig K. Andersen
docs/apk-code-schema.md
← Index docs/apk-code-schema.md markdown
# APK Code Analysis — ClickHouse Schema

All tables follow the `ReplacingMergeTree(analysis_date)` pattern from
`docs/new-code-binja-schema.md`, except `code_apk_analysis_errors` which
uses `MergeTree()`.

**Companion PDD:** `APK_CODE_ANALYSIS_PDD-Tech_Annex.md` §7

---

## Table overview

| # | Table | Analog (Binja) | Engine | Key |
|---|-------|----------------|--------|-----|
| 1 | `code_apk_decompiled_methods_content` | `code_binja_decompiled_functions_content` | ReplacingMergeTree | `decompiled_method_hash` |
| 2 | `code_apk_decompiled_methods_references` | `code_binja_decompiled_functions_references` | ReplacingMergeTree | `(sha256, decompiled_method_hash)` |
| 3 | `code_apk_smali_methods_content` | `code_binja_disassembled_functions_content` | ReplacingMergeTree | `smali_method_hash` |
| 4 | `code_apk_smali_methods_references` | `code_binja_disassembled_functions_references` | ReplacingMergeTree | `(sha256, smali_method_hash)` |
| 5 | `code_apk_method_similarity_metrics` | `code_binja_function_similarity_metrics` | ReplacingMergeTree | `smali_method_hash` |
| 6 | `code_apk_cfg_methods` | `code_binja_cfg_functions` | ReplacingMergeTree | `smali_method_hash` |
| 7 | `code_binja_strings_raw` *(shared)* | — | Null (→ MV) | — |
| 8 | `code_apk_analysis_errors` | `function_analysis_errors_binja` | MergeTree | `(sha256, error_location, error_hash)` |

---

## Table 1: `code_apk_decompiled_methods_content`

**Analog:** `code_binja_decompiled_functions_content`

```sql
CREATE TABLE IF NOT EXISTS code_apk_decompiled_methods_content (
    decompiled_method_hash FixedString(64),          -- SHA-256 of normalized Java source
    decompiled_method String CODEC(ZSTD(3)),          -- Full Java method source
    decompiled_method_type Enum8('USER'=1, 'LIBRARY'=2, 'UNKNOWN'=5) DEFAULT 'UNKNOWN',
    decompiled_has_string_encryption UInt8 DEFAULT 0,
    decompiled_has_reflection_calls UInt8 DEFAULT 0,
    decompiled_excessive_goto_count UInt8 DEFAULT 0,
    analysis_date DateTime64(3, 'UTC'),

    INDEX idx_method_content_token lower(decompiled_method) TYPE tokenbf_v1(32768, 3, 0) GRANULARITY 1
) ENGINE = ReplacingMergeTree(analysis_date)
ORDER BY decompiled_method_hash;
```

## Table 2: `code_apk_decompiled_methods_references`

**Analog:** `code_binja_decompiled_functions_references`

```sql
CREATE TABLE IF NOT EXISTS code_apk_decompiled_methods_references (
    sha256 FixedString(64),
    decompiled_method_hash FixedString(64),
    smali_method_hash Nullable(FixedString(64)),
    decompiled_class_name LowCardinality(String),
    decompiled_method_name LowCardinality(String),
    decompiled_method_signature String,               -- Dalvik descriptor: (Landroid/os/Bundle;)V
    decompiled_method_prototype String,               -- Java-style: void onCreate(Bundle)
    functions_caller Array(String),
    functions_call Array(String),
    analysis_date DateTime64(3, 'UTC'),

    INDEX idx_decompiled_class_name decompiled_class_name TYPE tokenbf_v1(32768, 3, 0) GRANULARITY 1,
    INDEX idx_decompiled_method_name decompiled_method_name TYPE tokenbf_v1(32768, 3, 0) GRANULARITY 1,
    INDEX idx_functions_caller functions_caller TYPE tokenbf_v1(32768, 3, 0) GRANULARITY 1,
    INDEX idx_functions_call functions_call TYPE tokenbf_v1(32768, 3, 0) GRANULARITY 1
) ENGINE = ReplacingMergeTree(analysis_date)
ORDER BY (sha256, decompiled_method_hash);
```

## Table 3: `code_apk_smali_methods_content`

**Analog:** `code_binja_disassembled_functions_content`

```sql
CREATE TABLE IF NOT EXISTS code_apk_smali_methods_content (
    smali_method_hash FixedString(64),                -- SHA-256 of normalized smali body
    smali_method String CODEC(ZSTD(3)),               -- Full smali method body
    smali_method_type Enum8('USER'=1, 'LIBRARY'=2, 'UNKNOWN'=5) DEFAULT 'UNKNOWN',
    smali_instructions_count UInt32,
    smali_register_count UInt16,
    smali_has_string_encryption UInt8 DEFAULT 0,
    smali_has_reflection_calls UInt8 DEFAULT 0,
    smali_excessive_goto_count UInt8 DEFAULT 0,
    smali_flattened_score Float64 DEFAULT 0.0,       -- Control flow flattening score (0.01.0)
    smali_mba_score Float64 DEFAULT 0.0,             -- Mixed boolean-arithmetic score (0.01.0)
    analysis_date DateTime64(3, 'UTC'),

    INDEX idx_smali_ngram smali_method TYPE ngrambf_v1(3, 32768, 3, 0) GRANULARITY 1,
    INDEX idx_smali_method_type smali_method_type TYPE set(3) GRANULARITY 1,
    INDEX idx_smali_instr_count smali_instructions_count TYPE minmax GRANULARITY 4,
    INDEX idx_smali_reg_count smali_register_count TYPE minmax GRANULARITY 4,
    INDEX idx_smali_flattened smali_flattened_score TYPE minmax GRANULARITY 4,
    INDEX idx_smali_mba smali_mba_score TYPE minmax GRANULARITY 4
) ENGINE = ReplacingMergeTree(analysis_date)
ORDER BY smali_method_hash;
```

## Table 4: `code_apk_smali_methods_references`

**Analog:** `code_binja_disassembled_functions_references`

```sql
CREATE TABLE IF NOT EXISTS code_apk_smali_methods_references (
    sha256 FixedString(64),
    smali_method_hash FixedString(64),
    decompiled_method_hash Nullable(FixedString(64)),
    smali_class_name LowCardinality(String),
    smali_method_name LowCardinality(String),
    smali_method_signature String,
    analysis_date DateTime64(3, 'UTC'),

    INDEX idx_smali_class_name smali_class_name TYPE tokenbf_v1(32768, 3, 0) GRANULARITY 1,
    INDEX idx_smali_method_name smali_method_name TYPE tokenbf_v1(32768, 3, 0) GRANULARITY 1
) ENGINE = ReplacingMergeTree(analysis_date)
ORDER BY (sha256, smali_method_hash);
```

## Table 5: `code_apk_method_similarity_metrics`

**Analog:** `code_binja_function_similarity_metrics`

Content-based fuzzy matching table. Structural/CFG scalars (block_count, edge_count, etc.)
are in `code_apk_cfg_methods` (Table 6) — this table holds only fuzzy hashes and MinHash.

```sql
CREATE TABLE IF NOT EXISTS code_apk_method_similarity_metrics (
    smali_method_hash FixedString(64),
    -- Raw smali fuzzy hashes (analog: ssdeep_disassembly / tlsh_disassembly)
    ssdeep_smali Nullable(String),
    tlsh_smali Nullable(FixedString(72)),
    -- Semantically normalized smali fuzzy hashes (analog: ssdeep_llil / tlsh_llil)
    ssdeep_smali_normalized Nullable(String),
    tlsh_smali_normalized Nullable(FixedString(72)),
    minhash Array(UInt8),
    analysis_date DateTime64(3, 'UTC'),

    INDEX idx_ssdeep ssdeep_smali TYPE bloom_filter GRANULARITY 1,
    INDEX idx_tlsh tlsh_smali TYPE bloom_filter GRANULARITY 1,
    INDEX idx_ssdeep_norm ssdeep_smali_normalized TYPE bloom_filter GRANULARITY 1,
    INDEX idx_tlsh_norm tlsh_smali_normalized TYPE bloom_filter GRANULARITY 1
) ENGINE = ReplacingMergeTree(analysis_date)
ORDER BY smali_method_hash;
```

## Table 6: `code_apk_cfg_methods`

**Analog:** `code_binja_cfg_functions` (see `db_migration/cfg_functions_ddl.sql`)

Structural and topological features computed from smali CFG. All fields mirror
the Binja table with APK-appropriate naming.

```sql
CREATE TABLE IF NOT EXISTS code_apk_cfg_methods (
    -- Identity
    smali_method_hash FixedString(64),

    -- Tier 0: Exact structural match
    cfg_topology_hash FixedString(16),

    -- Tier 1: Structural pre-filtering
    block_count UInt16,
    edge_count UInt16,
    cfg_instructions_count UInt32,            -- Dalvik instruction count (analog: llil_total_operations)
    call_count UInt16,
    cyclomatic_complexity UInt16,
    loop_count UInt16,
    max_depth UInt16,
    max_fan_out UInt16,
    md_index_topdown UInt64,
    md_index_bottomup UInt64,
    prime_product_smali UInt64,              -- Dalvik semantic primes (analog: prime_product_llil)

    -- Tier 2: Fuzzy matching
    cfg_feature_tlsh Nullable(FixedString(72)),
    wl_minhash Array(UInt8),

    -- Embedding-ready storage
    bb_features Array(Array(UInt16)),        -- ACFG block feature vectors
    cfg_adjacency Array(UInt32),             -- Packed (src << 16 | tgt)

    analysis_date DateTime64(3, 'UTC'),

    -- Indexes
    INDEX idx_topology cfg_topology_hash TYPE bloom_filter GRANULARITY 1,
    INDEX idx_complexity cyclomatic_complexity TYPE minmax GRANULARITY 4,
    INDEX idx_block_count block_count TYPE minmax GRANULARITY 4,
    INDEX idx_edge_count edge_count TYPE minmax GRANULARITY 4,
    INDEX idx_call_count call_count TYPE minmax GRANULARITY 4,
    INDEX idx_cfg_instr_count cfg_instructions_count TYPE minmax GRANULARITY 4,
    INDEX idx_loop_count loop_count TYPE minmax GRANULARITY 4,
    INDEX idx_max_depth max_depth TYPE minmax GRANULARITY 4,
    INDEX idx_max_fan_out max_fan_out TYPE minmax GRANULARITY 4,
    INDEX idx_md_topdown md_index_topdown TYPE minmax GRANULARITY 4,
    INDEX idx_md_bottomup md_index_bottomup TYPE minmax GRANULARITY 4,
    INDEX idx_prime prime_product_smali TYPE bloom_filter GRANULARITY 1,
    INDEX idx_cfg_tlsh cfg_feature_tlsh TYPE bloom_filter GRANULARITY 1
) ENGINE = ReplacingMergeTree(analysis_date)
ORDER BY smali_method_hash;
```

**Column mapping (APK → Binja):**

| APK column | Binja column | Notes |
|------------|-------------|-------|
| `smali_method_hash` | `disassembled_function_hash` | Both SHA-256 of normalized code |
| `cfg_instructions_count` | `llil_total_operations` | Dalvik instructions vs LLIL operations |
| `prime_product_smali` | `prime_product_llil` | Same prime algorithm, Dalvik semantic categories |
| All others | Same name | Identical algorithms from shared `cfg_features.py` |

## Table 7: `code_binja_strings_raw` (shared)

APK strings are inserted into the existing `code_binja_strings_raw` Null-engine table,
which feeds materialized views (`code_binja_strings_by_binary`, `mv_string_popularity_public`).
This enables cross-format string correlation between PE/ELF/Mach-O/APK samples.

No new table creation needed — see `docs/new-code-binja-schema.md` for the existing DDL.

## Table 8: `code_apk_analysis_errors`

**Analog:** `function_analysis_errors_binja`

```sql
CREATE TABLE IF NOT EXISTS code_apk_analysis_errors (
    sha256 FixedString(64),
    class_name Nullable(String) CODEC(ZSTD(3)),
    method_name Nullable(String) CODEC(ZSTD(3)),
    error_location LowCardinality(String) CODEC(ZSTD(3)),   -- 'jadx', 'apktool', 'androguard', 'analysis'
    error_message Nullable(String) CODEC(ZSTD(3)),
    error_type Nullable(String) CODEC(ZSTD(3)),
    error_hash FixedString(32),                               -- MD5 for dedup
    status Enum8('new' = 1, 'investigating' = 2, 'fixed' = 3, 'wontfix' = 4) DEFAULT 'new',
    analysis_date DateTime64(3, 'UTC')
) ENGINE = MergeTree()
ORDER BY (sha256, error_location, error_hash);
```