From Heuristics to Transformers: A Comprehensive Survey of Type Inference from Stripped Binaries


Abstract

The recovery of high-level type information from stripped binaries—executables devoid of symbol tables and debugging information—is a cornerstone of software reverse engineering, vulnerability analysis, and decompilation. This survey tracks the evolution of binary type inference from early rule-based heuristics and static analysis to modern deep learning architectures. We analyze the shift from "duck typing" and constraint-solving techniques (e.g., BITY, BinSub) to context-aware neural models (e.g., EKLAVYA, CATI) and finally to state-of-the-art Transformer and Graph Neural Network (GNN) architectures (e.g., SeeType, TYGR). We identify core challenges, including optimization-induced semantics loss and structural type recovery, and propose future research directions in neuro-symbolic inference.

<ccs2012> <concept> <concept_id>10011007.10011006.10011008.10011009</concept_id> <concept_desc>Software and its engineering Language types</concept_desc> <concept_significance>500</concept_significance> </concept> <concept> <concept_id>10011007.10011006.10011041</concept_id> <concept_desc>Software and its engineering Compilers</concept_desc> <concept_significance>500</concept_significance> </concept> </ccs2012>

1 Introduction↩︎

The rapid proliferation of software in modern society has made the ability to analyze and understand executable binaries a critical necessity for cybersecurity [1][3]. Whether for the purpose of vulnerability discovery [4][6] and malware analysis [7] in legacy systems, or verifying the security of closed-source third-party components, the field of binary reverse engineering serves as the primary line of defense. However, the task of understanding a program without access to its source code is an inherently asymmetric struggle [8].

Fundamentally, compilation is a lossy transformation. High-level programming languages provide developers with powerful abstractions—most notably data types—that impart semantic meaning to raw data [9]. During compilation, these abstractions are stripped away. What was once a “struct student_record” or a “char* buffer” is reduced to a generic sequence of loads and stores into fixed-size registers and memory offsets. In "stripped" binaries, the loss is even more severe: symbol tables and debugging information (such as DWARF) are removed to minimize file size and protect proprietary logic, leaving behind a “semantic desert” of raw assembly instructions.

The Role of Type Inference. Binary Type Inference (BTI) is the process of reconstructing these high-level types from machine code [10], [11]. It is perhaps the most critical component of a modern decompiler. Precise type information acts as the "glue" that allows a decompiler to transform flat assembly into structured, human-readable C-like code. Without it, pointers cannot be distinguished from integers, and the boundaries of complex data structures (e.g., arrays, structures, and unions) remain invisible [12]. Moreover, type inference is a prerequisite for advanced security applications, such as Control-Flow Integrity (CFI) [13], where type-signature matching is used to restrict the possible targets of indirect function calls, thereby mitigating return-oriented programming (ROP) attacks.

From Heuristics to Deep Learning. For decades, type inference was the domain of manual expert knowledge. Classic tools like IDA Pro [14] and Ghidra [15] relied on rule-based heuristics, often referred to as "Duck Typing"—the logic that if a variable is used as an index into memory, it must be an array or a pointer. While effective for simple cases, these heuristics are brittle. They struggle with aggressive compiler optimizations (e.g., -O3) that reorder code and reuse registers for multiple variables of different types. Furthermore, the sheer variety of instruction set architectures (ISAs)—from x86 and ARM to MIPS and AArch64—makes it impossible for human analysts to keep pace by writing manual rules for every new compiler idiom.

To address these limitations, the research community has recently pivoted toward data-driven approaches. The evolution of BTI can be viewed through three major waves: (1) Constraint-Solving & Logic: Systems like IDA Pro [14], [16], SmartDec [17], Snowman [18], and BinSub [19], which treat type inference as a mathematical constraint problem, seeking a logically consistent “principal type.” (2) Sequential Neural Models: The application of Natural Language Processing (NLP) techniques, such as Support Vector Machines (SVM) in BITY [20], Recurrent Neural Networks (RNNs) in EKLAVYA [21] and Convolutional Neural Networks (CNNs) in CATI [22], which treat assembly instructions as "sentences" to capture local usage context. (3) Structural & Contextual Transformers: The latest frontier, represented by Graph Neural Networks (GNNs) like TYGR [23] and Transformer-based models like SeeType [24]. These models capture the global "shape" of data flow and the long-range dependencies of large functions, achieving unprecedented accuracy in reconstructing fine-grained struct types.

Objective of this Survey. Despite the significant progress in the field, there remains a lack of a unified perspective on how these diverse methodologies relate to one another. This survey provides a comprehensive analysis of the transition from heuristics to Transformers. We categorize the state-of-the-art based on their underlying representation—be it sequential, graph-based, or algebraic—and evaluate their performance across different architectures and optimization levels. By synthesizing insights from over a dozen seminal works, we identify the recurring challenges of "orphan variables" and structural reconstruction, ultimately outlining a roadmap for the next generation of "Neuro-Symbolic" type inference engines.

2 The Anatomy of Binary Type Inference↩︎

To understand how high-level types are recovered from a stripped binary, one must first understand the structural chasm between source code and machine code. Figure 1 illustrates the end-to-end workflow of this recovery process, tracing the transformation of a program from its lowest-level representation back to a human-readable high-level form. Binary Type Inference (BTI) is essentially an inverse problem: it attempts to map a low-level, untyped execution environment back to a high-level, typed semantic space. This section breaks down the "anatomy" of this process into its four foundational components, as shown in Figure 2: Variable Identification, Intermediate Representation (IR) Lifting, Feature Extraction, and the Type Resolution Engine.

Figure 1: Type Inference From Binary Code.
Figure 2: Overall Binary Type Inference Pipeline.

2.1 Variable Identification and Recovery.↩︎

The first challenge is identifying the "entities" that require a type. In source code, variables have symbolic names and explicit scopes. In a binary, these are replaced by three types of storage locations:

  • Registers: Temporary, high-speed storage (e.g., rax, ebp). In optimized code, the same register may hold a pointer at the beginning of a function and an integer at the end.

  • Stack Offsets: Local variables stored relative to the stack pointer (esp/rsp) or base pointer (ebp/rbp).

  • Global/Heap Memory: Fixed addresses in the data section or dynamic addresses returned by allocators like malloc.

Table 1: Methodological Comparison Across BTI Research Eras
Anatomical Component Heuristic Era (e.g., IDA/Ghidra) Sequential Era (e.g., EKLAVYA/CATI) Structural Era (e.g., SeeType/TYGR/BinSub)
Variable Recovery Simple stack/register tracking Metadata-based (DWARF) or basic VSA Advanced program slicing and inter-procedural VSA
IR Representation Native assembly (x86/ARM) Sanitized token streams Normalized VEX or P-Code IR
Feature Focus Local mnemonic idioms Local window (VUC) context Global data-flow graph topology
Resolution Logic Hardcoded If–Then rules Statistical pattern matching Neural attention or algebraic subtyping
Numeric Handling Hex-only literals Masked as generic IMM tokens Numeric-aware tokenization or bitvectors

Tools like BITY [10], [20] and TYGR [23] use Value-Set Analysis (VSA) or function-frame analysis to group these memory accesses into “abstract variables.” However, optimizations such as Frame Pointer Omission (FPO) significantly distort this process. By eliminating the stable base pointer (ebp/rbp), FPO forces the system to calculate offsets relative to a volatile stack pointer (rsp) that shifts with every push or pop. Consequently, a single conceptual variable may be accessed via multiple differing offsets (e.g., rsp+0x10 then rsp+0x18), leading to fragmented variable recovery before type inference even begins.

2.2 Intermediate Representation (IR) Lifting.↩︎

Assembly language is architecture-specific (x86, ARM, MIPS), making it difficult to build a universal inference engine. To achieve "cross-arch" support, modern frameworks lift raw machine code into an architecture-agnostic Intermediate Representation (IR).

The VEX IR (used by angr and TYGR) or LLVM-IR simplifies complex instructions into “micro-operations.” For example, a single x86 push instruction is decomposed into a memory store followed by a stack pointer decrement. This normalization allows the inference engine to see the “essence” of the data movement—such as a 4-byte write—regardless of the CPU architecture.

Feature Extraction: The “Usage Clues”. Binary type inference relies on the “Duck Typing” principle: If it is used like a pointer, it is a pointer. The “anatomy” of an inference system is defined by which features it chooses to extract: (1) Data-Flow Features: Tracking how a value from a call (e.g., malloc) flows into a register [25]. If that register is later used as a base for an offset (e.g., [rax + 4]), the engine extracts a “struct” or “array” feature. (2) Contextual Features: As highlighted in CATI [22], the instructions surrounding a variable provide a "Variable Usage Context" (VUC). If a variable is surrounded by floating-point arithmetic instructions, it is likely a float or double. (3) Structural Features: TYGR [23] and SeeType [24] extract the "shape" of data flow. By representing the function as a graph, they can see that a specific variable acts as a "sink" for multiple incoming data edges, a pattern typical of function parameters or structure fields.

2.3 The Type Resolution Engine.↩︎

The final component is the "brain" that maps features to labels. This engine generally falls into one of two categories: (1) Logical Solvers: Systems like BinSub treat types as a set of constraints. If Variable \(A\) is assigned to Variable \(B\), then \(Type(A) \leq Type(B)\). The engine uses algebraic subtyping to find the most specific type that satisfies all constraints. (2) Probabilistic Models: Modern Transformer-based engines like SeeType treat type inference as a translation or classification task. The engine outputs a probability distribution (e.g., 85% chance of int*, 10% void*, 5% int).

2.4 Methodological Comparison Across Eras.↩︎

The anatomy of BTI has shifted significantly over the decades. In the Heuristic Era, the components were rigid and reactive, resolving types only when a specific, unambiguous idiom (like a pointer dereference) was encountered. In the Sequential Era, the focus moved to linguistic context, treating assembly as a stream of tokens. Today, in the Structural Era, systems prioritize graph topology and long-range dependencies. Table 1 summarizes how these anatomical components are implemented across the different research generations.

3 Paradigms of Inference: From Symbolic Logic to Neural Context↩︎

To understand the evolution of Binary Type Inference (BTI), we must first examine the "Semantic Gap" between source code and stripped executables. We present a running example in Listings [fig:moti1][fig:moti3] to illustrate the challenges of reconstructing high-level abstractions.

3.1 The Semantic Gap↩︎

Listing [fig:moti1] defines a structure Point and an array of integers. In the source, these are distinct types with clear boundaries. However, once compiled into the Listing [fig:asm] assembly, these abstractions vanish. For instance, the assignment pp->y = 4 is lowered to movl $4, 4(%rax). Without a symbol table, an automated tool cannot inherently know if 4(%rax) refers to a structure field, an array index, or a random stack offset.

The difficulty is further evidenced by modern decompilers. Listing [fig:moti2] (Hex-Ray of IDA Pro) fails to recover the Point structure, instead splitting it into two unrelated scalar variables (v8 and v9). Listing [fig:moti3] (SmartDec) manages to identify the loops but labels the array pointer as a generic void*, losing the type-specific "scale" of the data. These failures highlight the four primary paradigms used to bridge this gap.

3.2 Algebraic Subtyping and Symbolic Logic↩︎

Historically, BTI was conceptualized as a constraint satisfaction problem over a formal type lattice, predicated on the assumption that while explicit type labels are erased, the implicit constraints governing data movement are preserved.

Foundational systems such as TIE lee2011tie? and Retypd [26] generate subtyping constraints derived from instruction behavior. For example, the instruction mov eax, [ebx+8] implies a constraint where ebx must be a pointer to an aggregate type, and the field at offset 8 must be bit-width compatible with eax. More recently, BinSub [19] reformulated this process by modeling binary types as a distributive lattice. By applying Bi-unification, BinSub reduces complex recursive constraints into simplified “principal types,” allowing for more efficient resolution.

While these algebraic methods offer the advantage of explainability and formal soundness, they are inherently fragile. They rely heavily on complete code coverage; in cases of “orphan variables”—variables with sparse usage or no direct data flow to well-known library calls—the system lacks sufficient constraints to resolve a specific type, often defaulting to a generic top-type.

Table 2: Comparison of Core Methodologies for Binary Type Inference
Metric Constraint Solving Sequential (RNN/CNN) Graph (GNN) Transformer
Logic Basis Formal Rules Linguistic Pattern Structural Topology Global Attention
Accuracy High (if solved) Moderate High State-of-the-Art
Handling Sparse Data Poor Good Excellent Excellent
Function Size Scales well Struggles with length Compute intensive Uses Slicing
Primary Tools BinSub / Retypd EKLAVYA / CATI TYGR SeeType

3.3 Sequential Modeling↩︎

Inspired by Natural Language Processing (NLP), this approach treats binary instructions as textual sequences, deriving the meaning of a variable from the context in which it appears.

Systems such as EKLAVYA [21] and BITY [20] pioneered the use of Word Embeddings (e.g., Word2Vec [27]) to map opcodes and operands into a high-dimensional vector space. These sequences are processed by Recurrent Neural Networks (RNNs) to identify latent type patterns. A significant advancement in this domain was the introduction of the "Variable Usage Context" (VUC) by CATI [22]. Capitalizing on the principle of Same Type Variable Clustering—the observation that neighboring instructions tend to operate on semantically similar data—CATI utilizes Convolutional Neural Networks (CNNs) to capture local spatial locality.

While these models excel at “intuitive” inference for variables lacking formal constraints, they are limited by the sequential nature of their architecture. RNN-based approaches, in particular, suffer from the vanishing gradient problem, making them prone to “forgetting” distant instructions that may contain the only definitive clue regarding a variable’s type.

3.4 Topological Reasoning via GNNs↩︎

Recognizing that program execution forms a complex web of dependencies rather than a linear sequence, this approach shifts focus from sequential instruction streams to rich topological graphs.

Approaches such as TYGR [23] lift binary code to an Intermediate Representation (IR), such as VEX, to construct a Data-Flow Graph (DFG). In this topology, nodes represent values and edges represent operations (e.g., Load, Store, Add). Through iterative message passing, Graph Neural Networks (GNNs) update node embeddings by aggregating features from neighbors. For instance, if a node is connected to a Dereference operation, this structural feature propagates back to the source node, increasing the probability of it being classified as a Pointer. This topological approach is uniquely suited for reconstructing complex structures, as GNNs can capture the distinct “branching” patterns of structure member accesses more effectively than linear models.

3.5 Transformer-Based Global Modeling↩︎

The current state-of-the-art leverages the Transformer architecture and the Self-Attention mechanism to transcend the limitations of both local context windows and complex graph generation.

Models like SeeType [24] utilize the Self-Attention mechanism to model global dependencies. Unlike RNNs, which process input sequentially, Transformers compute an Attention Score between every pair of instructions in a function simultaneously. This allows the model to instantly resolve long-range dependencies, linking a variable’s initialization to its usage hundreds of lines later. To maintain computational feasibility, these systems often employ Program Slicing, filtering out noise instructions to focus the model on the relevant slice of execution.

Crucially, this generation of models addresses the "Numeric Literacy" gap. Unlike predecessors that masked immediate values as generic tokens, modern Transformers incorporate Numeric-Aware Tokenization. This allows the model to interpret specific offsets (e.g., 0x8, 0x10) as explicit architectural hints for structure layout recovery rather than random noise.

typedef struct {
    int x;
    int y;
} Point;

void main(){
    Point p, *pp;
    pp = &p;

    pp -> x = 3;
    pp -> y = 4;

    int a[5];
    for (int i = 0; i < 5; i++)
        a[i]=0;

    int *q = a;
    for (int i = 0; i < 5; i++)
        *(q + i) = 0;
}
.LFB0:  .cfi_startproc
        endbr64
        pushq   %rbp
        .cfi_def_cfa_offset 16
        .cfi_offset 6, -16
        movq    %rsp, %rbp
        .cfi_def_cfa_register 6
        subq    $64, %rsp
        movq    %fs:40, %rax
        movq    %rax, -8(%rbp)
        xorl    %eax, %eax
        leaq    -40(%rbp), %rax
        movq    %rax, -56(%rbp)
        movq    -56(%rbp), %rax
        movl    $3, (%rax)
        movq    -56(%rbp), %rax
        movl    $4, 4(%rax)
        movl    $0, -64(%rbp)
        jmp     .L2
.L3:    movl    -64(%rbp), %eax
        cltq
        movl    $0, -32(%rbp,%rax,4)
        addl    $1, -64(%rbp)
.L2:    cmpl    $4, -64(%rbp)
        jle     .L3
        leaq    -32(%rbp), %rax
        movq    %rax, -48(%rbp)
        movl    $0, -60(%rbp)
        jmp     .L4
        ...
int_cdecl main(int argc, const char **argv, const char **envp)
{
    signed int j; // [sp+4Ch] [bp-30h]@4
    signed int i; // [sp+54h] [bp-28h]@1
    int v6[5]; // [sp+58h] [bp-24h]@3
    char *v7; // [sp+6Ch] [bp-10h]@1
    char v8; // [sp+70h] [bp-Ch]@1
    signed int v9; // [sp+74h] [bp-8h]@1 

    V7 = &U8;
    *(_DW0RD *)&U8 = 3;
    v9=4;
    for(i=0;i<5;++i)
        v6[i]=0;
    for(j=0;j<5;++j)
        v6[j]=0;
    return 0;
}
void main() {
    int32_t ebp1;
    int32_t esp2;
    int32_t v3;
    void* v4;
    int32_t v5:s
    ebp1 = esp2 -4;
    v3 = 0;
    
    while (v3<5) {
        *(int32_t*)(ebp1 +v3 * 4 + -36) = 0;
        ++v3;
    }
    v4 = (void*)(ebp1 + -36);
    v5 = 0;
    while (v5 < 5) {
        *(int32_t*)((int32_t)v4 +v5 * 4) = 0;
        ++v5;
    }
    return:
}

3.6 Methodological Comparison Matrix↩︎

Table 2 sthe comparative strengths and limitations of the four primary BTI paradigms. The historical trajectory reveals a distinct trade-off between formal rigor and generalization capability. The transition across these paradigms reflects a shift from Global Logic to Local Context and finally to Global Attention. While symbolic logic provides a foundation of “truth,” neural models provide the "intuition" needed to navigate the ambiguity of optimized, stripped code.

Early constraint-solving approaches (e.g., BinSub [19]) provide a strong logical basis and high verifiable accuracy when constraints are complete; however, they remain brittle when confronted with sparse data or orphan “variables” where local clues are insufficient. The subsequent shift toward sequential neural models (e.g., EKLAVYA [21]) introduced a probabilistic “linguistic” perspective, significantly improving robustness on sparse inputs but struggling to capture long-range dependencies within large functions. The current state-of-the-art, represented by Graph (GNN) and Transformer architectures, effectively bridges these gaps by leveraging structural topology and global attention mechanisms. While these modern deep learning models incur higher computational costs—often necessitating optimization strategies like program slicing—they achieve superior accuracy by analyzing the global “shape” of data flow rather than isolated instructions. Ultimately, this evolution reflects a fundamental paradigm shift: moving from the search for a provable symbolic “truth” to the cultivation of a statistical intuition” capable of navigating the semantic ambiguity of optimized, stripped binaries.

4 Cross-Cutting Challenges↩︎

The transition from manual heuristics to high-capacity Transformer models has significantly raised the performance ceiling of binary type inference, yet the field remains embattled by the inherent “semantic desert” of stripped code. The challenges facing modern BTI are not merely artifacts of missing symbol tables; they are the result of a fundamental tension between the high-level intent of a programmer and the low-level efficiency of machine architectures. These challenges can be synthesized into four primary obstacles: the volatility of optimized code, the “illiteracy” of neural models regarding numerical values, the inherent ambiguity of memory layouts, and the structural integrity of the data used to train models.

Semantics Loss Under Aggressive Optimization. Modern compilers prioritize execution speed and binary size over any consideration for the reverse engineer. Aggressive optimizations (e.g., -O2, -O3) fundamentally distort the “anatomy” of a program, often reordering or entirely deleting the semantic clues that human-crafted heuristics once relied upon. For instance, the widespread adoption of Frame Pointer Omission (FPO) eliminates the stable reference point provided by the base pointer (ebp/rbp), forcing inference engines to calculate stack offsets relative to a volatile stack pointer (esp/rsp) that shifts with every local operation. This creates a cascading error effect: if the variable recovery phase cannot provide a stable location, the subsequent type inference phase is essentially guessing at a moving target. Furthermore, compilers frequently reuse registers for unrelated variables across different code paths, a phenomenon known as type punning, which introduces significant label noise that confuses sequential and even some graph-based models.

The Numeric Literacy Gap. A profound methodological blind spot exists in the way deep learning models handle numerical values—addresses, bitmasks, and offsets. In high-level source code, the difference between an offset of 0x8 and 0x800 is the difference between accessing a neighboring structure field and accessing an entirely different memory region [28]. However, to prevent a “vocabulary explosion,” traditional neural models have historically masked all numerical values as generic, semantically empty tokens like “MM.” This practice effectively blinds the model to the most critical clues for structure recovery. While a Transformer may recognize that a register is being used as a base for memory access, the loss of the specific offset prevents it from reconstructing the actual layout of the data structure. Recent innovations in numeric-aware tokenization represent a vital shift, attempting to teach models that small constants are not just numbers, but explicit hints about structure membership and alignment.

Topological Ambiguity of Complex Types. While primitive types such as integers and floats are relatively easy to distinguish based on the arithmetic instructions that manipulate them, complex types like structures and unions suffer from a "topological overlap" problem. In a binary, a structure containing four 1-byte characters often looks identical to a single 32-bit integer if the compiler chooses to access the entire block via a single 4-byte move. Without the benefit of inter-procedural analysis—observing how those individual bytes are accessed in other, distant functions—the inference engine is often biased toward the simpler primitive type. This is reflected in current benchmarks: while overall type accuracy is reaching impressive heights, the accuracy for fine-grained struct member reconstruction remains a significant bottleneck. Current models can often identify a structure pointer, but they remain largely incapable of mapping the internal tree of nested members and offsets.

Dataset Integrity and the Memorization Trap. Finally, the shift toward data-driven BTI has exposed a systemic flaw in how research is evaluated. The quality of any neural model is only as good as the integrity of its training data, yet the binary analysis community has struggled with a massive duplication problem. Because compilers generate identical machine code for common library functions across different versions of a software package, many standard datasets contain nearly 90% duplicate functions. When a model is evaluated on such a dataset, its high accuracy scores are often a byproduct of rote memorization rather than a true semantic understanding of assembly logic. If the testing set contains functions that the model has effectively "seen" during training, the resulting metrics are artificially inflated. This has prompted a necessary move toward large-scale, deduplicated datasets, which force models to generalize their learning to truly novel binaries.

5 Future Directions↩︎

As binary type inference transitions from a niche reverse engineering task to a core component of autonomous security systems, the limitations of current deep learning models suggest a new frontier. The future of the field lies in resolving the tension between the "black-box" intuition of neural networks and the rigorous, verifiable logic of program analysis. We identify three high-impact directions that will likely define the research landscape over the next three to five years.

Binary Foundation Models and Self-Supervision. Current models are largely task-specific, trained from scratch on labeled datasets to perform one specific analysis. However, the success of Large Language Models (LLMs) in natural language [29][34] suggests a move toward Binary Foundation Models. These are massive models pre-trained on billions of lines of unlabeled assembly code across diverse architectures and compilers using self-supervised tasks—such as Masked Language Modeling (MLM) or Jump Target Prediction.

The value of such a foundation model is its ability to learn a “universal assembly grammar.” Once a model understands the latent relationship between registers, memory flow, and control structures across x64, ARM, and RISC-V, it can be fine-tuned for type inference with significantly less labeled data. This approach would also address the “cross-architecture” challenge; a foundation model could potentially perform Zero-Shot Inference, correctly identifying types in a binary for an architecture it has never explicitly seen before by mapping the new code’s data-flow patterns into its universal semantic space.

Case study: Generative Reconstruction via GPT-5. The promise of this approach is best illustrated by the generative capabilities of modern LLMs like GPT-5. When provided with a prompt, as shown in Figure 3 containing the assembly from Listing [fig:asm] and instructions to recover the original C logic, GPT-5 produces the code shown in Listing [fig:gpt]. Unlike traditional decompilers that fail to group related memory accesses, the LLM demonstrates a generative leap: it “imagines” a plausible struct Pair definition and assigns intuitive variable names like pair_ptr by reasoning about how the registers are used as base pointers. While this approach is promising due to its high readability and zero-shot ability to distinguish between direct array indexing and pointer arithmetic, it remains a “black-box” process prone to hallucinations. The model may synthesize code that looks idiomatic but contains subtle logic errors or violates strict machine constraints, highlighting a trade-off where semantic clarity is gained at the potential expense of formal correctness [35], [36].

Neuro-Symbolic Integration. The most prominent research gap is the lack of logical consistency in modern neural predictions. While a Transformer or GNN can provide a highly accurate "guess" based on usage patterns, these models frequently output types that are architecturally impossible or logically inconsistent with the surrounding code—such as predicting a 64-bit pointer type for a variable that only undergoes 8-bit arithmetic.

Future systems are moving toward a Neuro-Symbolic architecture [36][38]. In this paradigm, a neural model (like SeeType) acts as a high-capacity "generator" that proposes a probability distribution of potential types, while a symbolic logic engine (based on the algebraic subtyping found in BinSub) acts as a "verifier." By using the logic engine to prune the neural search space, we can ensure that the final output not only reflects the statistical patterns learned from millions of binaries but also adheres to the formal constraints of the C type system and machine semantics. This combination would provide both the coverage needed for “orphan variables” and the formal correctness required for security-critical applications like Control-Flow Integrity [39], [40].

Figure 3: Prompt for translating assembly code into C Code.
#include <stdint.h>

int main(void)
{
    struct Pair {
        int a;
        int b;
    } pair;

    int arr[5];
    struct Pair *pair_ptr = &pair;
    int *arr_ptr = arr;

    /* Initialize the pair via the pointer (matches stores through -56(%rbp)). */
    pair_ptr->a = 3;
    pair_ptr->b = 4;

    /* First loop: zero arr[0..4] using direct indexed addressing off rbp. */
    for (int i = 0; i <= 4; i++) {
        arr[i] = 0;
    }

    /* Second loop: zero arr[0..4] again, but via arr_ptr pointer arithmetic. */
    for (int i = 0; i <= 4; i++) {
        arr_ptr[i] = 0;
    }

    return 0;
}

Automated Structure and Memory Layout Synthesis. While identifying primitive types is nearing maturity, the granular reconstruction of nested data structures remains a “grand challenge.” Current state-of-the-art models often collapse a complex structure into a generic “struct” label, losing the vital internal offsets and member relationships.

The next generation of BTI must move toward End-to-End Layout Synthesis. This involves combining static data-flow analysis with "symbolic memory snapshots." Instead of simply predicting labels, future models will likely aim to output a complete Header File (.h) containing reconstructed structure definitions. This requires a leap from classification to generative structural prediction, where models must account for alignment requirements, padding, and nested pointers. Integrating the topological strengths of GNNs with the long-range attentional capabilities of Transformers will be essential to capturing how a single pointer acts as the root of a recursive, complex memory tree.

De-optimization and Semantic Normalization. Finally, as compiler optimizations continue to obscure binary semantics, research must explore Neural De-optimization. Rather than trying to infer types directly from “noisy” optimized code, a preliminary stage could use generative models to “normalize” or “de-optimize” the assembly back into a canonical form. By training models to recognize the equivalence between a complex SIMD-optimized loop and a simple C memcpy, we can simplify the environment in which type inference occurs. This would mitigate the impact of reordered instructions and register reuse, essentially providing the inference engine with a “cleaner” view of the original programmer’s intent.

6 Conclusion↩︎

Binary type inference has evolved from a reactive process of manual heuristics to a proactive discipline of structural and neural reasoning. This survey has charted the progression from early rule-based “duck typing” to modern Transformer and GNN architectures that capture global data-flow context. While deep learning has significantly raised the ceiling for accuracy and structural reconstruction, the “semantic desert” created by aggressive compiler optimization remains a critical challenge. The next frontier lies in neuro-symbolic integration, combining the formal rigor of algebraic solvers with the statistical intuition of neural foundation models. As these paradigms converge, binary analysis will move toward a fully automated reconstruction of high-level intent, providing security analysts with a clear semantic map of stripped code.

This work was supported in part by the China Postdoctoral Science Foundation-funded project (No. 2023M723736), the Basic Research Foundation of Shenzhen City (No. JCYJ20250604184202003), the Department of Education of Guangdong Province Foundation (No. 2025KTSCX216), and Guangzhou University of Software Foundation (No. KY202412).

References↩︎

[1]
H. Javed, F. Ali, B. Shah, and D. Kwak, “Binary code analysis for cybersecurity: A systematic review of forensic techniques in vulnerability detection and anti-evasion strategies,” IEEE Access, 2025.
[2]
Z. Huang, X. Qin, S. Sun, L. Zhang, H. Xu, and P. Hu, “Binary code security: The source of vulnerability, exploitation and mitigation techniques,” in 2024 international conference on meta computing (ICMC), 2024, pp. 130–138.
[3]
H. Wang et al., “Typestate-guided fuzzer for discovering use-after-free vulnerabilities,” in Proceedings of the ACM/IEEE 42nd international conference on software engineering, 2020, pp. 999–1010.
[4]
G. Xin et al., “IRHunter: Universal detection of instruction reordering vulnerabilities for enhanced concurrency in distributed and parallel systems,” IEEE Transactions on Parallel and Distributed Systems, 2025.
[5]
C. Wen et al., “Memlock: Memory usage guided fuzzing,” in Proceedings of the ACM/IEEE 42nd international conference on software engineering, 2020, pp. 765–777.
[6]
C. Wen, M. He, B. Wu, Z. Xu, and S. Qin, “Controlled concurrency testing via periodical scheduling,” in Proceedings of the 44th international conference on software engineering, 2022, pp. 474–486.
[7]
Z. Xu, C. Wen, S. Qin, and Z. Ming, “Effective malware detection based on behaviour and data features,” in International conference on smart computing and communication, 2017, pp. 53–66.
[8]
W. Shao, Q. Yang, X. Guo, and R. Cai, “A survey of available information recovery of binary programs based on machine learning,” in 2022 5th international conference on artificial intelligence and big data (ICAIBD), 2022, pp. 125–132.
[9]
V. Soni, A. Dutcher, T. Bao, and R. Wang, “Benchmarking binary type inference techniques in decompilers,” in Proceedings of the 2025 workshop on software understanding and reverse engineering, 2025, pp. 48–60.
[10]
Z. Xu, C. Wen, and S. Qin, “Learning types for binaries,” in International conference on formal engineering methods, 2017, pp. 430–446.
[11]
Z. Xu, C. Wen, S. Qin, and M. He, “Extracting automata from neural networks using active learning,” PeerJ Computer Science, vol. 7, p. e436, 2021.
[12]
D. Zeng and G. Tan, “From debugging-information based binary-level type inference to CFG generation,” in Proceedings of the eighth ACM conference on data and application security and privacy, 2018, pp. 366–376.
[13]
M. Abadi, M. Budiu, U. Erlingsson, and J. Ligatti, “Control-flow integrity principles, implementations, and applications,” ACM Transactions on Information and System Security (TISSEC), vol. 13, no. 1, pp. 1–40, 2009.
[14]
J. Ferguson and D. Kaminsky, Reverse engineering code with IDA pro. Syngress, 2008.
[15]
C. Eagle and K. Nance, The ghidra book: The definitive guide. no starch press, 2020.
[16]
I. Disassembler, http://www.hex-rays.com/idapro/The IDA Pro and Hex-Rays.” 2005.
[17]
A. Fokin, E. Derevenetc, A. Chernov, and K. Troshina, “SmartDec: Approaching c++ decompilation,” in Reverse engineering, 2011, pp. 347–356.
[18]
https://derevenets.com/Snowman decompiler. 2018.
[19]
I. Smith, “Binsub: The simple essence of polymorphic type inference for machine code,” in International static analysis symposium, 2024, pp. 425–450.
[20]
Z. Xu, C. Wen, and S. Qin, “Type learning for binaries and its applications,” IEEE Transactions on Reliability, vol. 68, no. 3, pp. 893–912, 2018.
[21]
Z. L. Chua, S. Shen, P. Saxena, and Z. Liang, “Neural nets can learn function type signatures from binaries,” in 26th USENIX security symposium (USENIX security 17), 2017, pp. 99–116.
[22]
L. Chen, Z. He, and B. Mao, “Cati: Context-assisted type inference from stripped binaries,” in 2020 50th annual IEEE/IFIP international conference on dependable systems and networks (DSN), 2020, pp. 88–98.
[23]
C. Zhu et al., “TYGR: Type inference on stripped binaries using graph neural networks,” in 33rd USENIX security symposium (USENIX security 24), 2024, pp. 4283–4300.
[24]
R. Arefin, K. Baker, and S. Mulder, “From bytes to types: Enhancing type prediction in executables with transformer-based binary analysis tool SeeType,” IEEE Access, vol. PP, pp. 1–1, Jan. 2025, doi: 10.1109/ACCESS.2025.3627183.
[25]
U. Khedker, A. Sanyal, and B. Sathe, Data flow analysis: Theory and practice. CRC Press, 2017.
[26]
M. Noonan, A. Loginov, and D. Cok, “Polymorphic type inference for machine code,” in Proceedings of the 37th ACM SIGPLAN conference on programming language design and implementation, 2016, pp. 27–41.
[27]
K. W. Church, “Word2Vec,” Natural Language Engineering, vol. 23, no. 1, pp. 155–162, 2017.
[28]
Z. Fu, J. Jiang, C. Wen, Z. Xu, and S. Qin, “MemSpate: Memory usage protocol guided fuzzing,” in International conference on formal engineering methods, 2024, pp. 237–256.
[29]
C. Wen et al., “Automatically inspecting thousands of static bug warnings with large language model: How far are we?” ACM Transactions on Knowledge Discovery from Data, vol. 18, no. 7, pp. 1–34, 2024.
[30]
Z. Ma et al., “Bridging natural language and formal specification - automated translation of software requirements to LTL via hierarchical semantics decomposition using LLMs.” in Proceedings of the 40th IEEE/ACM international conference on automated software engineering, 2025.
[31]
Z. Ma et al., “Automated LTL specification generation from industrial aerospace requirements.” in Proceedings of the 27th international symposium on formal methods (FM), 2026.
[32]
J. Su, L. Deng, C. Wen, S. Qin, and C. Tian, “Cfstra: Enhancing configurable program analysis through llm-driven strategy selection based on code features,” in International symposium on theoretical aspects of software engineering, 2024, pp. 374–391.
[33]
Y. Wang et al., “Synergizing LLM-driven semantic reasoning with assertion-guided analysis for enhanced vulnerability detection,” in 2026 IEEE international conference on software analysis, evolution and reengineering (SANER), 2026.
[34]
Y. Lin et al., “How well does knowledge injection enhance LLM-aided formal protocol modeling?” in 2026 IEEE international conference on software analysis, evolution and reengineering (SANER), 2026.
[35]
J. Cao et al., “From informal to formal incorporating and evaluating LLMs on natural language requirements to verifiable formal proofs,” in Proceedings of the 63rd annual meeting of the association for computational linguistics (volume 1: Long papers), Jul. 2025, pp. 26984–27003, doi: 10.18653/v1/2025.acl-long.1310.
[36]
C. Wen et al., “Enchanting program specification synthesis by large language models using static analysis and program verification,” in International conference on computer aided verification, 2024, pp. 302–328.
[37]
P. Hitzler and M. K. Sarker, “Neuro-symbolic artificial intelligence: The state of the art,” 2022.
[38]
B. P. Bhuyan, A. Ramdane-Cherif, R. Tomar, and T. Singh, “Neuro-symbolic artificial intelligence: A survey,” Neural Computing and Applications, vol. 36, no. 21, pp. 12809–12844, 2024.
[39]
Z. Ma, C. Wen, B. Yu, and J. Su, “Integrating ensemble learning and large language models for efficient formal verification of IP-based aerospace systems,” Information Fusion, vol. 125, p. 103466, 2026.
[40]
J. Jiang, C. Wen, Z. Fu, and S. Qin, “Ctxfuzz: Discovering heap-based memory vulnerabilities through context heap operation sequence guided fuzzing,” Science of Computer Programming, p. 103395, 2025.