IDA 6.5
Last updated
Was this helpful?
Last updated
Was this helpful?
In September 2013 Apple released iPhone 5s with the A7 processor which supports the newest, 64-bit variant of the ARM instruction set. We are happy to announce that IDA 6.5 fully supports disassembly of ARM64 code and can load iOS 7 Mach-O binaries out of the box. The Objective-C metadata, if present, is also parsed and applied.
As usual, stack variables are created for you. We also perform limited register tracking and add cross-references so that it is easier to see, for example, what string values are loaded into registers.
Similar to x64 code, ARM64 allows you to access parts of the same register using different names (for example, W0 is the low 32 bits of the 64-bit register X0). We have implemented highlighting for ARM64 registers and in the screenshot above you can see how V11 is highlighted together with D11. This saves time when looking at complicated function, since ARM64 has 32 general-purpose and 32 SIMD registers to use.
Note: ARM64 decompilation is not available at this moment.
We have made substantial improvements in rendering of the disassembly, both in text and graph view. You should see faster and better quality rendering. HiDPI (Retina) displays are fully supported on OS X.
Here's old IDA 6.4 on Retina display (zoomed graph view):
And the same in new IDA 6.5:
The dreaded "Maximum number of chunks reached" message is gone. The database files can now be greater than two gigabytes, so the possible address space is limited only by the available disk space. Many other limits have been raised so now you can load huge files into IDA.
The type system has been redesigned and improved. Most of the changes are only visible to plugin writers, but users will notice:
support for bitfields in structures (only on C level, not in disassembly)
support for struct and class inheritance (only single inheritance for now)
improved handling of complex function prototypes and calling conventions (e.g. structures passed in registers, arguments in SSE registers etc.)
support for C++ ? C function prototype lowering (e.g. explicit "this" and return value parameters)
PDB and DWARF plugins can now import more complex types using the new type system
Many small but useful features have been added or improved. Here's just a few:
Breakpoint groups
You now can group breakpoints and disable/enable them at once. You can also export breakpoints to IDC and load them into another IDB. This can be a quick way to set breakpoints on a set of common APIs in many programs.
Structure offsets dialog
The "Selection-T" dialog now supports quick filtering (Ctrl-F) of the structure list, similar to other lists in IDA. You can also add missing fields to structures based on the register+offset accesses.
Export data
The new Edit ? Export data command can be used to quickly export selected bytes as an array of numbers or an initialized C structure (if it is a struct instance)
Export to C header
This command is now smarter: it can include necessary dependencies automatically and reorders the exported types so that the declarations or definitions appear before their use.
Create struct from selection
This command used to be called "Create struct from data". We have renamed it because now it can be used not only for initialized data items, but also for a selection of stack variables in a stack frame, or a set of fields in a structure (to extract those fields into a new structure). It has also been updated to use type information, when available. For example, when converting a virtual function table (a list of function pointers), the created structure will have pointers as members, and they will have proper types if the functions had their prototypes defined.
Navbar and mouse wheel
You can now use mouse wheel to scroll the navigation bar, and Ctrl-wheel to zoom it.
Processor Modules
+ 6808/HC(S)08: decode skip1 and skip2 pseudoinstructions
+ 68K: decode Mac OS toolbox traps with auto-pop flag set
+ 68K: added a few missing A-trap values (thanks to Doug Brown)
+ 8051: added support for 51MX extensions
+ ARC: disassemble MAC extension instructions
+ ARC: initial typeinfo support
+ ARM: added recognition of __gnu_mcount_nc
+ ARM: added support for Thumb switches that use GCC helpers __gnu_thumb1_case_<.../>
+ ARM: added support for ARM64 aka AArch64
+ ARM: handle another variation of Thumb-2 switch table
+ ARM: improve analysis speed for files with extremely long functions
+ ARM: improve handling of unoptimized GCC Thumb-2 epilogs (ADD R7, R7, #delta; MOV SP, R7)
+ ARM: improve stack tracing in the presence of conditional instructions
+ ARM: recognize 'ADD PC,PC,R' as return from subroutine
+ ARM: set default ARM architecture to "metaarm" (disassemble all instructions) in ida.cfg
+ ARM: support BE-8 images (big-endian data but little-endian code)
+ H8: added support for the Renesas H8SX family
+ H8: handle several switch patterns generated by Renesas High-performance Embedded Workshop (HEW).
+ H8: improved analysis, added rudimentary register tracking (thanks to Zak Escano)
+ MIPS: recognize new-ABI/System-V-ABI GCC PLT slots (see https://sourceware.org/ml/binutils/2009-06/msg00203.html)
+ PC: assume that "int 3" after calls stops execution (this is used by Visual C++ to guard calls to noret functions)
+ PC: decode LOCK MOV TO/FROM CR0 as MOV TO/FROM CR8D (AMD-specific)
+ PC: handle code sequences which load imagebase value into a temporary register (common in x64 Windows code)
+ PC: handle code which jumps over the lock prefix of instructions (e.g. Linux glibc)
+ PC: handle PIC helpers from Android/x86 binaries (__x86.get_pc_thunk.bx)
+ PC: improve analysis of functions with multiple "push ebp" instructions
+ PC: improved speed of stack analysis for long functions
+ PC: introduced PC_ANALYZE_MAX_SIMPLEX_SIZE: if the size of the simplex problem is greater, IDA will not use the simplex method
+ PPC: Recognize 'addis'/'lwz' pair for 32-bit offsets.
+ PPC: recognize switch constructs that use a GOT register
+ PPC: switch idiom recognition drastically improved.
+ TMS32028: new processor (Texas Instruments TMS320C28x). Includes C27 and C2xLP modes.
+ TMS320C55x: decode instructions that access deprecated registers MDP05 and MDP67
+ Tricore: added instruction auto-comments
+ Tricore: added new assembler for TASKING VX-toolset
+ Tricore: recognize some standard instruction sequences to load addresses and convert them to offsets
File Formats
+ CLI: implemented renaming of .NET methods
+ COFF: ignore symbols for import fixup pointers generated by GCC ("__fu<N>__<impname>") since they point into middle of instructions
+ COFF: ARM: support IMAGE_REL_ARM_MOV32T/IMAGE_REL_ARM_MOV32A relocations (used in WinRT targets)
+ DBG: added a workaround to handle non-compliant .dbg files produced by map2dbg
+ DEX: various dex loader improvements: format dex headers, methods descriptions, prototypes, strings, classes, annotations; parse and use debug info.
+ ELF: added minimal support for Tricore
+ ELF: added option to handle really huge segments (load them chunk by chunk). Thanks to Avi Cohen Stuart.
+ ELF: ARM: support R_ARM_THM_JUMP11 and R_ARM_THM_JUMP8 relocations
+ ELF: create a new, dummy segment for the .tbss section to avoid overwriting unrelated symbols
+ ELF: disable data coagulation by default (don't convert objects to byte arrays). Among other things, this improves display of vtables.
+ ELF: Handle Thumb entrypoints in files.
+ ELF: MIPS: support R_MIPS_TLS_GOTTPREL, MIPS_R_COPY and MIPS_R_JUMP_SLOT relocations
+ ELF: support for STT_GNU_IFUNC symbols
+ ELF: symbol value in RELA relocs against section symbols in dynamic files should be ignored (bug compatibility with binutils/ld.so)
+ DWARF: accept clang's non-DW_AT_declaration-based declaration (it uses an explicit DW_AT_byte_size of 0), and strip 'class ', 'struct ' and 'union ' from complex types names.
+ DWARF: basic support for Fortran-originating DWARF info.
+ DWARF: Declare function prototype even when params locations cannot be determined.
+ DWARF: Enable loading of DWARF information for shared libraries of a program being debugged.
+ DWARF: fixes and improvements to handle clang idiosyncrasies
+ DWARF: handle C++11 unspecified type: nullptr becomes a 'void*', and the rest becomes 'void'.
+ DWARF: Handle calling conventions that pass arguments in registers (e.g., __fastcall, __usercall, __thiscall)
+ DWARF: handle DW_AT_GNU_vector types, by packing them in a structure
+ DWARF: improved DWARFv4 handling
+ DWARF: support for DWARF info in PE files
+ DWARF: recognize DW_ATE_UTF8 for C++11 char16_t, char32_t, ...
+ DWARF: support for bitfields
+ DWARF: Support for complex float/double/longdouble.
+ DWARF: Support for DWARF V4-style, exprloc-based location lists.
+ DWARF: support for segmented addresses
+ DWARF: support for WATCOM-style, spec-incompatible, typeless global variables with no location descriptor (uses DW_AT_low_pc instead)
+ DWARF: too many other fixes and improvements to list
+ MACHO: rename pointers to ascii strings; this improves the listing
+ MACHO: symbols with names like "__dtrace_probe$..." were being interpreted as ARM symbols, which destroyed valid Thumb code
+ MACHO: when loading a dyld cache, ask about Objective-C parsing only once
+ PDB: improved handling of fragmented functions.
+ PDB: removed artificial limitation on the type names, it was leading to names clashes and interrs. NB: types with really long names cannot be imported into the structure view anymore.
+ PDB: use class inheritance instead of inclusion
+ PE: display TimeDateStamp header field using UTC instead of local timezone
Kernel
+ bTree/varray: raise implementation limits to handle big databases. Removed "max number of chunks" limit.
+ include paths and predefined macros are set for each compiler separately
+ added CC_PARMS in ida.cfg as a tagged collection of the parameters (with compiler abbreviations as tags)
+ added report_gsfailure, com_raise_error and com_issue_error to noret.cfg
+ added tinfo_t, an object to hold the type information
+ C parser: added support for __ptr32 and __ptr64 keywords
+ demangler: support of 'rvalue reference' gcc mangling
+ demangler: various updates for GCC 4.x/C++11
+ parameter tracking: do not propagate 'this' name to callers
+ security: IDA will ask for a confirmation if an unknown IDB (from a third-party) is used to launch a debugger
+ security: disallow IDC snippets in startup signatures; only external IDC scripts may be used
+ removed -C command line switch (the compiler can be set using a script function instead)
+ type parser: c++ names with class/namespace qualifiers can be parsed, like aaa::bbb
+ type system: added support for 64-bit enums (64-bit enums in the enum view are supported only in idaq64)
+ types: added local_types_changed event; it occurs on any change to type definitions or when the user loads/unloads type libraries
+ types: added support for class inheritance; currently the parser support one base class but other parts can handle multiple inheritance too (at least in theory)
+ types: added support for type attributes (introduced with __attribute__ or __declspec keywords).
+ types: added support for zero sized structs
+ types: IDA can parse structure definitions with bitfields and store this info in the type strings
+ types: introduced udt_type_info_t object to represent struct and union types and refactored the code to parse udt type strings (so we do not have the same code in 2 places)
+ types: added new type-related callbacks for processor modules; they are used if PR_TINFO bit is set in the processor module; it PR_TINFO is not set, then the old callback will be used
+ types: deprecated varloc_t and created argloc_t, it can express register relative and static (fixed memory address) locations; also implemented compatibility layer so that older plugins continue to work
+ types: do not propagate "this" and "retstr" variable names, they just clutter the output without adding any useful info
+ types: introduced the notion of 'type level'. Types usually encountered in source files are called 'high level' types.
FLIRT, TIL & IDS
+ added win8_um.til and wdk8_km.til for Windows8 WDK (user and kernel mode headers)
+ FLAIR: all parsers now support > 0x8000 sections, offsets and fixups.
+ FLAIR: allow sigmake to process .pat files with Objective-C messages as function names (containing []+- and spaces).
Scripts & SDK
+ IDAPython: don't del() modules that were created by user scripts; provide idaapi.require() to import/reload modules (see http://www.hexblog.com/?p=749).
+ IDAPython: Enable multi-threading
+ IDAPython: python.cfg: set REMOVE_CWD_SYS_PATH=1 by default (remove current directory from the import search path).
+ IDC: added Breakpoint.AddToGroup(bpt, group_name) method
+ IDC: added function ApplyType()
+ IDC: added GetDisasmEx() which allows generating disassembly for non-existing instructions or locations in the middle of other instructions
+ IDC: added GetLocalTinfo(): return a local type by ordinal
+ IDC: added IsInt64() and similar functions
+ IDC: added typeinfo.size(): return type size
+ SCRIPT: implemented additional processor notification callbacks for scripted processor modules
+ SDK: added custom popup menu callback support for all choosers. Implemented submenus for choosers popup menus
+ SDK: added a new assembler format for octal numbers (q'123, flag ASO_OCTF7)
+ SDK: added DOUNK_NOTRUNC flag for do_unknown[_range]()
+ SDK: added expand_argv()
+ SDK: added guess_func_cc(): a function to determine the calling convention from the types and locations of arguments
+ SDK: added notifications and new control APIs for the Output Window
+ SDK: added str2ea_ex()
+ SDK: added SWI2_STDTBL flag for switch_info_ex_t - to mark switch tables which use standard layout but non-standard target calculation
+ SDK: forms: support for user-defined menu items for choosers in forms
+ SDK: generate_disasm_line() with GENDSM_FORCE_CODE can be used to generate instruction text for any address; regardless of the existing instructions in the database
+ SDK: getting/setting/deleting node properties (grcode_[set|get|del]_node_info).
+ SDK: ht_output: a sample plugin to demonstrate receiving output window notification and using of new output window functions
+ SDK: IDA graphs can be controlled by plugins, including Python bindings (see graph.hpp).
+ SDK: navcolor: sample plugin to illustrate how to customize navigation band colors
+ SDK: plugins can add popup menu items using add_custom_viewer_popup in two ways: 1) On ct_popup or view_popup notifications. Such items will be automatically removed after popup execution; 2) In any other place - the added items will remain until set_custom_viewer_popup_menu(viewer, NULL) is called (previous behavior)
+ SDK: qctime_utc() uses Coordinated Universal Time (UTC), is equivalent to asctime(gmtime(t))
+ SDK: removed requirement for mkidp branding for processor modules. Instead, lnames/pnames arrays are used.
+ SDK: rename segment registers areas interface functions.\
+ SDK: sample plugin ht_view to demonstrate usage of HT_VIEW notifications (view callbacks), different ways of adding user popup menu items get_viewer_name() APIs
+ SDK: support for UTF-8 strings in choosers (CH_UTF8)
+ SDK: tracing: added set_trace_platform(), get_trace_platform functions(), set_highlight_trace_options()
+ SDK: Change idp_desc_t struct to combine processor names. Set IDP 'family' name for UI purposes.
+ SDK: qflow_chart_t: added FC_CHKBREAK flag (so build_qflow_chart() may be aborted by user)
User Interface
+ UI: add "synchronize" option to the Function list which keeps it synchronized with IDAviews.
+ UI: added "Create structure from data" functionality to the stack frame view and Structures window
+ UI: added breakpoint groups. They can be enabled/disabled at once.
+ UI: added experimental "Address details" info panel (see View ? Toolbars).
+ UI: added exporting of breakpoints (to an IDC script)
+ UI: allow specifying directories to ignore (both for source mappings and binaries mappings)
+ UI: Alt+T "search all" command result is now displayed in the output window (pattern not found, bad regular expression, search aborted)
+ UI: color buttons now allow resetting the color back to default
+ UI: debugger: added an explanatory dialog box for debuggers with manual memory regions
+ UI: display long processor descriptions in the "Load file" dialog
+ UI: improve rendering quality and speed of zoomed graphs
+ UI: improved scroll bar behavior if there are big gaps in addressing
+ UI: make the commandline Python/IDC switch button non-flat to make it more obvious
+ UI: marked location descriptions can be edited from the marked location chooser (Ctrl-M)
+ UI: mouse wheel can be used in the navigation bar for scrolling (and Ctrl+wheel for zooming)
+ UI: navbar: when current location is changed the navigation bar is shifted so that the whole pointing arrow is displayed.
+ UI: new command: Export Data (default hotkey Shift-E)
+ UI: properly display Unicode/custom codepage strings in the "Strings" window
+ UI: redesigned "Name representation" dialog
+ UI: rendering speed improvements, especially in graph view mode
+ UI: structure offset dialog (selection-T): added quick filter (Ctrl-F)
+ UI: structure offset dialog: "Add missing members" function; Show hints for list view
+ UI: Support for fine-grained scrolling (e.g. two-finger scrolling on Macs)
+ UI: support for HiDPI (Retina) displays on OS X
+ UI: when adding on-access breakpoint from the Segments list, deduce its type from the segment permissions (for example, for the code segment we set eXec bpt)
+ UI: when deleting multiple segments, ask for confirmation only once
+ UI: removed "Output window" from the View menu. (it still remains in "Windows" menu)
+ UI: TXT: added Tracing submenu
+ UI: TXT: Added "Switch debugger" to the "Debug" menu
Debugger
+ debugger: Allow specifying which IP (v4) interface to bind to for remote debugger server
+ debugger: Allow the user to specify binary paths mappings, to be used by the debugger.
+ debugger: Android: support for debugging under Android 4.2.2
+ debugger: ARM: linux: added a workaround for syscalls made by jumping to the last page so we can single step them
+ debugger: win32: clarify the error message if getting debug privilege fails. Also, don't reset it if we didn't get it.
+ GDB: try to detect target architecture and bitness (qXfer:features:read)
+ GDB: use register layout from the feature info XML on ARM, if available
+ PIN: 'logging mode', 'only add new instructions', 'trace over debugger segments' flags may be changed when the application is running
+ PIN: allow 64-bit IDA to attach to a 32-bit process
+ PIN: check process bitness compatibility before attaching
+ PIN: function tracing mode: record call & return instructions
+ PIN: implemented attaching to a process
+ PIN: multiple fixes, improvements and speed-ups.
+ PIN: pass both 32- and 64-bit pintool DLLs when launching pin. So pin can choose appropriate tool itself
+ PIN: remove "Only add new instructions" option from tracer submenu as it is already present in the 'Tracing options' dialog.
+ PIN: support 'log return instructions' option
+ windbg: check if dbgsrv.exe is present in usual locations and offer it by default if so
+ Windbg: check the "WindowsDebuggersRoot" registry key to locate the debugging tools (WDK8)
+ windbg: complain if the user tries to debug 64-bit code with 32-bit IDA
+ Windbg: implemented jump by double-clicking on 64-bit addresses printed into the output window (delimited by the ` symbol).
+ WINDBG: when debugging or loading dumps for WoW64 processes, try to detect 32-bit vs 64-bit modules and mark segment bitness accordingly (IDA64 only)
+ WINDMP: when loading WoW64 dumps with 32-bit IDA, skip 64-bit segments instead of failing completely
Bugfixes
BUGFIX: 'convert to dword' (hotkey D) was failing to delete a hindering name in some cases
BUGFIX: "create function" command could wrongly fail in some rare cases
BUGFIX: "Dump database to IDC" could create too long strings that could not be parsed back by IDA
BUGFIX: 16-bits offsets from the current segment were not displayed properly if the segment did not start at its base address
BUGFIX: accessible memory limits (inf.minEA/maxEA) could be wrong after starting instant debugging
BUGFIX: alpha: load osf.til only for non-PE files because it is for Unix
BUGFIX: ARC: jump instruction with long immediate operand were incorrectly marked as indirect
BUGFIX: ARC: some cross-references for ld instructions were missing
BUGFIX: argument propagation could fail inside function chunks
BUGFIX: ARM debuggers could not correctly single step IT,TBH,TBB instructions
BUGFIX: ARM: handling of some Thumb-2 switches resulted in wrong cross-references, hindering disassembly and decompilation (Thumb bit was not ignored)
BUGFIX: ARM: some comments in the listing were using ';' character even in GAS mode (which uses '@' instead)
BUGFIX: ARM: some NEON instructions with an immediate operand (e.g. VMOV <reg>, #imm) were decoded incorrectly in Thumb mode.
BUGFIX: autoanalysis could enter an endless loop creating and destroying a macro instruction
BUGFIX: AVR module was not displaying xrefs to i/o ports
BUGFIX: avr: even if the user did not select a device, IDA would use the default device settings (AT90S8515) until the database was reopened
BUGFIX: binary search dialog interpreted control characters as their literal values (e.g. newline would be interpreted as 0A)
BUGFIX: CLI: a specially crafted IDB file could lead to a buffer overflow and potential code execution
BUGFIX: CLI: IDA could crash on some corrupted .NET files because of bogus values returned by the metadata APIs on Windows
BUGFIX: dalvik: fixed DALVIK_MOVE_RESULT_OBJECT instruction handling
BUGFIX: DALVIK: names of overloaded functions could be wrong
BUGFIX: DbgDword() was failing if pin debugger backend was used
BUGFIX: DbgDword() was returning garbage for wrong addresses on WinXP instead of failing
BUGFIX: debugger: 'manual regions' menu item was never displayed to the user
BUGFIX: debugger: 64-bit appcall was failing for bochs debugger
BUGFIX: debugger: fixed some data race conditions in the windbg debugger module
BUGFIX: debugger: IDA could crash while trying to resolve a "reg:delta" expression if "reg" was a virtual register (e.g. a flag name)
BUGFIX: debugger: IDA could lose control while tracing ARM programs
BUGFIX: debugger: if breakpoint with condition 0 was used in the short loop, "Suspend execution" button was kept disabled
BUGFIX: debugger: it was impossible to correclty resume the application once we suspended inside a page read-write bpt
BUGFIX: debugger: linux: bpt-related signals were sometimes passed to the application even if the user masked them
BUGFIX: debugger: mac debugger could report wrong memory layout info
BUGFIX: debugger: pin (64bit architecture) did not trace instructions having addresses 0xffffffff and higher
BUGFIX: debugger: selecting "Suspend" from the "Unable to single step" dialog box would lead to resuming the application
BUGFIX: debugging an x64 application could crash IDA when stepping over a pushfq.
BUGFIX: DWARF in fat Mach-O files with 2+ architectures could not be read, because of an additional offset to the DWARF information stream.
BUGFIX: dwarf: avoid type duplication.
BUGFIX: dwarf: don't apply DWARF-provided-name when a mangled name is already present.
BUGFIX: DWARF: Don't fail on anonymous types that embed similarly-named types with different sizes.
BUGFIX: dwarf: DW_TAG_label DIEs produced by Apple's fork of GCC would be placed at wrong addresses.
BUGFIX: dwarf: empty types (1-byte wide) were erroneously saved as dummy. Therefore, any type depending on them would collapse into a dummy as well.
BUGFIX: dwarf: GCC-produced DWARF files can have negative bit offsets.
BUGFIX: dwarf: handle bogus bitfield length generated by RVCT
BUGFIX: dwarf: If the x86 processor was set to something other than "metapc", the plugin wouldn't load DWARF info.
BUGFIX: dwarf: In some cases, loading of additional modules could cause IDA to quit.
BUGFIX: dwarf: it was not possible to load a separate file with debug info manually
BUGFIX: dwarf: mangled names could be ignored, in case the didn't appear in the declaration of a function, but in its specification.
BUGFIX: dwarf: RVCT-produced files could have references cross-compile_units, which would lead to having duplicate types