IDA 4.x
New Features in version 4.50 (12/02/2003)
Windows PE Integrated debugger
Processors
new processor: Intel xScale
new processor: Mitsubishi M32R (Professional)
new processor: Mitsubishi MELPS740
new processor: Mitsubishi M7700 family (Professional)
new processor: NEC 78K0 (Professional)
new processor: NEC 78K0S (Professional)
new processor: Fujitsu FR family
new processor: STMicroelectronics ST9+ (Professional)
IBM PC: borland RTTI-templates with GUID are supported
IBM PC: rep prefix is used when the Intel manual says it should be
IBM PC: the current compiler is taken into account when using the __fastcall calling convention (before only Borland was supported)
IBM PC: better handling of indirect calls (mov offset func-add-call is detected)
ARM: call sequences like "mov lr, pc; ldr pc, something" are recognized by ida and don't interrupt the execution flow
ARM: SUB Rx, PC, #imm is replaced by ADR Rx, label; ARM module is commented
ARM: stack variables are supported
ARM: option to disable pointer dereferencing is added
AVR: better configuration file; config file management is improved
AVR: interrupt vectors are supported
AVR: EEPROM file extension by default is BIN
MIPS: memory mapping is supported
PowerPC little-endian mode can be specified by the user
MC68K: respect the user-defined offsets for o_mem and o_near addressing modes
ST7: new config file
File Formats
COFF loader sets up the default data segment (better analysis)
better recognition of VxD driver files
HEX: added support of extended segment information record type
PE: better support of invalid files
PE: FS and GS register values are set to unknown at the loading time
PE: If the debug information is corrupted (in packed files, for example), IDA doesn't die but gracefully skips it
PE: section permissions are loaded into the database
LX: IDA always uses "metapc" processor and ignores the processor type specified in the file header
PSX object files: additional fixup record types are supported (26 and 30)
PSX object files: ida knows how to skip record type 60. We still don't know what this record type means, but at least we can load files with this record present.
Memory dump loader: now it accepts dumps with one digit per byte
Mitsubishi HEX file extended address records are supported
palmpilot loader: better check of time stamp
New XBE file format is supported
stricter check of PalmPilot files
the pdb plugin has been rewritten (requires VC++ to be compiled)
User Interface
flow chart: option to print block labels
'jump in a new window' command added in context and main menus
'jump to file offset' command
new command: move a segment which allows to move an existing segment to another address
it is possible to hide/unhide arbitrary regions
command to toggle leading zeroes on a number
value of an enum member can now be changed
graphs: now supports recursion depth
new dialog box to easily assign structure offsets/union paths to a selection "en masse"
previous & next drop-down menus for navigation stack (as in the Internet Explorer)
options in 'Browser' to set maximum lines & auto clean of upper items
cursor for search/auto-analysis in the navigation toolbar + associated color option
customizable background color for memo hints (Options -> Colors 1)
hexview: better handling of highlight-background combinations
hide/unhide all now works on functions, structs & enums for GUI & TXT
highlight the problematic line in a 'problem hint' on the navigation toolbar
hints on "Address" & "Called function" columns in callees
hints on hidden functions, structures & enumerations
hints on navigation toolbar (on stars, after a search)
hints on structures in a struct window
hints on xrefs in a struct window
hints on xrefs now print preceding lines and highlight the destination name
input text fields are in Courier font
jump commands (using the lists in the search toolbar) now open a new disassembly window if needed
xrefs in structure and enumeration windows are not displayed because they confuse the users
notepad now automatically popups at start if it was saved as opened in the database
register hints now print the associated comment
the function prototype is linked to the function stack argument definitions
the input database name is displayed in the title bar
the welcome dialog box can be resized
ida displays the welcome form is the input file is not specified in the command line
user defined graphs: option to print function comments (use the same color as regular comments)
desktop/top commands added to tabs popup menu
the 'show flags' command displays all information about the structure members
faster arrows management
ida runs faster
Kernel Improvements
new switch -o to specify the output database from the command line
WinCE: several IDS files were updated/added
FLAIR: plb supports wildcards in the file names
c parser: multiple byte character constants are supported
c parser: better handling of pointer modifiers; several bugs are fixed
ida looks for the referenced DLLs in the input file directory
it is possible to autoload a til file when a dll is referenced (see ids\idsnames)
vc6win.til is not loaded for pe files with subsystem==native (usually they are system drivers and they don't need vc6win.til)
the annoying "can't add structure member cx" message removed
the default loading address for all file types is 0 (this can be overridden by the file format)
ids files with '-' is idsnames do not prevent the kernel from using the corresponding dll from the system directory
IDC and SDK
IDC: GetFloat(), GetDouble() functions are added
IDC: GetOriginalByte() function is added
IDC: GetStringType() function
IDC: descriptions of NextHead, PrevHead, AskFile IDC functions are updated+ IDA environment variable is not required to build modules anymore
added comments about filling the op_t structure; fixed some typos in netnode.hpp
COLOR_INV is added
hidden plugins are supported: PLUGIN_HIDE flag is introduced
idaw choose() function respects the batch mode
negative buffer sizes are handled properly (str2user, user2str, pack_ds)
new function flag FUNC_BOTTOMBP. It means that the frame pointer is equal to the stack pointer in the function and it points to the bottom of the stack frame.
ph.flag PR_CHK_XREF: don't allow near xrefs between segments with different bases. This flag is used for IBM PC only.
read_ioport_device() function reports about configuration files with no devices
renamed FIXUP_PTR32->FIXUP_PTR16, FIXUP_PTR48->FIXUP_PTR32
the user-defined data supplied to linearray_t is documented in kernwin.hpp
up to 16 source files for plugins
setBreak() function is added
the processor extension callbacks are called for all instructions, not only when cmd.itype >= CUSTOM_CMD_ITYPE
find_ioport_bit() returns NULL is the bit name is NULL
rebase_program() is added. This function allows to shift the whole program in the memory. Since rebasing the program involves correcting the relocated bytes, the file loader takes part of the job. File loaders may have "move_segm" callback functions now.
now a good behaving procesor module handles the ph.move_segm event
numop2str(): output instruction operand with optional leading zeroes; is_lzero(),toggle_lzero() to modify the display of leading zeroes; inf.s_genflags introduced; atoa, b2a32, b2a64, b2_width function parameters has been changed
move_segm_start(), set_segm_start(), set_segm_end() may destroy the adjacent segment if necessary; ADDSEG_QUIET flas has been added
new type of segments: SEGM_DEBUG. Used in the debugger.
get_sourcefile() function prototype has been changed. Now it returns the range information.
hidden_area_t and functions to work with it are introduced
byteValue() function is renamed to _byteValue(); this function should not be used anymore if possible. The reason is that it works only with 8-bit processors and doesn't take into account possible debugger side-effects.
Bugfixes
BUGFIX: MIPS R5900 madd/msub instructions were not disassembled
BUGFIX: C166: ida would create strange references if the first segment of the program was not loaded at the address 0; .end start would display garbage if there was no start address
BUGFIX: ARM switch jumps were recognizied only for R0BUGFIX: Intel HEX files could be loaded incorrectly
BUGFIX: MS DOS executables with the entry point at FFF0:0100 are loaded correctly
BUGFIX: Amiga: zero sized hunks caused problems
BUGFIX: COFF: skip .stab* debug information sections
BUGFIX: IDA would fail to load some invalid PE filesBUGFIX: "Create"/"Edit" (purged bytes)/"End of" function actions are now updated properly
BUGFIX: can now rename a register for one instruction
BUGFIX: can now rename everywhere (externs, ...)
BUGFIX: copy to clipboard from the list views could hang
BUGFIX: correct work on multiple monitor desktops
BUGFIX: cursor disappearing if using CTRL-TAB
BUGFIX: hints on local labels weren't always highlighted
BUGFIX: ida could crash if several standard enums were added without uncollapsing them
BUGFIX: ida would go to the top of the screen during analysis even if it was put to the bottom (z-order)
BUGFIX: if the messages window was minimized to invisibility, then the next start of ida would not display messages on the status bar.
BUGFIX: infinite scrolling enum window
BUGFIX: it is impossible to rename a register to another register name
BUGFIX: it is possible to open xrefs window even the current item has no xrefs
BUGFIX: it was impossible to use the function name at the function header to double click, jump to xrefs, etc. if the name contained undisplayable characters (ibm pc, mips, mc68k)
BUGFIX: navigation toolbar not updated once displaying after undock+hide
BUGFIX: opening a database without closing the current one could leave the names, functions, or strings window unopened even if they should have been opened for the new databases; this could also lead to a crash
BUGFIX: pressing the down arrow of the scrollbar now stops once no more lines
BUGFIX: the collect garbage flag would stay once set until ida exits
BUGFIX: the width of the ordinals field in the "jump to entry point" was 3 positions which was not enough to display big ordinals. made it 8.
BUGFIX: window98 resources were depleted fast
BUGFIX: "jump to the beginning" with home-home-home key was not working if used twice with "jump to address" in between
BUGFIX: after repeatedly closing/opening the structs/enums window the renaming of a struct/enum member could lead to an access violation
BUGFIX: no more "list index out of bounds" message if the number of columns in a chooser changedBUGFIX: type specification was printed incorrectly: int (*fnc1(void))[5];
BUGFIX: some borland thunk mangled names were not demangled
BUGFIX: truncated names from gnu compiler would cause problems during demangling
BUGFIX: verification of the new manual operand would fail for 32-bit operands if the old operand didn't have a segment register and the new one has
BUGFIX: unions were not displayed in the list of standard structures
BUGFIX: IDA was marking the return instructions of some functions as "unknown_libname"
BUGFIX: it was not possible to disable the plugin hotkey
BUGFIX: pcf was not detecting coff files properly
BUGFIX: autoload vc6win.til only for IBM PC PE filesBUGFIX: IDC function GetSegmentAttr() was broken
BUGFIX: refresh the screen after IDC scripts
BUGFIX: manual execution of VXD.IDC could hang ida
BUGFIX: qmakepath() could generate file names with several backslashes in them
New features in version 4.30 (05/08/2002)
User Interface
major improvements, too many changes to list, MDI, context sensitive toolbars, more standard looks.
Processors
ARM Architecture Version 5E (Enhanced DSP) instructions are supported, FLIRT signatures and type information files have been added.
Motorola 6812: many new chip types are supported, memory configurations can be specified
File Formats
Improved support of PSX object files.
Improved support of EPOC files.
Borland extensions for DMPI to PE executables are supported
ELF machine type 6 is supported
Kernel
The stack tracing algorithm is improved
Type libraries are regenerated: they are smaller
Improved FLAIR utilities (added ELF support for IBM PC)
Bugfixes
Fixed a bug in PIT: all stack parameters were shifted by 4 for indirect calls
IA64: brl.cond.dptk.few instruction caused an internal error
the list of xrefs to a stack variable could contain wrong data items (only instructions can be in this list)
fixed bug in set_de (some standard enumeration declarations were wrong)
TMS320C6: several bugs are fixed (ACR/ADR, B reg src2)
Better handling of stack references to the saved registers area: bp-based frames are not modified because of this
PowerPC: wrteei instruction was disassembled incorrectly
Some enumeration constants in the type libraries could have incorrect values
IDA would lose some variable names if more than 1000 very long variable names were defined (1KB long names)
If the last symbolic constant of the last enumeration was not the only symbolic constant in the enumeration and its value was equal to -1, then it would not be displayed in the enumeration definition
New features in version 4.21 (19/04/2002)
Processors
Trimedia (upon special request only)
TMS320C55 (Professional). All documented instructions are supported
the PIC processor module offers better analysis of bank switches
8-bit Motorola : many new chip types are supported, memory configurations can be specified
C166 (Professional): many more chip types are supported, memory configurations can be specified
F2MC : many more chip variants are supported, memory configurations can be specified
Z180 configuration files have been added
IBM PC: memory references with the sib byte can be converted to offsets.
ARM: pseudo-instructions can be turned off (ret)
File Formats
Intel OMF386 is added
EPOC6 import ordinals are supported
User Interface
xrefs from/to code,data,externals
user-defined graph (various options)
highlight current addresses in graph (blue by default)
The Search Toolbar now allows to search incrementally for text, names, functions, addresses, etc.
Hovering the mouse over a label displays a hint with the instructions/data at that label
The Rename command is available only if the cursor is either on a valid identifier or address or at the beginning of the list (to the left of the instruction mnemonics)
Direct conversion to code/data without intermediate step of undefining the existing item. Use the options dialog box if you want to customize this behaviour.
Improved highlighting of identifiers. The highlight color can be changed
The listbox and messages window contents can now be copied to the clipboard
Unhide all functions
Names: ask confirmation to delete a name from the list
In the structures window it is possible to jump to the desired structure using the "Jump by name" command. The hotkey is Ctrl-L. The same command is available in the enumerations window.
Welcome box:
delete removes previous projects from the list
hovering over the project now displays the full name of the file
It is possible to specify the number of bytes purged for the imported functions (through Edit->Function)
A command line window can now be used to enter IDC commands: (IDAGUI.CFG, DISPLAY_COMMAND_LINE should be YES to activate this).
Immediate help on an IDC function
Text version: a local clipboard is added to the dialog forms. (Ctrl-Ins - copy, Shift-Del - cut, Shift-Ins - paste, Ctrl-Del - delete).
Kernel Improvements
Better demangling of Borland C++ names, including the templates. Since there is no way to distinguish the new and the old naming schemes, now IDA tries both methods. This can sometimes lead to wrongly demangled names.
Borland CBuilder v6 FLIRT signatures are added
Bug Fixes
For some PE files, the exported function names were missing.
Negative 16-bit structure offsets with non-zero delta would be displayed wrongly.
Structures with embedded unions aligned to 8 bytes could have wrong member offsets.
IBM PC: if "Allow references with different segment bases" was set, then the complex offset expressions would have wrong values.
OS/2 version was broken.
OMF COMDEF far records were processed incorrectly.
Negative 8/16-bit values were badly represented as enumeration constants. The logic has been changed to make it easier to handle
Binary files for wide byte processors (line PIC16) were not loaded completely.
H8/500: 16-bit jumps in the page different from page0 would still refer to the page0
H8/500: the values segment registers BR and DP are used and stored
COFF 386: IMAGE_REL_I386_SECREL relocation type is supported
It was possible to scroll past the end of the disassembly listing using the mouse wheel
Some kinds of corrupted PE files are loaded better than before
Some segment:offset address expressions were parsed incorrectly
It was impossible to create local labels with data references
get_screen_ea() was broken.
IDA PIC Limited Edition
A reduced price version that offers all the power of IDA for the PIC family of microcontrollers only. (14/03/2002)
New features in version 4.20 (19/12/2001)
Processsors
TMS 320C54xx
The Motorola 8/16-bit processor modules (except 6812) now support configuration files with the memory, interrupt vector, and I/O port definitions. See files named 68xx.cfg. Currently only 6805.cfg and 6811.cfg are available and other files will be made available later.
The C166 module displays an information box explaining about the memory mapping feature present in the Options, General, Analysis,cessor specific options.
File Formats
Microsoft.Net Beta2 files are supported.
Stricter check for RT-11 SAV file format. The file extension should be "SAV". There were too many false recognitions.
PE files: IDA now recognizes TLS callback entries and properly comments them.
ELF files with destroyed SHT are supported.
Interface
Arrows: The graphics version displays the execution flow in the form of small arrows to the left of the disassembly text.
IDA starts to scroll the window without waiting the cursor to reach the window top/bottom. Also it is possible to scroll the window by using Ctrl-Up, Ctrl-Down arrows.
Shift-Enter or Shift-DoubleClick selects the current identifier.
Edit, Function, Rename register: Register renaming definitions start at the cursor position and last up to the next definition. The address range of the existing definition is automatically truncated at the cursor position.
Kernel Improvements
The function boundaries are automatically changed if an item overlapping it is created.
the LoadSym.Idc has been improved to work with dbg2map and mapsym
Bugfixes
ARM BX instruction was not disassembled.
TXT version: Ctrl-Up, Ctrl-Down and other keys were not recognized as valid keycodes.
PPC ELF R_PPC_EMB_SDA21 relocation type is handled differently. Since there is not enough documentation, this could still be wrong.
Motorola movec instruction wouldn't be disassembled if an unknown control register is present in the instruction
delphi.sig doesn't load bcb5win.til anymore
TXT version: Ctrl-N was not working in the Enumerations window
H8 in the advanced mode would use 32-bits for the @aa:8, @aa:16, @aa:24 addressing modes
IDA under Windows could crash if "comment ascii references" was on
Motorola 6805 brclr/brset/bclr/bset syntax now conforms regular conventions
IBM PC: redundant rep/repne prefixes were in the wrong order
Enumerations window: the text search could fail if there was only one defined enumeration
netnode::getblob could return nonexistent blob
TMS320C6 module could crash is a specific illegal opcode is encountered (ldb.d2 *+b14[35], b1 with 'dst' field bit 0x10 set)
It was not possible to expand a variable sized structure just before its last member
New features in version 4.18 (19/10/2001)
Processsors
Fujitsu F2MC-16L and F2MC-16LX (Professional version).
PIC12xx , PIC14xx, PIC18xx processors in addition to the already supported 16xx family. (Starter version)
Intel 960 module enhanced: FLIRT and types are supported I/O port names are added to i960.cfg
W65C02S support has been added to the 6502 module.
File Formats
the PDB plugin recognizes the Windows XP SymDia symbols. Thanks to Mark Russinovich for the contribution.
OpenBSD aout files are supported
COFF files for Intel 960 are supported
ELF AR libraries are supported
Interface
a new window listing callers and callees is available.
Wingraph 32 can now print.
Zooming in and out on graphs can be controlled by the mouse.
a small notepad has been added. The notes are saved and opened each time the database is reloaded.
IDA is now able to check for the availability of updates and warns when the free update period is about to expire.
Patching has been removed from the default installation but can be activated by the DISPLAY_PATCH_SUBMENU option.
'Undefine' now warns before proceeding. this option can be turned off by the CONFIRM_UNDEFINE_COMMAND parameter in the IDAGUI.CFG or IDATUI.CFG files.
Kernel Improvements
Enhanced recognition of the function calling conventions.
Floating point numbers in the instruction operands are supported
Slightly improved vc6.til file.
Automatically resize the saved registers area in the function frame if there is a reference into the area from the function body.
New linux system calls are recognized by IDA
Bugfixes
ARM BX instruction was not disassembled.
The last character of unicode strings would be missing sometimes for the big endian processors.
MC6811 LDA instructions would create 16-bit data item.
IDA would miscalculate the program end after loading binary files
"rename stack variable" at place would rename a wrong variable
Uninitialized array elements with the specified width would not be displayed
A plugin that opened a non-modal window would be unloaded at the exit before having chance to clean up the window, which would lead to a crash
A bitfield with one member equal to -1 mask -1 could not be converted into a normal enumeration.
New features in version 4.17 (22/06/2001)
Processsors
Intel 960 support
ST20/C2-C4 support
.Net module improved
DEC Alpha processor improved and supports the type system. Thanks to Ahmon Dancy for help.
PowerPC module improved
File Formats
IDA can now load hexadecimal and octal memory dumps in free format. (A set of heuristics is used to recognize and load such files) .
Mach-O executable files are supported. (The relocation information is ignored for the moment.)
Microsoft X-box XBE files are supported. (However, the module may not cover all possible file format particularities).
Compaq Tru64 dynamic loader information is supported.
Interface
external graphing module displays functions flow charts..
Array element indexes can be displayed as comments
The MakeAnyName (Ctrl-N) command is removed. The MakeName command is enhanced to handle all cases.
The Welcome dialog box is improved and keeps track of several previous disassemblies.
The GUI version has a Strings Window which contains all string constants present in the program.
GUI version: Alt-Enter = go to address in a new disassembly window.
GUI version: a special hotkey to create unicode strings can be assigned. See the IDAGUI.CFG file, the parameter name MakeUnicode.
GUI: the RAM/ROM sizes and addresses can be specified for binary files if the processor module doesn't handle it automatically.
Kernel Improvements
New configuration parameter: ASCII_SAVECASE. If set, then IDA will preserve the case of the string contents when generating the string name.
Public global variables with anonymous structure or enumeration types are supported by the type system.