The Wayback Machine - https://web.archive.org/web/20240811074303/https://out5.hex-rays.com/beta90_6ba923/

Welcome to IDA 9.0

BETA

Downloads

IDA Pro 9.0 • BETA

IDA Home 9.0 • BETA

Utilities

For IDA Pro users

Documentation

Issues fixed in IDA 9.0 beta 2

  • IDA Home: cloud decompilers unusable
  • Replaced every reference to ida.key into ida.hexlic
  • IDA Linux installer creates a weird directory in the installers's directory
  • IDA Home: missing IDA Pyton module "ida_mergemod"
  • missing style dylib on macOS
  • decompilers: crash on navigation into non-decompilable function
  • asmtil: interr 918 + crash on filtering a large list of types
  • idapython: idc.get_ordinal_qty() not usable
  • added wasm loader and processor module

Known issues for IDA 9.0 beta 1

  • IDA Teams server (vault) not yet available
  • IDA floating license server (licsrv) not yet available
  • Dialogs text in Linux installer not readable on Ubuntu with dark theme active
  • Linux installer creates empty directory named `***unknown variable uninstallerdirectory***`
  • iOS18 DSC objc analysis lacking out-of-box (__OBJC_RO has to be loaded manually for now)
  • IDA can crash on x64 macOS at file load time

Headless processing with IDAlib

WASM Disassembler and File Format Loader

nanoMIPS Disassembler and Decompiler + md1rom Loader

New RISC-V Decompiler and Disassembler Extensions

C++ Exceptions Support in the Decompiler

IDAPython Improvements

FLIRT Updates

Metadata Descriptors for Plugins

 

With the following directory structure:

plugins
└── ida_greeter
    ├── ida-plugin.json
    └── main.py

A possible ida-plugin.json could look as follows:

{
  "plugin" :
  {
    "name" : "greeter",
    "entryPoint" : "main.py"
  }
}

No more IDA32

UI Improvements

Full list of changes and new features

Processor modules

  • ARM: improve detection of targets of indirect jump instructions
  • ARM: improved prolog analysis to recognize and mark calls to chkstk_darwin
  • AVR: update missing bit definitions for ATmega640
  • MIPS: support for NanoMIPS instruction set
  • RISCV: added support for legacy instruction sfence.vm
  • RISCV: added support for T-Head custom instructions
  • wasm: new processor module (Web Assembly)

File formats

  • ELF: added support for nanoMIPS
  • ELF: ARM64: added support for R_AARCH64_P32_TLS_TPREL relocation type, used by ILP32
  • md1img: loader for Mediatek modem firmware images (nanoMIPS and MIPS16e2)
  • MACHO: support __chain_starts format 5 (DYLD_CHAINED_PTR_32_FIRMWARE)

FLIRT / TILS / IDS

  • FLAIR: PCF: added support for ARM64 COFF files
  • pelf: proper handling of ELF32 for AArch64 (ILP32)

Standard plugins

  • eh_parse: skip leading and trailing zero entries in x64 .pdata for PE files (real binaries have them); improve recognition of exception dispatcher functions in debug builds
  • eh_parse: x64 exception handlers are standalone functions and not function chunks
  • eh34: new plugin to handle c++ exceptions for the binaries built by msvc x64
  • pdb: added an option to only load names (useful with large PDBs when you don't need types)

Kernel/Misc

  • goodname.cfg: improve simplification of MSVC STL classes
  • kernel: support for ida-plugin.json
  • kernel: improved strlit detection (short ones were converted to data items)
  • noret.cfg: added terminate, std_terminate to the list of non-returning functions
  • installer: macOS: install all contents into a single .app bundle
  • licensing: replaced FlexNet licensing server by custom Hex-Rays licensing server (floating licenses only)

Scripting & SDK

  • IDAPython: added find_binary and find_string
  • IDAPython: added detection of virtual environments (venv)
  • IDAPython: Added more pointer wrappers for integer types defined in pro.h
  • IDAPython: idapyswitch can now be used with read-only IDA installations
  • IDAPython: Removed __magic_methods__ from CLI auto completion
  • IDAPython: zero-initialize C++ objects exposed in the Python API
  • IDAPython: loader_input_t.read() should return an empty bytes object upon read error, not None
  • SDK: Add Visual Studio templates for plugins and loaders
  • SDK: added FUNC_UNWIND/FUNC_CATCH function flags to mark exception handlers, they will be ignored in decompilation
  • SDK: added pipe_process() to launch a process and establish a 2-way communication with it
  • SDK: added qlist::splice()
  • SDK: moved node_ordering_t to gdl.hpp
  • SDK: published basic undo interface (create undo point, undo, redo)
  • SDK: renamed abstract_graph_t -> drawable_graph_t; mutable_graph_t -> interactive_graph_t

UI

  • UI: added an option to retain structure size (Fixed size structs)
  • UI: Added "pack fields" checkbox to control gaps between fields for structs
  • UI: command palette: fix wrong reports about "command failed"
  • UI: hadle export/import of Local types to IDC is in a more flexible way. User is able to select the different policies, for example: load the types and skip the equal.
  • UI: if IDA already has a file open, "Open" opens a file in a new IDA instance
  • UI: it is now possible to inspect the contents of base type libraries, by double-clicking on them in the "Type libraries" view
  • UI: new shortcut set better aligned with modern OS conventions
  • UI: got rid of "Structs" and "Enums" widgets
  • UI: new shortcuts: Alt- (and CMD-) to jump to a window

Decompilers

  • decompiler: riscv: added RV32 and RV64 decompilers
  • decompiler: added try/catch ctree statement
  • decompiler: improved detection of variadic arg types
  • decompiler: introduced a new event: hxe_inlining_func
  • decompiler: published a few graph algorthims (pre/port ordering and dominator calculation)
  • decompiler: published the control_graph_t class; made it possible for third-party plugins to perform structural analysis
  • decompiler: arm: added support for VSEL insn (ARMv8-M)
  • decompiler: impoved structure copy recognition
  • decompiler: improved cfunc_t cache by introducing "saved_to_idb"; otherwise we were saving all decompiled functions upon each "save_database", again and again
  • decompiler: improved constant representation in comparisons with binary operators
  • decompiler: improved hexrays history to support c++ exception handlers
  • decompiler: improved the error message about the missing license: tell the user what license is missing
  • decompiler: mips: added support for movtz and movtn (MIPS16e2)

Bugfixes

  • BUGFIX: ARM: analysis speed could be slow on large 32-bit firmware binaries
  • BUGFIX: ARM: fixed endless loop which could happen when analysing function chunk before main function entry
  • BUGFIX: ARM: stop decoding undefined MOV Wx, #imm variants (imm not fitting in 32 bits)
  • BUGFIX: cvt64: converting an old .idb to .i64 would fail if its path contained a space
  • BUGFIX: debugger: win32_remote.exe was unnecessarily requiring an API instroduced in Windows Vista and would not run on XP anymore
  • BUGFIX: decompiler: expressions with variable sized structures could be mishandled
  • BUGFIX: decompiler: IDA could complain "Could not find a matching license for product" when multiple decompilers were installed
  • BUGFIX: decompiler: internal errors triggered by UI-related code (e.g. generaing tooltips) could result in "Unknown C++ exception" fatal error
  • BUGFIX: decompiler: pressing F5 was not refreshing the pseudocode window in some cases; we were discarding the decompilation result
  • BUGFIX: decompiler: value range optimization could lead to code being wrongly removed
  • BUGFIX: DSCU: a GAP spanning multiple subcache files would fail to load
  • BUGFIX: kernel: IDA on Linux had an unnecessary hard dependency on libsecret and would refuse to run without it.
  • BUGFIX: navigating to a global name which matched a known type name would fail
  • BUGFIX: objc: NS*Block reference detection error would end up creating incoherent block structures over unrelated data
  • BUGFIX: PC: alloca_probe / chkstk_ms does not modify rsp or rax in x64 code, unlike x86
  • BUGFIX: PC: REX prefix could be incorrectly applied to 32-bit instructions
  • BUGFIX: PC: vmovw instruction was decoded as if using 16-bit registers (it actually uses 32-bit ones)
  • BUGFIX: PDB: inporting types from some large PDBs would fail with "the maximum recursion level was reached"
  • BUGFIX: RISCV: fence.i instruction was not decoded
  • BUGFIX: SDK: fixed a debug/opt build incompatibility in reg_finder_t (std::map member)
  • BUGFIX: SDK: set_all_bits() and clear_all_bits() would behave wrong on bitmaps with size not a multiple of 8
  • BUGFIX: sometimes information about newly created range-like entities (segments/functions/...) could be lost during UNDO
  • BUGFIX: tinfo: xrefs to a deleted enum were not removed
  • BUGFIX: UI: large amounts of lines in the "Output" window could cause slowdowns
  • BUGFIX: UI: when using COLOR_INV color code (e.g. in a custom viewer), IDA would use default color for the text instead of the previous background color