LogoLogo
IDA 9.0
IDA 9.0
  • Welcome to Hex-Rays docs
    • What's new?
  • Getting Started
    • Install IDA
    • Licensing
    • Basic Usage
    • What's next?
  • User Guide
    • User Interface
      • Menu Bar
        • File
          • Load file
          • Script File
          • Script command
          • Produce output files
          • Invoke OS Shell
          • Take database snapshot
          • Save database
          • Save database as...
          • Abort IDA
          • Exit IDA
        • Edit
          • Export data
          • Undo an action
          • Redo an action
          • Clear undo history
          • Disable undo
          • Convert to instruction
          • Convert to data
          • Convert to string literal
          • Convert to array
          • Undefine a byte
          • Give Name to the Location
          • Operand types
            • Offset
            • Number
            • Perform en masse operation
            • Convert operand to character
            • Convert operand to segment
            • Complex Offset Expression
            • Convert operand to symbolic constant (enum)
            • Convert operand to stack variable
            • Change operand sign
            • Bitwise negate operand
            • User-defined operand
            • Set operand type
          • Comments
          • Functions
          • Structs
          • Segments
          • Patch core
          • Other
            • Rename Any Address
          • Plugins
        • Jump
          • Center current line in window
          • Problems List
        • Search
          • REGULAR EXPRESSION SYNTAX SUMMARY
        • View
          • Open subviews
          • Graphs
          • Message Window
          • Arrows window
          • Database snapshot manager
          • Highlighting identifiers
          • Browser options
          • Lumina options
          • Assembler level and C level types
          • C++ type details
          • Bookmarks window
          • Calculator
          • View segment registers
          • View Internal Flags
          • Hide
          • Unhide
          • Del hidden range
          • Hide all items
          • Unhide all items
          • Setup hidden items
        • Debugger
          • Debugger window
          • Process Control
            • Start process
            • Process options
            • Pause process
            • Terminate process
            • Step into
            • Step over
            • Run to cursor
            • Run until return
            • Attach to process
            • Detach from process
            • Set current ip
            • Show application screen
          • Breakpoints
          • Watches
          • Tracing
          • Source code view
            • Watch view (source level)
          • Process Memory
            • Take memory snapshot
            • Manual memory regions
            • Refresh memory
          • Thread list
          • Module list
          • Stack trace
          • Exceptions
          • Debugger options
          • Switch debugger
        • Lumina
        • Options
          • Low & High Suspicious Operand Limits
        • Windows
          • Rename a stack variable
          • Miscellanous Options
          • Environment variables
          • Reset Hidden Messages
          • Various dialog help messages
        • List of all menu options
      • Desktops
      • Command line
      • How To Use List Viewers in IDA
      • Licenses
        • Apache License for Ghidra
        • Apache License for LLVM
        • Common Public License Version 1.0
        • APPLE PUBLIC SOURCE LICENSE
        • PCRE2 LICENCE
        • GNU Lesser General Public License v2.1 for libiberty
      • Database conversion from idb to i64
    • Disassembler
      • Interactivity
      • Background Analysis
      • Graph view
        • Graphing tutorial
      • Proximity view
      • Navigation
        • Anchor
        • How to Enter a Segment Value
        • How to Enter a Number
        • How to Enter an Identifier
        • How to enter text
        • How to Enter an Address
      • Disassembly Gallery
        • Philips 51XA-G3
        • 6502 and 65C02 Disassembler
        • 6301, 6303, 6800, 6801 and 6803 Disassembler
        • 68040, Amiga
        • 6805 Disassembler
        • 6808 Disassembler
        • 6809 OS9 Flex Disassembler
        • 6809 Disassembler
        • 6811 Disassembler
        • 68HC12 Disassembler
        • 68HC16 Disassembler
        • 68k Amiga Disassembler
        • 68k Mac OS
        • 68k Palm Pilot
        • Unix COFF
        • NEC 78k0 and 78k0s Processor
        • 80196 Processor
        • 8051 Disassembler
        • Analog Devices 218x.
        • Alpha Processor – NT COFF
        • Alpha Processor – Unix ELF
        • Android ARM Executables (.elf)
        • ARC Processor
        • ARM Processor EPOC App
        • ARM Processor EPOC PE File
        • ARM Processor EPOC ROMFile
        • EPOC SIS File Handler
        • ARM Processor iOS (iPhone): Unlock
        • ARM Processor iOS (iPhone): Objective-C metadata
        • ARM Processor iOS (iPhone): Objective-C Instance variables
        • ARM Processor iOS (iPhone): Parameter Identification & Tracking (PIT)
        • ARM Processor iOS (iPhone): Start
        • ARM Processor iOS (iPhone): Switch statements
        • ARM Processor iOS (iPhone): C++ signatures
        • ARM Processor iOS (iPhone): Write
        • ARM Processor: Linux ELF
        • ARM Processor: AOF SDK
        • ARM Processor: Windows CE COFF Format
        • ARM Processor: Windows CE PE Format
        • ATMEL AVR Disassembler
        • C166 Processor
        • C166 Processor with ELF file
        • Rockwell C39
        • Microsoft .NET CLI Disassembler. VisualBasic library
        • CR16
        • Android Dalvik Executables (.dex)
        • Microsoft .NET CLI Disassembler
        • DSP56K
        • Fujitsu FR (.elf)
        • Gameboy
        • H8 300: COFF FILE Format
        • H8 300s: COFF FILE Format
        • H8 500
        • HPPA Risc Processor: HP-UX SOM
        • i51
        • i860
        • Intel i960
        • Intel IA-64 (Itanium)
        • Java Bytecode
        • Angstrem KR 1878
        • Renesas/Hitachi M16C
        • Renesas/Hitachi M32R
        • M740
        • M7700
        • M7900
        • MIPS Processor: Nintendo N64
        • MIPS R5900 Processor : Sony bin
        • MIPS Processor: Sony ELF
        • MIPS Processor: Sony PSX
        • MIPS Processor: Sony PSX
        • MIPS Processor: Unix COFF File Format
        • MIPS Processor: Unix ELF File Format
        • MIPS Processor: Windows CE PE File Format
        • MIPS Processor: Windows CE PE2 File Format
        • Panasonic MN102
        • Atmel OAK DSP
        • 80×86 Architecture: DOS Extender
        • 80×86 Architecture: Watcom Runtime
        • 80×86 Architecture: Geos APP
        • 80×86 Architecture: Geos DRV
        • 80×86 Architecture: Geos LIB
        • 80×86 Architecture: GNU COFF Format
        • 80×86 Architecture: OS/2 Linear Executable Format
        • 80×86 Architecture: Netware NLM
        • 80×86 Architecture: QNX Executable
        • 80×86 Architecture: Watcom Runtime
        • 80×86 Architecture: Windows OMF
        • 80×86 Architecture: Windows Portable Executable Format
        • 80×86 Architecture: Windows Virtual Device Driver
        • 80×86 Architecture: Windows 16 bits DLL
        • X-Box Disassembler
        • PDP 11: SAV File
        • PIC
        • PIC 12xx
        • Power PC AIF ECOFF file Format
        • Power PC Linux ELF
        • Mac OS PEF File
        • Mac OS X File
        • Windows NT PE File
        • Hitachi SH-1 Processor
        • Hitachi SH-3 Processor: Windows CE COFF format
        • Hitachi SH-3 Processor: Windows CE PE format
        • Hitachi SH-4 Processor: ELF File Format
        • Hitachi SH-4 Processor: Windows CE PE File Format
        • Super Nintendo Entertainement System (SNES)
        • SPARC Solaris COFF
        • SPARC Solaris ELF
        • SPARC Sun ELF
        • SPARC Sun ELF SO
        • ST 20C4
        • ST 7
        • ST 9
        • Toshiba TLCS 900
        • TMS 320c2 COFF
        • TMS 320c5
        • TMS 320c54
        • TMS 320c6 COFF File Format
        • TRICORE
        • SunPlus unSP
        • NEC V850
        • Z180 COFF File Format
        • Z380 COFF File Format
        • Z8
        • Z80
      • Supported processors
      • Supported file formats
        • Windmp file loader
      • Bitfields
        • Bit Fields tutorial
      • Structures tutorial
      • Union tutorial
      • Variable length structures tutorial
      • Data types, operands and constructs
      • Packed executables
    • Decompiler
      • Prerequisites
      • Quick primer
      • Exception handler
      • Introduction to Decompilation vs. Disassembly
        • Comparisons of ARM disassembly and decompilation
        • Comparisons of PowerPC disassembly and decompilation
        • Comparisons of MIPS disassembly and decompilation
        • Hex-Rays v7.4 vs. v7.3 Decompiler Comparison Page
        • Hex-Rays v7.3 vs. v7.2 Decompiler Comparison Page
        • Hex-Rays v7.2 vs. v7.1 Decompiler Comparison Page
      • Interactive operation
        • Rename
        • Set type
        • Set number representation
        • Edit indented comment
        • Edit block comment
        • Hide/unhide C statements
        • Split/unsplit expression
        • Force call type
        • Set call type
        • Add/del variadic arguments
        • Del function argument
        • Add/delete function return type
        • Jump to cross reference
        • Jump to cross reference globally
        • Generate HTML file
        • Mark/unmark as decompiled
        • Copy to assembly
        • Show/hide casts
        • Reset pointer type
        • Convert to struct *
        • Create new struct type
        • Split variable
        • Select union field
        • Jump to paired paren
        • Collapse/uncollapse item
        • Map to another variable
      • Batch operation
      • Configuration
      • Third party plugins
      • Floating point support
      • Support for intrinsic functions
      • Overlapped variables
      • gooMBA
      • Failures and troubleshooting
      • FAQ
      • Limitations
      • Tips and tricks
    • Debugger
      • Instant debugger
      • Remote debugging
        • Remote iOS Debugger
        • Android debugger
        • Dalvik debugger
        • Remote GDB Debugger
          • Remote GDB Debugger options
          • Debugging with gdbserver
          • Debugging with VMWare
          • Debugging with OpenOCD
          • Debugging with QEMU
          • External programs and GDB Debugger
          • Debugging code snippets with QEMU
        • PIN debugger
          • Building the PIN tool
          • Connecting a remote PIN tool instance from IDA
          • PIN support for MacOSX
        • Replayer debugger
        • Bochs debugger
          • Bochs Disk Image operation mode
          • Bochs IDB operation mode
          • Bochs PE operation mode
          • Bochs debugger FAQ
      • Local debugging
        • WinDbg Debugger
        • Linux debugger
        • Intel/ARM macOS debugger
      • Debugger tutorials
        • Debugging Dalvik Programs
        • IDA Win32 Local Debugging
        • IDA Linux Local Debugging
        • IDA Linux to Win64 Debugging
        • IDA Win32 to Linux Debugging
        • Debugging Mac OSX Applications with IDA Pro
        • Debugging iOS Applications using CoreDevice (iOS 17 and up)
        • Debugging iOS Applications with IDA Pro
        • Debugging Linux Applications locally
        • Debugging Linux/Windows Applications with PIN Tracer module
        • Debugging Windows Applications with IDA Bochs Plugin
        • Debugging Windows Applications with IDA WinDbg Plugin
        • Using the Bochs debugger plugin in Linux
        • Debugging Windows Kernel with VMWare and IDA WinDbg Plugin
        • Debugging Linux Kernel under VMWare using IDA GDB debugger
        • Windows Debugger Hub
        • Linux Debugger
        • Debugging a Windows executable locally and remotely
        • Debugging the XNU Kernel with IDA Pro
        • Remote debugging with IDA Pro
        • IDA Scriptable Debugger: overview
          • IDA Scriptable Debugger: scriptability
        • Debugging code snippets with QEMU debugger (a la IDA Bochs debugger)
        • Trace Replayer and managing traces
        • Using IDA Pro's tracing features
        • Working with PIN
        • Appcall
    • Creating Signatures
      • FLIRT
        • IDA F.L.I.R.T. Technology: In-Depth
        • Generate FLIRT signature file
        • Supported Compilers
          • Turbo Pascal
          • Delphi
      • Makesig
    • Creating Type Libraries
      • IDAClang
      • TILIB
    • Configuration
      • Configuration files
      • Command line switches
      • Keyboard macros
      • UI/Fonts/Themes
      • Shortcuts
      • Customizing IDA
      • CSS-based styling
    • Teams
      • IDA Teams Licenses
      • Diffing and Merging Databases with IDA Teams
      • Teams lc command reference manual
      • hv command reference manual
      • Hex-Rays Vault’s visual client user manual
    • Lumina
      • lc command reference manual
    • Plugins
      • Open Plugin Architecture
      • Plugin options
      • Plugins Shipped with IDA
        • Swift plugin
        • Golang plugin
        • Rust plugin
        • picture_search
        • Objective-C Analysis Plugin
        • DYLD Shared Cache Utils
        • Borland RTTI descriptors plugin
        • DWARF plugin
        • Patfind plugin
        • IDA Feeds
          • FLIRT Signature Bundle
      • Plugin Contest
      • How to write your own plugin?
    • Helper Tools
    • idalib
  • Developer Guide
    • C++ SDK
      • Getting Started with C++ SDK
      • C++ SDK Reference
      • Using the Decompiler SDK: Decompiler plugin
      • C++ SDK examples
      • How to create a plugin in C++?
      • C++ SDK Porting Guide from IDA 8.x to 9.0
    • IDAPython
      • Getting started with IDAPython
      • IDAPython API Reference
      • IDAPython examples
      • How to create a plugin in IDAPython?
      • IDAPython Porting Guide from IDA 8.x to 9.0
    • IDC
      • Core concepts
        • Expressions
        • Statements
        • Functions
        • Variables
        • Constants
        • Exceptions
        • Classes
        • Predefined symbols
        • loader_input_t class
        • Slices
      • IDC API Reference
        • Index of debugger related IDC functions
        • Alphabetical list of IDC functions
          • is_member_id
          • load_type
          • get_member_by_idx
          • get_ordinal_limit
          • set_selector
          • enable_tracing
          • get_prev_fixup_ea
          • del_segm
          • get_bmask_cmt
          • end_type_updating
          • Find
          • toggle_bnot
          • patch_byte
          • get_module_info
          • set_member_name
          • create_float
          • del_struc_member
          • read_dbg_memory
          • get_enum_width
          • getn_thread_name
          • del_struc
          • filelength
          • set_manual_insn
          • is_value...() functions
          • get_ip_val
          • del_extra_cmt
          • create_insn
          • op_offset_high16
          • get_cmt
          • expand_struc
          • get_idb_path
          • set_frame_size
          • get_file_ext
          • has_value
          • readshort
          • sanitize_file_name
          • get_member_flag
          • create_struct
          • ARM specific
          • set_enum_member_cmt
          • rename
          • set_ida_state
          • get_member_size
          • msg
          • qbasename
          • get_enum_member_enum
          • auto_mark_range
          • plan_to_apply_idasgn
          • set_named_type
          • op_offset
          • rename_entry
          • strlen
          • get_extra_cmt
          • get_enum_flag
          • fgetc
          • op_stkvar
          • get_last_index
          • get_field_ea
          • get_struc_id
          • select_thread
          • create_array
          • get_struc_cmt
          • set_array_string
          • set_func_attr
          • set_storage_type
          • get_struc_size
          • demangle_name
          • get_next_fixup_ea
          • get_next_bmask
          • delattr
          • gen_simple_call_chart
          • patch_qword
          • get_enum_name
          • loader_input_t.getc
          • get_debugger_event_cond
          • read_dbg_qword
          • define_local_var
          • generate_disasm_line
          • add_idc_hotkey
          • tolower
          • del_selector
          • set_debugger_event_cond
          • get_imagebase
          • gen_file
          • get_entry
          • find_custom_data_format
          • get_debug_name_ea
          • add_default_til
          • set_func_end
          • exit_process
          • delete_array
          • xtol
          • get_exception_code
          • detach_process
          • set_enum_cmt
          • get_wide_word
          • put_bookmark
          • is_loaded
          • add_enum_member
          • parse_decls
          • readstr
          • get_entry_qty
          • ord
          • sprintf
          • get_root_filename
          • get_enum_member_cmt
          • create_word
          • set_func_flags
          • loader_input_t.tell
          • create_align
          • read_dbg_dword
          • next_addr
          • get_bytes
          • batch
          • start_process
          • process_config_line
          • del_user_info
          • qmakefile
          • set_struc_name
          • print_decls
          • create_custom_data
          • del_enum_member
          • format_cdata
          • get_fixup_target_sel
          • get_item_size
          • loader_input_t.gets
          • get_last_bmask
          • Step Tracing Options
          • selector_by_name
          • get_enum_cmt
          • next_not_tail
          • prev_head
          • set_color
          • set_numbered_type
          • get_member_name
          • auto_wait
          • get_enum_member_bmask
          • fseek
          • get_segm_start
          • attach_process
          • Trace file functions
          • get_enum_member_value
          • op_stroff
          • get_next_offset
          • set_processor_type
          • get_bookmark_desc
          • create_data
          • lastattr
          • get_operand_value
          • collect_stack_trace
          • toupper
          • get_fixup_target_dis
          • set_cmt
          • add_entry
          • set_segm_addressing
          • qmake_full_path
          • get_source_linnum
          • fputc
          • resume_thread
          • get_func_attr
          • get_first_enum_member
          • add_sourcefile
          • get_first_bmask
          • read_selection_start
          • hasattr
          • get_member_cmt
          • gen_flow_graph
          • get_array_element
          • get_tinfo
          • loader_input_t
          • tinfo_errstr
          • TRUNC
          • add_segm_ex
          • Local types information and manipulation helpers
          • set_source_linnum
          • get_next_enum_member
          • loader_input_t.readbytes
          • set_array_params
          • jumpto
          • get_bookmark
          • set_enum_bf
          • prev_not_tail
          • toggle_sign
          • loader_input_t.size
          • Trace events functions
          • get_func_flags
          • get_gotea
          • set_segm_attr
          • get_item_head
          • set_default_sreg_value
          • print_insn_mnem
          • set_member_cmt
          • get_ordinal_qty
          • set_target_assembler
          • add_user_stkpnt
          • set_local_type
          • Hidden ranges
          • del_items
          • compile_idc_text
          • Dalvik debugger extension functions
          • byte_value
          • create_dword
          • is_code
          • del_func
          • get_enum
          • make_array
          • rotate_left
          • recalc_spd
          • search_path
          • CommonBits
          • get_processor_name
          • set_func_cmt
          • get_prev_bmask
          • Hashes
          • split_sreg_range
          • process_ui_action
          • set_fixup
          • get_fixup_target_type
          • create_oword
          • get_flags
          • get_func_name
          • create_strlit
          • add_struc
          • atol
          • load_debugger
          • mkdir
          • sizeof
          • get_enum_member_by_name
          • save_database
          • guess_type
          • get_segm_name
          • print_operand
          • qisabspath
          • get_member_qty
          • set_struc_cmt
          • get_fixup_target_flags
          • idadir
          • object.retrieve
          • add_auto_stkpnt
          • get_numbered_type_name
          • get_enum_member_name
          • get_next_index
          • prev_addr
          • get_name_ea
          • get_sp_delta
          • set_bmask_cmt
          • readlong
          • set_segm_name
          • get_prev_offset
          • set_segm_alignment
          • get_strlit_contents
          • forget_exception
          • get_item_end
          • add_func
          • get_name
          • Asks
          • get_spd
          • Debugger: control
          • get_wide_byte
          • plan_and_wait
          • set_enum_flag
          • RunPythonStatement
          • del_sourcefile
          • find_selector
          • get_frame_regs_size
          • op_num
          • define_exception
          • create_double
          • create_byte
          • read_selection_end
          • OpTypes
          • op_plain_offset
          • move_segm
          • get_member_id
          • set_segm_combination
          • get_current_thread
          • trim
          • Debugger: options
          • getn_thread
          • get_frame_id
          • typeinfo.print
          • to_ea
          • rebase_program
          • add_struc_member
          • get_exception_qty
          • get_first_index
          • import_type
          • set_segm_type
          • find_custom_data_type
          • get_next_seg
          • find_func_end
          • get_last_enum_member
          • getattr
          • get_frame_size
          • get_screen_ea
          • loader_input_t.read
          • set_reg_value
          • Debugger: modules
          • create_pack_real
          • writestr
          • exec_idc
          • get_enum_size
          • set_enum_name
          • create_tbyte
          • sel2para
          • atoa
          • loader_input_t.close
          • add_enum
          • ltoa
          • substr
          • del_idc_hotkey
          • Breakpoint handling functions
          • loader_input_t.seek
          • cleanup_appcall
          • object.store
          • get_type
          • qexit
          • get_debug_name
          • get_array_id
          • Can't Open File
          • suspend_process
          • process_config_directive
          • get_entry_name
          • get_last_member
          • get_struc_name
          • clear_selection
          • fclose
          • firstattr
          • create_yword
          • dbg_appcall
          • get_qword
          • patch_dword
          • begin_type_updating
          • read_dbg_byte
          • get_fpnum
          • qsleep
          • get_first_member
          • get_nsec_stamp
          • del_stkpnt
          • eval
          • savefile
          • eval_python
          • Xrefs
          • strstr
          • writeshort
          • get_sreg
          • get_segm_end
          • get_func_off_str
          • set_func_start
          • del_array_element
          • get_full_flags
          • set_exception_flags
          • rename_array
          • get_frame_args_size
          • op_flt
          • get_min_spd_ea
          • apply_type
          • get_prev_index
          • loadfile
          • retrieve_input_file_md5
          • get_wide_dword
          • patch_dbg_byte
          • Functions provided by the WinDbg debugger
          • get_original_byte
          • get_member_strid
          • call_system
          • writelong
          • get_thread_qty
          • nextattr
          • send_dbg_command
          • get_first_seg
          • get_processes
          • patch_word
          • get_manual_insn
          • ftell
          • get_entry_ordinal
          • set_array_long
          • delete_all_segments
          • TO_LONG
          • Function chunk related functions
          • Debugger: events
          • get_prev_func
          • op_seg
          • validate_idb_names
          • fprintf
          • fopen
          • strfill
          • del_fixup
          • get_bmask_name
          • inf_attr
          • is_bf
          • read_dbg_word
          • qdirname
          • get_segm_attr
          • func_contains
          • del_source_linnum
          • get_sourcefile
          • clr_database_flag
          • set_name
          • Refresh Screen
          • op_enum
          • getn_enum
          • get_db_byte
          • setattr
          • get_forced_operand
          • op_bin
          • Functions provided by the replayer debugger
          • prevattr
          • update_extra_cmt
          • get_str_type
          • op_man
          • choose_func
          • set_bmask_name
          • get_curline
          • decode_insn
          • set_segment_bounds
          • set_segm_class
          • write_dbg_memory
          • get_exception_name
          • get_enum_member
          • is_mapped
          • del_enum
          • get_frame_lvar_size
          • get_operand_type
          • set_root_filename
          • compile_idc_file
          • typeinfo.size
          • get_local_tinfo
          • get_fixup_target_off
          • is_union
          • unlink
          • get_segm_by_sel
          • set_enum_width
          • take_memory_snapshot
          • exec_python
          • get_next_func
          • get_member_offset
          • get_func_cmt
          • parse_decl
          • create_qword
          • next_head
          • suspend_thread
          • loader_input_t.getz
          • get_color
          • get_reg_value
          • load_and_run_plugin
          • set_database_flag
          • set_enum_member_name
          • set_member_type
          • get_prev_enum_member
      • IDC examples
        • Analyzing encrypted code
  • Admin Guide
    • Lumina server
    • Teams server
    • License server
      • Hex-Rays License Server Migration Guide
  • Release Notes
    • IDA 9.0
    • IDA 8.4sp2
    • IDA 8.4sp1
    • IDA 8.4
    • IDA 8.3
    • IDA 8.2sp1
    • IDA 8.2
    • IDA 8.1
    • IDA 8.0sp1
    • IDA 8.0
    • IDA 7.7sp1
    • IDA 7.7
    • IDA 7.6sp1
    • IDA 7.6
    • IDA 7.5sp3
    • IDA 7.5sp2
    • IDA 7.5sp1
    • IDA 7.5
    • IDA 7.4sp1
    • IDA 7.4
    • IDA 7.3
      • IDA 7.3 Undo: IDA can do it
    • IDA 7.2
      • IDA 7.2 The Mac Rundown
    • IDA 7.1
      • IDA 7.1 Debugger API 7.1 Porting Guide
    • IDA 7.0sp1
    • IDA 7.0
      • Internationalization (i18n)
      • Automatic discovery of string literals
      • API 7.0 Porting Guide
      • IDAPython backward compatibility
    • IDA 6.95
    • IDA 6.9
    • IDA 6.8
    • IDA 6.7
    • IDA 6.6
    • IDA 6.5
    • IDA 6.4
    • IDA 6.3
    • IDA 6.2
    • IDA 6.1
    • IDA 6.0
    • IDA 5.7
    • IDA 5.6
    • IDA 5.5
      • 5.5 Gallery
      • 5.5 Comparison
    • IDA 5.4
    • IDA 5.3
    • IDA 5.2
    • IDA 5.1
    • IDA 5.0
    • IDA 4.9SP
    • IDA 4.9
    • IDA 4.8
    • IDA 4.7
    • IDA 4.6
    • IDA 4.x
    • IDA 3.x
    • Cumulative bugfix for IDA
  • Archive
    • IDA’s Windbg plugin
    • IDA’s Bochs debugger plugin
    • IDA’s Bochs debugger plugin 2
    • DosWin32
    • Hex-Rays v1.1 vs. v1.0 Decompiler Comparison Page
    • Hex-Rays v1.2 vs. v1.1 Decompiler Comparison Page
    • Hex-Rays v1.3 vs. v1.2 Decompiler Comparison Page
    • Hex-Rays v1.6 vs. v1.5 Decompiler Comparison Page
    • Hex-Rays v1.7 vs. v1.6 Decompiler Comparison Page
    • Costly Greetings – An Adventure In Hostile Code Analysis
    • An Adventure In Hostile Code Analysis: Description
    • An Adventure In Hostile Code Analysis: Disassembly
    • Improved code flow analysis
    • Program Navigation Bar
    • IDA Home Contest
    • Pimp My IDA: vote results
    • Turning off IDA 6.x compatibility in IDAPython
    • Porting guide for IDA 7.4 turning off IDA 6.x API backwards-compatibility by default
    • Porting guide for IDA 7.4 IDAPython and Python 3
    • IDAPython and Python 3
    • Porting guide for changes in IDAPython-on-Python-3 APIs
    • Debugging iOS Applications With IDA
    • IDA Win32 to Win32 Debugging
    • IDA Win32 to Win64 Debugging
    • Legacy license server: Floating Licenses
      • Installing on Linux
      • Installing on Windows
      • Installing on OS X
    • Decompiler Installation
    • Enumerated types tutorial
  • Bug Bounty
Powered by GitBook
LogoLogo

Need Help?

  • FAQs
  • Support

Community

  • Forum
  • Plugins

Resources

  • Blog
  • Download center

© 2025 Copyright Hex-Rays

On this page
  • IDA 8.4 Highlights
  • Unified type storage (ASMTIL)
  • ARM/iOS improvements
  • Debugger improvements
  • Modernized Look'n'Feel
  • Improved Parsing of Rust metadata
  • Full list of changes and new features:
  • Processor modules
  • File formats
  • FLIRT / TILS / IDS
  • Standard plugins
  • Kernel/Misc
  • Scripting & SDK
  • UI
  • Debuggers
  • Decompilers
  • Bugfixes

Was this helpful?

Export as PDF
  1. Release Notes

IDA 8.4

Last updated 7 months ago

Was this helpful?

IDA 8.4.240215 February 15, 2024

IDA 8.4 Highlights

Unified type storage (ASMTIL)

  • The presence of Structures, Enums and Local Types views and synchronization between them confused many users, especially those new to IDA. We have decided to add all missing features (such as structure field representation) to Local Types and now all type manipulations (still with familiar hotkeys!) can be done there. New databases will only have Local Types by default and Structures and Enums are deprecated.

  • The new Local Types Widget allows editing structures like the classic Structures widget, or via a free-text editor.

  • The same goes for enum types:

ARM/iOS improvements

  • We added support for common Apple-specific instructions and system registers commonly encountered in iOS and macOS software. This means you should see fewer instances of undefined bytes breaking disassembly and more understandable code when working with these files.

  • ARMv8.6-A support. We've added most of mandatory and optional instructions from ARMv8.6-A (with notable exception of SVE). In particular, we added the following instruction set extensions:

  • FEAT_SHA3: (4) Advanced SIMD SHA3 instructions

  • FEAT_SHA512: (4) Advanced SIMD SHA512 instructions

  • FEAT_DotProd: (2) Advanced SIMD dot product instructions

  • FEAT_BF16: (8) BFloat16 (Brain Floating Point) instructions

  • FEAT_FHM: (2) Floating-point half-precision multiplication instructions

  • FEAT_I8MM: (5) Int8 matrix multiplication instructions

  • ARMv8-M support: we now properly disassemble accesses to the new system registers introduced since ARMv7-M (for example, NS variants of some registers)

  • The Mach-O loader now offers fine-grained control over the selection of dyld shared cache modules and their dependencies:

  • The ARM32 decompiler supports hard-float ABI (floating point values passed and returned in FPU registers):

Debugger improvements

  • We added support for recent Android versions and made it more robust when working with apps without debug information. If running on a recent (API28+) Android, IDA will try to guess the variable type automatically. Since in the Dalvik VM the value of a variable cannot be displayed without knowing its type, this boosts the debugging experience significantly.

Dalvik debugger without type information:

The same app, but with successfully guessed types for all local variable slots that are in scope:

  • Environment variables can now be specified for Windows/Linux/Mac debuggers in process options:

  • We made various improvements to the debugging backends:

    • Address Space Layout Randomization (ASLR) can now be disabled for most platforms that support it (local debuggers and remote gdbstub). This simplifies debugging in cases where deterministic addresses are desired.

    • We enabled NoAck mode on iOS, saving one round trip time. This is beneficial for anybody debugging remote devices over high-latency connections (typically cloud-based emulators).

    • Finally, our remote debugging server now is available for ARM64 Linux.

Modernized Look'n'Feel

  • We replaced all icons with brushed-up, vectorized versions and added a crosshair effect to the minigraph view for orientation in large graphs.

Moreover, pixelated fonts are a thing of the past. Texts in graph mode now render crisp at any zoom level.

  • Scrolling and zooming via the trackpad now works smoothly (especially, but not limited to, macOS)

Old version:

New version:

  • better graph layouts with fewer(none?) edge intersections, even on big functions

Improved Parsing of Rust metadata

  • We added a plugin for parsing Rust-specific data and constructs. As a consequence, the huge string pools typically observed in Rust binaries are now split up properly. Moreover, the plugin adds demangling of both legacy and the v0 Rust name mangling format.

Full list of changes and new features:

Processor modules

  • ARM: added some Apple-specific A64 system registers

  • ARM: added support for most ARMv8.6-A instructions: FHM, BF16, SHA3, SHA512, SM3, SM4

  • ARM: decode Apple-specific instructions used in iOS and macOS (GXF, AMX, SDSB etc.)

  • ARM: detect calls in A64 mode when X30 (LR) points to the address after a branch

  • ARM: expand the architecture settings dialog with explicit options for ARMv8-A, ARMv8-M and ARMv9

  • ARM: improved handling of references to fields of structure instances

  • ARM: improved xref creation for LDP and STP instructions

  • PC: added decoding of new Sapphire Rapids instructions (UINTR and HRESET)

  • PC: support x86 switch variation produced by GCC 4.8

  • PPC: implemented a simple regtracker (regfinder)

  • PPC: improved handling of references to fields of structure instances

  • MIPS: added support of $s1 as frame register in mips16 functions

  • MIPS: improved handling of references to fields of structure instances

  • NEC850: implemented a simple regtracker (regfinder)

  • NEC850: print the target for indirect jumps and calls (when available)

  • NEC850: support a new switch pattern (uses 'bnc' after 'addi')

  • TMS320C28X: added support for extended instructions (FPU, FPU64, VCU, VCRC, VCU-II, TMU, FINTDIV)

File formats

  • MACHO: overhaul of the dyld shared cache module selection system

  • MACHO: properly describe versioned arm64e ABI Mach-O files

  • MACHO: support relocations provided by the __chain_starts section in Apple's firmware components (e.g. SPTM, TXM)

  • MACHO: added support for dyld slide info version 5 (macOS 14.4)

FLIRT / TILS / IDS

  • FLIRT: added signatures for icl 231 (Intel C++ 2023.1.0)

  • FLIRT: go: runtime signatures for go1.22 (x86_64)

  • FLIRT: go: startup and runtime signatures for go1.21 (x86_64)

  • FLIRT: VC: added signatures for vc14.36 (Visual Studio 2022.16)

  • FLIRT: VC: added signatures for vc14.37 (Visual Studio 2022::VC17.7)

  • TIL: MacOSX12.0 SDK

  • TIL: MacOSX13.0 SDK

  • TIL: MacOSX14.0 SDK

  • TIL: iPhoneOS15.0 SDK

  • TIL: iPhoneOS16.4 SDK

  • TIL: iPhoneOS17.0 SDK

Standard plugins

  • makesig: new plugin to generate FLIRT signatures from the current database

  • makesig: Added File > Produce file > Create SIG file... action

  • DWARF: Handle oversized bitfield groups at the end of structures

  • idaclang: parse __attribute__((annotate("...")))

  • OBJC: added support for relative lists of properties and protocols (iOS17 optimization)

  • OBJC: got rid of extra cast to 'Class' in the calls to objc_alloc() and objc_alloc_init()

  • OBJC: handle object initialization using objc_opt_new

  • OBJC: simplify calls to the 'objc_msgSend$method' helpers and add cross-references to destination method using the decompiler

  • rust: new plugin for parsing rust-specific data and constructs (e.g. splitting merged string literals)

  • rust: support demangling of both legacy and the v0 mangling format (RFC 2603)

  • SWIFT: group functions by the module name; added an option to swift.cfg

  • SWIFT: updated demangler for Swift 5.9

Kernel/Misc

  • kernel: added a new analysis option "Merge strlits" (enabled by default, disabled for golang)

  • kernel: allow constant with value 0 for bitmask enum if zero is not the only one constant in group and there is more than 1 group

  • kernel: allow register names as struct/union member names.

  • kernel: assume g++ 3.x (Itanium ABI) name mangling by default

  • kernel: improve strlit discovery from cross-references

  • kernel: parse __attribute__((annotate("...")))

Scripting & SDK

  • IDAPython: implemented idc.sizeof(), equivalent of the IDC function

  • IDAPython: improve doc and error message for ida_typeinf.calc_type_size()

  • IDC: highlight more keywords in the script editor

  • SDK: improved get_utf8_char() not to move the pointer past the terminating zero

  • SDK: improved idb_event::local_types_changed to include more detailed info about the modified types

  • SDK: renamed get_ordinal_qty -> get_ordinal_limit

UI

  • UI: added "Find register definition" and "Find register use" to the IDA View context menu

  • UI: debugger: added environment variables to the process options dialog

  • UI: enable folders in the Functions window by default

  • UI: FLIRT signatures can now be loaded from arbitrary location and not just IDA's sig folder

  • UI: graph: add ability to select graph edges, in addition to nodes

  • UI: graph: highlight item under mouse after jump on edge (when the animation stops)

  • UI: graph: improved readability of the graph overview's focus area

  • UI: highlight focused area in the mini graph view

  • UI: improved displaying of string literals in terse structure view

  • UI: improved Local Types view to be a complete replacement for assembler-style Enums and Structs (which are deprecated)

  • UI: improved output of array of structs and output of varstruct (if last field is not empty)

  • UI: improved output of terse struct with nested varstruct

  • UI: improved wheel scrolling, to make it smoother (and more accurate)

  • UI: new icon set, SVG-based and with a refreshed palette

  • UI: reduce the delay when invoking 'Convert to array' action

  • UI: save "Turn on synchronization" and "Show Folders" Functions window setting in desktop

  • UI: when wheel-zooming into the graph view, snap to 1:1 in the event of a trackpad "elastic" wheel motion

Debuggers

  • debugger: added 'disable ASLR' to the common debugger options for supported platforms (Linux, Win32, macOS)

  • debugger: arm: added debug server for ARM64 Linux

  • debugger: dalvik: added IDC functions for raw JDWP calls

  • debugger: dalvik: improved local variable type detection/guessing

  • debugger: dalvik: warn about missing APK debuggable flag

  • debugger: gdb: now we accept xml files lacking the "target" node

  • debugger: ios: support for changes in the debugserver protocol for iOS17

  • debugger: ios: try to use NoAckMode by default (improves latency over slow connections)

  • debugger: support for ipv6 address notation for hostname in the -r commandline option

  • debugger: x64: improved stack trace recovery

Decompilers

  • decompiler: "Split expression" can now be used on inlined memcpy/strcpy/memset helpers to split them into individual operations

  • decompiler: "Extract Function" can now delete unreferenced local types

  • decompiler: added hxe_callinfo_built and hxe_calls_done events

  • decompiler: arm: decompile ARMv8.3 LDAPR instruction

  • decompiler: arm: support ARM32 hard-float ABI (FP values passed in FPU registers)

  • decompiler: colorize floating point numbers

  • decompiler: colorize non-trivial strlit forms (such as CFSTR)

  • decompiler: double-clicking on a symbolic constant opens its definition

  • decompiler: if a bitmask operation is used to check the sign bit of a signed expression, replace it with the "less than zero" expression

  • decompiler: ppc: improved handling of code manipulating the conditon register (CR) directly

  • decompiler: renamed "Force variable" to "Split variable"; its hotkey is Shift-S now

Bugfixes

  • BUGFIX: ARM: ARMv8-M MSR/MRS instructions accessing newly introduced system registers (e.g. MSP_NS) were not decoded

  • BUGFIX: ARM: calls to _mcount in ARM64 Linux kernel modules would cause the stack to be unbalanced

  • BUGFIX: ARM: fixed some T32 UAL mnemonics (FMXR -> VMSR and FMRX, FMSTAT -> VMRS)

  • BUGFIX: ARM: some Thumb32 MSR instructions accessing xPSR fields were not decoded correctly

  • BUGFIX: AVR: immediate operands to subi/sbci instructions would be incorrectly displayed as negative numbers for values >127

  • BUGFIX: dalvik: allowed setting breakpoints on methods with empty variable table

  • BUGFIX: dalvik: fixed race condition that would prevent attaching to the process on API30+

  • BUGFIX: dalvik: removed excessive warnings when connecting without running debug target

  • BUGFIX: debugger: gdb debugger was printing wrong error messages about system errors

  • BUGFIX: debugger: the win32 debugger would miss exports from ntdll.dll on some systems

  • BUGFIX: decompiler: "copy to assembly" had line numbers off by one

  • BUGFIX: decompiler: __stdcall functions must follow Windows ABI even when the current compiler is gcc64

  • BUGFIX: decompiler: arm: fixed decompilation of PKHBT and PKHTB instructions

  • BUGFIX: decompiler: arm: fixed wrong decompilation of LDADDLH instruction (result was not zero-extended)

  • BUGFIX: decompiler: c++ implementation of vds6 sample was buggy

  • BUGFIX: decompiler: dead code elimination pass could incorrectly remove code when an indirect jump was converted to a goto

  • BUGFIX: decompiler: extract_func() could hang trying to collect the used types

  • BUGFIX: decompiler: fixed a case of too aggressive propagation leading to wrong decompilation

  • BUGFIX: decompiler: hints for the offsets of the base class members were wrong

  • BUGFIX: decompiler: magic division by 641 and its multiplies was not properly recovered

  • BUGFIX: decompiler: mba_t::find_mop() could miss call arguments

  • BUGFIX: decompiler: print correct shortcut for expanding collapsed local variables declarations

  • BUGFIX: decompiler: the "Split variable" action was not always visible when clicking on the variable name; clicking on the beginning of the line was required

  • BUGFIX: decompiler: the decompiler was failing on the calls to runtime.morestack in golang binaries

  • BUGFIX: decompiler: user-defined calls were not honored in outlined functions

  • BUGFIX: decompiler: when the cursor is put in a block comment in pseudocode, synchronized idaview would jump to the beginning of the function

  • BUGFIX: decompiler: x coordinates of the xrefs to types mentioned in function prototypes were miscalculated

  • BUFGIX: DSCU: IDA would appear to hang when loading an arm64_32 DYLD shared cache for WatchOS

  • BUGFIX: eh_parse: analysis could hang on some win32 binaries with many unwind blocks

  • BUGFIX: golang: plugin was creating REF_OFF64 fixups in all cases, even for 32-bit applications

  • BUGFIX: IDA could silently ignore failed rebasing attempts in some databases; now an error is shown

  • BUGFIX: IDAPython: ida_bytes.op_stroff was unusable

  • BUGFIX: IDAPython: ida_kernwin.get_[named|numbered]_type would return "fields comments" as a string, which was incompatible with ida_kernwin.set_[named|numbered]_type

  • BUGFIX: IDAPython: ida_hexrays: IDA could crash on accessing the 'it' member of an empty ctree_item_t instance

  • BUGFIX: IDAPython: ida_idaapi.as_int32 could compute an erroneous value

  • BUGFIX: IDAPython: ida_idaapi.as_signed() could return numbers that were not truncated to the specified width

  • BUGFIX: IDAPython: IDAPython would fail to initialize on Python 3.12 release due to missing 'imp' module

  • BUGFIX: IDAPython: plugins using PyQt5 would crash IDA when using Python 3.12 release build

  • BUGFIX: IDC: get_flags() and get_full_flags() were still returning 32 bits instead of 64 bits.

  • BUGFIX: installer: installer would try and fail to configure IDA for Python 2 on macOS

  • BUGFIX: kernel: improved tracking of SP when the stack pointer is changed in delay slot of a branch

  • BUGFIX: kernel: on Linux/Mac, IDA would create useless btree records for some big arrays, leading to substantial increase of the database size

  • BUGFIX: kernel: some offsets could be truncated in wide-byte processors resulting in missed or wrong cross-references

  • BUGFIX: kernel: specifying a different processor name with -p for old databases would cause an odd error message; now ida quits after showing a correct message

  • BUGFIX: kernel: the C parser was accepting wrong type names like "WRONG_PREFIX::name", now it complains about them

  • BUGFIX: kernel: when loading a corrupted til file, IDA would exit with interr 97 instead of reporting the problem

  • BUGFIX: kernel: xref to enum constant with value greater than 0xFF was improperly calculated

  • BUGFIX: MACHO: fixed wrong warnings during loading of DSC modules

  • BUGFIX: MACHO: IDA could load wrong type library (from macOS) for MH_FILESET kernelcashes (iOS16+)

  • BUGFIX: MACHO: parsing of DSC slide chain could continue past end of page (on corrupted files) and display bogus warnings

  • BUGFIX: NEC850: rh850 LDSR/STSR instructions with selID != 0 would incorrectly use system register names from the selID=0 set

  • BUGFIX: OBJC: "jump to selector" action could have failed on calls which use helper stubs

  • BUGFIX: OBJC: RunUntilMessageReceived could fail on macOS ARM64

  • BUGFIX: OBJC: small direct method selectors in dyld shared cache could be parsed incorrectly if libobjc.A.dylib was not loaded

  • BUGFIX: OBJC: some types which referred to blocks (typestring "@?") were parsed incorrectly

  • BUGFIX: OBJC: stack block analysis in DSC could fail if libsystem_blocks was loaded into the database

  • BUGFIX: OBJC: the objc plugin would fail to add cross-reference to destination method in case of tail-call to _objc_msgSend

  • BUGFIX: PC: fixed error when loading x64 .net modules

  • BUGFIX: pc: fixed multiple issues with segments ending at 0x100000000 for 32-bit files in IDA64

  • BUGFIX: PC: IDA would crash with an internal error 10129 when disassembling some 64-bit instructions in an originally 32-bit database

  • BUGFIX: PDB: some well-formed typedefs were not added to local types

  • BUGFIX: PIC: ROM sizes were wrong for some members of the PIC18F family

  • BUGFIX: picture_search: disable automatic picture detection while debugging

  • BUGFIX: RISCV: add stack variables in function that use a frame pointer (s0)

  • BUGFIX: RISCV: set stack variable size based on store and load instruction whenever possible

  • BUGFIX: SDK: tinfo_visitor_t with TVST_DEF was not visiting the typedef targets

  • BUGFIX: SWIFT: a deliberately crafted IDB could cause IDA to load an arbitrary DLL (potentially from a remote host) and lead to code execution

  • BUGFIX: SWIFT: newly loaded modules from DSC would not be detected as having Swift metadata

  • BUGFIX: TEAMS: fixed multiple instances of database corruption/internal errors during merging

  • BUGFIX: TEAMS: folder structure could be corrupted during merging

  • BUGFIX: TEAMS: handling a large number of the deleted types could lead to interr 1949

  • BUGFIX: TEAMS: IDA always borrowed the first license in "Borrow license" dialog even if there were other appropriate candidates to borrow

  • BUGFIX: TEAMS: in some cases IDA refused to use a valid borrowed license

  • BUGFIX: TEAMS: merging bookmarks could corrupt their folder structure

  • BUGFIX: TEAMS: remembering credentials could silently fail

  • BUGFIX: TIL: added checks to type visitor to prevent OOB

  • BUGFIX: TIL: tilib could produce an error "Cannot get information about @__security_check_cookie@4" when dumping TILs created by idaclang

  • BUGFIX: TMS320C8: IDA could incorrectly show read cross-references as write and vice versa

  • BUGFIX: UI: color highlighting in the code snippet editor could be off by one for some words

  • BUGFIX: UI: correctly handle paths containing spaces when opening a new ida instance

  • BUGFIX: UI: drag and drop selection is now possible to a cell which is not the first column for chooser in full tree mode

  • BUGFIX: UI: graph: default graph layout in huge functions could have some edges intersecting with nodes

  • BUGFIX: UI: graph: edges were sometimes not redrawn correctly after undo

  • BUGFIX: UI: graph: fixed discrepancies between selection and highlight colors for nodes/edges

  • BUGFIX: UI: graph: option 'Re-layout graph if nodes overlap' didn't work in some situations

  • BUGFIX: UI: graph: resetting graph ('Layout graph') didn't work in some cases (database after rebasing)

  • BUGFIX: UI: hexadecimal values higher than 0x8000000000000000 were not sortable in choosers

  • BUGFIX: UI: IDA could fail to display menus created in plugin's init() method

  • BUGFIX: UI: IDA could jump to wrong address when double-clicking a function in the list during autoanalysis

  • BUGFIX: UI: some actions invoked through the context menu could not be undone

  • BUGFIX: UI: some combo boxes had too little space for text in the dark theme

  • BUGFIX: UI: trying to request an update from the UI in IDA Home or Teams would fail with "time limited version cannot be updated"

  • BUGFIX: UI: using "Reload file" on previously opened file without extension could fail with "you can't disassemble file with such an extension"

IDA showing new Local Types
IDA editing the Windows Process Environment Block Structure
IDA struct context menu
IDA editing an enumeration
Apple GXF disassembly
Apple AMX disassembly
ARMv8.6-A SHA512 instructions
ARMv8-M disassembly
Selective DSC cache loader
Return value in D0 being recognized by the decompiler
IDA debugging a dalvik program without type information
IDA debugging a dalvik program with type information available
IDA modifying environment variables of the debugged target process
Debug options showing new noaslr, noack options configured for ARM64
IDA with new icons and crosshair effect in the minigraph view
IDA at at high zoom level showing vectorized fonts
IDA zooming onto a graph
IDA zooming onto a graph
IDA without Rust plugin
IDA parsing and demangling Rust datastructures