New Features in the IDA Pro v4.8 (3/15/05)
Major Features
Instant Debugger: The debugger can be launched and a process started without a database. This feature is available locally and remotely and allows the debugger to be attached to any running process in the system. IDA can be used as the default system debugger.
Remote 64-bit debugger for MS Windows 64 running on AMD64/EMT64. IDA itself runs in 32-bit mode while the debugger server runs in 64-bit mode to launch and debug 64-bit applications.
Ffull type system support for the ARM processor. IDA supports the function calling conventions and comments function parameters in the same way as it does on PC. The ARM module has been significantly improved: see a list of all the ARM specific enhancements below.
Wizard-like interface to load new files. IDA assists the user in the initial load process by asking relevant questions about the file. This interface is configurable with XML files.
Processor Modules
New processor: Analog Devices ADSP 218x (advanced version)
ARM: "no automatic arm-thumb switch" option has been added.
ARM: conditional instructions modifying SP are not taken into account while tracing SP.
ARM: ADDAL PC,... always stops the execution flow.
ARM: EPOC imported function glue code is recognized.
ARM: IDA creates ALIGN directives before and after jump tables in the thumb mode.
ARM: IDA displays jump table comments for all types of jump tables.
ARM: IDA knows about function calling conventions.
ARM: IDA propagates the T bit for all code xrefs; since there are many ARM/THUMB switches now, superfluous directives to switch the mode are not displayed.
ARM: R_ARM_PC13 relocation type is supported.
ARM: a function consisting of MOV PC,LR in the thumb mode is recognized as a nullsub.
ARM: for jump targets: do not automatically switch to another mode if there is already an instruction disassembled in the current mode.
ARM: it is possible to modify the operand type of indirect operands like '=xxx'.
ARM: jump table recognition has been improved.
ARM: some BL instructions are treated as simple B (not as function calls): if the target destroys the LR in its first basic block.
ARM: thumb mode EPOC apps are recognized and analyzed properly.
ARM: IDS files for MFC.
ARM: Windows CE types are added.
ARM: function creation is improved very much.
ARM: new IDS files.
ARM: updated flair signatures.
IBM PC: "test x, y" operands are reversed if x and y both are registers. For some obscure reason all assemblers reverse them.
IBM PC: alternative collapsed output of structures.
IBM PC: better detection of the function frame size.
IBM PC: emulator knows about functions starting with mov rX, rX
IBM PC: for instruction "lea xxx, ds:###" the second operand is automatically converted to an offset if it makes sense.
IBM PC: imul instruction always has signed immediate operand because unsigned negative operands are compiled incorrectly.
IBM PC: int xx instructions generate xref to low addresses only in the binary files.
IBM PC: support for TASM ideal mode has been added.
IBM PC: parameters of linux system calls for pc are commented (there are some problems with some syscalls, like socket())
IBM PC: better handling of the _alloca_probe() function: ida does not blindly delete the stack frame of functions using the __alloca_probe function - this might lead to more unreferenced variables.
IBM PC: __chkstk is recognized as a function changing the stack (as __alloca_probe).
MC68K: immediate instruction operands are represented as unsigned numbers by default (with some exceptions)
68K: better treatment of pea/lea instructions (please reanalyze existing databases!)
PPC: added support for subi/subic instructions based on TOC/segment registers
80196: changing to processor type to 80186NP makes the segment registers available immediately (no need to reload the database)
DSP56K: many nops in a row are not disassembled automatically
H8/500: considerably improved the analysis, fixed bugs
better handling of segment registers for ARM, M7700
File Formats
Wizard-like interface to load new files into the database.
COFF: Windows AMD64 files are supported. Relocation information is not handled since documentation is not available.
COFF: added support for Window64 object file relocations. Since there is no documentation on the topic, some relocation might be incorrectly handled
COFF: improved file format detection for zero filled files
COFF: labels with '$' have less priority than normal names
COFF: added support for ARM THUMB files (relocations are not supported yet)
ELF loader allows to load files for unknown machine types
ELF: AMD64 .got relocation types are handled (.plt is not handled yet)
PE: crippled files with unusual information about the PE header can be loaded into the database with the file header./LI>
PE: in the manual mode IDA rounds up the exact segment size in the header to the file alignment.
PE: new option: create flat group. The segment registers will use flat group instead of the real segment names.
The default value is specified with the PE_CREATE_FLAT_GROUP parameter in the IDA.CFG file.
PE: files with partially corrupt relocation table can be loaded into the database.
PE: ida can load truncated import tables.
Palm Pilot program analysis is improved (recognize pea/rts sequence, some pilot debug info, handle pea in a special way to create more code)
Palm file loader uses 68K universal emulator by default.
binary files: by default ida creates 32-bit segments if the input file is bigger than 64K
file loaders do not exit() to the operating system in the case of problems with the input file but rather stop the loading process and return to ida
the analysis of MS DOS 32-bit extender files has been improved
Kernel Enhancements
dump database to idc': local names are saved to the IDC file
added support for __declspec(align(#)) keyword in the type system.
bitwise negation works for structure members.
checkarg knows about nested structures (yh)
coagulation algorithm has been improved
flirt: tiny (less than 8 bytes) unnamed library functions are ignored
frame pointer delta has been introduced. This delta is useful for functions with the frame pointer pointing to the middle of the stack frame. Usually the frame pointer points either to the top or to the bottom of the frame. However some new compilers set the frame pointer midway. IDA knows about IBM PC function prologues with such frames and automatically determines the frame pointer delta. For other compilers/processors, the user can specify the detla value in the 'edit function' dialog box.
+ ida uses new memory allocation scheme; the old memory allocation algorithm was too conservative in the memory use.
if the structure offset is equal to the structure size, then it is displayed as "size struct_name".
it is possible to include local names in the output map file.
new environment variable: IDAUSR. This variable specifies the directory with the user-specific settings.
speed: ida tries to create function tails only if there is a reference from a function to a non-function.
structure variables can be displayed in the terse one-line form if the target assembler supports this representation
new output file type: assembly include file.
added conditional expressions to the 'idsnames' file til selection. Now IDA loads appropriate ntdkk file depending on the input file bitness.
the default offset type depends on the current item size (before only the current segment bitness was used to determine it).
type system: added support for __declspec(align(#)) and __unaligned keywords.
FLAIR utilities are updated to support AMD64 files; Visual C++ v8.0 signature files are added.
TIL files for AMD64 are added; tilib is improved to handle constructs in the new header files.
combined vc6win.til and vc6winr.til - vc6winr.til does not exist anymore.
the use the -p switch is permitted for old databases.
new analysis option: create data offsets when possible. This option leads to more aggressive offset creation which improves the disassembly in most cases.
IDA does not comment function call parameters referencing to strings because such comments make the string invisible at the call site
__imp_ prefix is ignored in the type libraries.
pointers to functions are supported in the parameter propagation; trying to apply a data type to an instruction generates an error message.
when creating a thunk function, IDA copies the target prototype to the thunk.
in the type libraries, _name@## is the same as 'name' (visual c++ uses both names to denote the same function)
more aggressive parameter type propagation.
better algorithm to create data arrays
SDK and IDC
IDC: added MakeNameEx() function to have full control on renaming program addresses.
SDK,IDC: added functions to manipulate XML values in the internal XML tree.
SDK: IDC functions can be called without a database. Built-in functions have a special flag EXTFUN_BASE telling that they must be called with an open database.
SDK: SetFileExt, FileExt, hasExt functions are renamed as set_file_ext, make_file_ext, get_file_ext. Additional parameters to check buffer overflows are added.
SDK: added a possibility to tell 'this is definitely not a thunk function' in the ph.is_jump_func notification for the processor modules; this leads to the slight API change which should not pose any problems with the existing modules.
SDK: added more segment alignment codes.
SDK: added netnode::end() and netnode::prev() functions.
SDK: additional parameter for parse_type() - the name of the declared variable.
SDK: bit masks are supported by get_name_value().
SDK: find_error(), find_notype(), tag_skipcode() functions are added.
SDK: functions dealing with the signness and bitwise negation are revised; now the bitwise negation has a bit in the flags which allows to use it in the structure and enum definitions.
SDK: gen_idc_file() is removed; use gen_file() instead.
SDK: introduced 'stack variable scaling factor'. Used for processors which implicitly scale stack variable references, e.g. tms320c55.
SDK: introduced the notion of 'ephemeral' segments: debugger segments which are not loader segments. The kernel does not analyze ephemeral segments.
SDK: introduced the notion of a 'loader' segment. All segments created by loaders have this attribute.
SDK: is_32bit_func() is replaced by get_func_bitness().
SDK: leading_zero_important() function has been added.
SDK: only debugger segments can be created when the debugger is active. you can use change_segment_status() to convert debugger segments to regular segments afterwards.
SDK: ph.kernel_config_loaded callback has been added - for plugins who want to set their own config settings
SDK: removed the ph.align_size() callback from the type system callbacks.
SDK: shortened some field names in the debugger related structures (thread_id -> tid, etc).
SDK: the string list is available to plugins.
SDK: new function set_sreg_at_next_code(); ph.setsgr parameters are changed.
SDK: introduced AS2_COLONSUF for assemblers with :xx suffixes in the address expressions.
SDK: renamed 'analyse' -> 'analyze' in all function names.
SDK: added auto_queue_empty callback.
SDK: choose_ioport_device() has no default parameters (so we have a compilation error instead of wrong runtime behaviour).
SDK: get_member_ti() accepts NULL as the buffer.
SDK: interface to the file loader has been changed. Instead of FILE *, now we use linput_t * (see functions in diskio.hpp). linput_t allows to work with local and remote files.
SDK: modified the interface of many functions to avoid buffer overflow vulnerability problems.
SDK: new function sanitize_file_name()
SDK: renamed cmangle_name() -> decorate_name()
SDK: splitSRarea() has been removed. Use splitSRarea1()
SDK: added a comment about the necessity of using the invalidate_... functions from the debugger notification callbacks.
SDK: added func_t * to the display_flow_graph()
SDK: added qisdir() function.
SDK: added qvector and qstring template classes to IDA API.
SDK: method to obtain the debugger description has been changed: now the init() function of a debugger plugin must fill the 'dbg' global variable if it wants to stay in the memory; the run() method is not used for the debuggers anymore
User Interface
new command: take memory snapshot.
new command: 'generate include file'. 'generate assembler file' does not generate the type declarations anymore.
new commands: find error operand and find all error operands. these commands look for operands in red; 'search for immediate' has new mode: look for untyped immediate values.
'disable addresses' checkbox in the 'edit segment' dialog is taken into account even if 'move adjacent segments' is on.
added a warning message telling that IDA does not handle relocation information of Mach-O files (in other words, external references in Mach-O object files are not resolved).
added checkbox to modify 'loader segment' attribute.
added separate menus to run and attach to processes with no existing database (local & remote).
arrows to/from locations with huge number of xrefs are displayed fast.
faster display of data items (we do not analyze them repeatedly anymore).
graphing commands are available in the text version; the GRAPH_VISUALIZER parameter is moved from idagui.cfg to ida.cfg.
gui: added an option to confirm the 'undefine' command only if there is a selected area.
gui: command line switches are used only for the first database.
hidden areas have short comment with the current address by default, words "[PRESS PRESS + TO UNCOLLAPSE]" are not added to the comment.
if ida is launched with the file name in the command line and the user decided not to load it, then ida quits immediately.
mark location: the name of the marked location is proposed as the default mark description. up to 1024 locations can be remembered.
the notepad now uses the same font as the disassembly views.
the strings window is available in the text version.
text: multiple selections are supported in various lists.
text: the text version uses the system clipboard under MS Windows.
tv: better handling of the keyboard input under NT; fixed a bug with macro_ready; window resizing (YH)
tvlinux: xterm-scokey supports Shift-PgUp/Shift-PgDwn key combinations.
ui: eventually create 64-bit words by pressing D if the input file contained 64-bit segments.
ui: increased the limit on the number of marked locations to 1024 (see the next Changelist!)
ui: it is possible to edit the type of data items; the item must have a name in order to have a type.
ui: remembers the last settings used in the 'make array' command.
WINDIR parameter is back in the gui version.
'Jump to new hex window' command added in disassembly view popup menu for addresses and operand values
'log breakpoint instructions' controls all breakpoint instructions, not only the breakpoints not set by the debugger.
CONFIRM_SETFUNCEND_COMMAND config file parameter makes IDA to ask for a confirmation of the 'set functon end' command.
library module sizes in the library display are shown in hex with the leading zeroes - makes it possible to sort by size.
txt: multi-column lists with wide last column (like list of strings) can be scrolled left to see the whole strings.
txt: text version always asks for a confirmation of 'undefine' command.
ui: Shift-F12 opens the strings window in the text version (the same hotkey as in the gui version).
ui: the default button for the 'undefine' command confirmation dialog box is 'no'
Debugger
debugger: -r switch to run IDA and debugger without a database.
debugger: handle int3 SEH exceptions.
debugger was not active if the PE subsystem was not Windows. Now unknown subsystems can be debugged too.
debugger knows about fs:xxx references (ida api has changed!); the debugger reference view has been improved (text mode)
debugger segments are created in the collapsed form.
debugger: 'Library unloaded' events display the full path to the unloaded DLL if available (exactly like 'Library loaded' events).
debugger: IDA automatically detaches from a previously attached process if the user closes the database.
debugger: network errors are handled properly and do not lead to ida crashes.
debugger: the debugger server checks the interface version number upon connection to ida interface.
debugger: changed the default background color.
debugger: added a button to reload the exceptions table from the exceptions.cfg file.
debugger: exception handling is improved, added exceptions.cfg: the exception handling information for new databases; the exception info originates from this file and is passed to the debugger module.
ida can be used as the system just-in time debugger in windows.
it is possible to delete problems directly from the 'choose problem' modal dialox box.
text debugger: 'set current ip' and 'show application screen' commands have been added.
text debugger: added possibility to save/restore the application screen so that ida and the debugger application can share the same screen (YH).
text debugger: display the current operand value/address
Bugfixes
'dump to database to idc' was producing incorrect Function_###() functions.
'reload input file' of a database with the resources section of a PE file would not reload the resources section.
'search for void' was not stopping at the correct operand in the text version.
16 and 8 bit offset expressions are calculated with appropriate arithmetic.
6812: memory mapping of data references was sometimes wrong; other modifications.
68K module was incorrectly tracing SP for some instructions.
8051: addressing to FSR and RAM has been corrected.
AIF loader was not loading properly big endian files.
AVR uses OOFW_8 instead of OOFW_IMM+dt_byte to represent numbers because dt_byte has 16 bits.
AnalyseArea(0, BADADDR) was not working.
COFF loader could reject some correct files.
Ctrl+V was not working in the notepad.
IBM PC movmskps instruction was disassembled incorrectly ; movddup, movsldup, movshdup instructions were unknown; (everything due to intel manuals from 2003); only mm form of pmulhuw was disassembled.
IBM PC: sldt/str instruction have 16 bit operands because 32 bit operands are rejected by the existing assemblers. Intel docs say that these instruction may have 32-bit operands.
IDA complains about patching relocation bytes only if they really change their values.
IDA could crash if a function in the navigation stack was destroyed and the user decided to return to it.
IDA could spend huge amount of time refreshing the navigation band when loading some files.
IDA was too agressive in function tail creation.
IDC: if(...) {} could not be executed.
IDC: the definition of function with long names were properly parsed but it was impossible to call them properly.
MC68K: IDA was not taking into account that lea xxx(sp),sp instruction modifies the stack pointer.
MC68K: pea/lea instructions with offset operands were not creating xrefs; fixed a small typo in processor specific options dialog box.
MS DOS overlayed exe files were incorrectly assigned the small memory model.
PPC module was incorrectly using general registers instead of floating point registers in some instructions.
PPC: IDA was too aggressively creating xrefs to lis/addi pairs.
PPC: do not truncate TOC offsets to 16 bits anymore.
PPC: lfsx first operand is a floating point register.
Palm pilot module was using big endian mode for all processors (and the base == 0 regardless of the user settings).
SP was not properly traced for F2MC, MC6816, TMS320C54, TMS320C55.
TMS320C3 module could crash on some opcodes.
TMS320C54 had several problems: wrong data type of memory operands; (DP<<&)+Smem operands were displayed incorrectly; wrong xref type of macp, macd instructions.
TMS320C54: stack variables were not correct because the return address size was not specified for the module.
access violation during analysis if the data segment was not loaded (manual load; refuse to load the .data segment).
access violation in the following case: start idag with a wrong file name in the command line, press cancel on the file selection dialog and close ida by pressing the 'close' window cross.
autoanalysis queue was losing requested addresses in some rare circumstances.
collapse the current segment only if the cursor is at the segment start; this is done to avoid segment collapsing when the user presses '-' inadvertently.
comhelper plugin was accepting only "_GUID" as the structure name.
compiling an idc file from a running idc script could pose problems.
debugger register views were not wide enough.
debugger: IDA was sometimes returning wrong paths for loaded DLLs - we now try two different technics to determine the full DLL path, and finally return the export name from the DLL in case of failure.
debugger: in some cases it was impossible to manually detach/terminate a process.
debugger: attaching to a remote process several times might cause problems.
debugger: modifying a register value inside an IDC condition was not working properly for multi-threaded applications.
debugger: stepping over "repne jmp short label" would lead to running the application.
debugger: the EFLAGS register was not properly updated after the user manually modified a CPU flag.
debugger: when switching the main registers window from MDI to desktop/on top, some controls were disappearing.
del_cref() might delete a data, not only instruction if there were no references to the target address.
displaying hints to collapsed hidden areas could hang ida for long time.
double clicking in the list of found items would change the position in the disassembly view but would not switch to it, confusing the user.
en masse operations with the value range would not affect non-void operands.
function addresss iterator might return a wrong address for some special cases (for functions with several tails and a condition which is not satisfied for some for them). In particular, the list of xrefs to stack variables might be wrong if the function had several tails without any stack variables in them.
guess_type() could crash if the address of a pointer referencing to itself was passed.
hopefully the problem with persistent 'please wait' box is fixed.
ida could loop infinitely if a function tail would call itself and could not be converted to a function.
if IDA has been minimized, chaning the desktop color would crash IDA.
in PE files IDA thought there was a relocation attached to the first address of a segment with relocations. This might have lead to the treatment of entry points at the segment starts as non-function exports but as data exports.
it was impossible to cancel an offset operand by pressing 'o' in some cases.
it was impossible to detach from a process in the suspended state (process would crash).
it was impossible to disassemble files with the 'reg' extension.
it was impossible to load resources of LX files.
it was impossible to select one line address range in the text version.
it was impossible to set a software breakpoint in a readonly page.
it was impossible to specify a function prototype to insert/shift arguments + the type of function arguments in the stack frame is adjusted when modifying the function prototype.
it was impossible to use any keystrokes in the cpu register window is the focus was on a register value field. Now it reacts only to hex values and backspace.
item types are displayed regardless of how the demangled names are displayed. before they were not displayed if demangled names were displayed in the listing as names (not as comments).
linux debugger was not closing file handlers before launching the debugged application.
linux version was creating ~/.idapro with wrong permissions.
linux: information about hidden messages is saved in the user directory, not in ida directory.
linux_stub file was missing which made impossible to debug linux programs from ms windows.
locret_ labels are generated correctly for wide byte processors with high byte first.
message boxes could not be displayed recursively.
output map files were wrong after rebasing a PE file.
pelf was not aware of module names separated by '\n'
qbasename() does not crash on NULL (it seems that it was designed not to crash but there was a bug).
rebasing the database would lead to the corruption of the function list.
references to stack variables at offset 0 from esp were not listed in the xrefs window.
removed minor memory leaks (occuring in some cases for IDC expressions returning a string).
renaming a variable with a dummy name to which there was a reference from a manual operand would leave the manual operand unchanged.
some key combination in the text version were not available.
some object files from libraries could not be loaded.
structure definitions were not padded correctly at the end.
structure pathes were one byte too long in the case of normal members (not really important); added a comment about structure pathes in nalt.hpp.
structure sizes were not properly padded.
temporary input file from an archive was not deleted at the end.
text mode debugger would have a garbage character in the line prefixes of continuation lines.
text version was not handling properly database rebasings.
text version: displaying a wait box does not change the cursor position in the input line.
the 'Flow chart' command was broken for a selected code area.
the 'IDC scripts' toolbar was disappearing when loading scripts and was not restored properly.
the 'Lock highlight' button was not properly refreshed.
the first operand of the 68K moveq instruction should be signed extended to 32-bit.
the strings window was empty at the file loading time if a hex view was open.
tv (text version): it was not possible to use the clipboard in the notepad.
wide byte data array might be displayed incorrectly.
windows gcc library was wrong in the sdk.
wrong "variable %s not found" message could appear after running an idc script.
wrong ARM-THUMB switching after some BX instructions.
z180 configuration file had wrong definitions.
"reset hidden messages" was not resetting the hidden welcome box.
ARM could make the T register value 2 or even 3
H8/500 rtd instruction was disassembled incorrectly.
a memory leak in the lexical analyzer is fixed.
if the user zooms in on the navigation band and clicks on the left arrow and holds the left mouse button to scroll, and moves the mouse cursor to the left outside of the navigation band window (while holding the button), the band starts scrolling to the right instead of to the left.
in some cases IDA would not undecorate the function name for the 'set type' command.
trying to disassemble a file in the root directory undef linux would crash IDA.
when loading .h files IDA was not decorating the function names.
'Clear trace' and breakpoints menu items in popup menus of the Trace, Entry points, Functions & Names windows could be duplicated.
IDA could crash if a stack view was open, then the corresponding function was deleted and the user tried to create a new stack varaible for the dead function.
IDA could hang trying to guess function types for HPPA.
IDA could undefine items in the imports segment trying to apply type information; now items in the imports segment are not undefined.
Jump commands were not available in popup menu for operands pointing to an undefined value.
M32R displacement operands were truncated during display; addi and other instruction operands are signed by default.
SDK: debugger: calling run_requests() from a debug event handler was processing waiting step requests too slowly (in fact during idle time).
adding/deleting tils always refreshs the disassembly view.
fixed a memory leak in the name handling.
fixed a memory leak with til files.
h8/500: clr.w @-sp was not modifying the stack pointer; slightly changed the output of fucntion headers (always output far/near keyword).
hint for the "create flat group" checkbox of the 'load file' dialog box was incorrect in the gui version.
it was not possible to jump to a location if the cursor was just behind the end of the line on the screen.
the xrefs list would not be immediately refreshed after changing the xref parameters using the Options menu.
there was a GDI resource leak in the colors dialog box.
txt: open the strings window without closing it would make it empty.
while deleting debugger segments, IDA could delete the first non-zero flag of the next segment.
New Features in the IDA Pro v4.7 (8/30/04)
MAJOR FEATURES
Support for non contiguous, fragmented, multiple chunks functions has been added. The analysis of theses functions has been greatly improved.
a LINUX console version of IDA Pro is now available. The source code of the TVision library used for the interface will be freely downloadable.
REMOTE DEBUGGING between Linux and Windows systems. (only singlethreaded linux applications are supported by the debugger). Source code will also be available.
NEW PROCESSOR MODULES
DSP561XX: new processor (in the advanced version)
TMS320C3: new processor (in the advanced version)
Angstrem KR1878: new processor
Motorola HCS12: new processor
KERNEL IMPROVEMENTS
+ Mulitple chunk functions are supported. IDA will automatically create function tails if this option is turned on. The option is turned on by default for the new databases, for the old database, it is turned off.
+ the idc engine does not use disk files anymore and is now faster.
+ created subdirectories for input file loaders, processor modules, configuration files.
+ Added an option to allow the recognition several copies of the same function
+ Added an option to comment anonymous library functions with the description of the FLIRT signature
+ Argument type information is propagated more actively
+ flair application collisions are marked with comments
+ improved handling of spoiled structure and function frame definitions
+ renaming a function as "exit" stops the execution flow
+ type information is saved for the structure members coming from the type libraries
+ better handling of trivial jump functions
+ slight improvement of jump table handling: .got entries are never considered to be big jump tables
+ the function boundary determination algorithm has been improved
PROCESSOR MODULES ENHANCEMENTS
+ 6502: immediate instruction operands are unsigned by default (were signed)
+ 6812 debugger: beta test version is ready and included in the distribution
+ 6812: better configuration file; CASM assembler is added
+ 6812: pc relative references are resolved and displayed as comments; cross references for them are created
+ ARM: ADD PC, ... stops execution flow
+ ARM: ADD Rn, SP, #offset is automatically converted to a stack variable
+ ARM: ARM processor module has been improved in many aspects thanks to Willem Hengeveld <itsme@xs4all.nl>
+ ARM: IDA knows that LDM Rx, {reg} spoils the register
+ ARM: IDA knows that some BL instructions should be treated as B instructions
+ ARM: MOV PC,... and LDR PC,... instructions are handled better
+ ARM: RVA32 relocation type is supported
+ ARM: arm <-> thumb thunks are recognized
+ ARM: better reaction to the execution flow going to an unexisting address: before there was an error message that it is impossible to assign the segment register T, now the offending address is stored in the problem list.
+ ARM: better register tracing to detect the target of the BX instructions
+ ARM: better support for the thumb mode relocations
+ ARM: glue code is recognized as a jump function
+ ARM: improved the analysis of the jump tables and the glue code
+ ARM: modifying the T register reanalyzes the current instruction
+ ARM: the following sequence does not stop execution: MOV LR, PC; MOV PC, ... or BX Rx
+ ARM: thumb instruction can be converted to macros too
+ HPPA: basic blocks are detected properly; added type system; better analysis in general
+ HPPA: option to use mnemonic register names is added. off by default.
+ HPPA: stw/ldw instructions have ",ma/b" completers; unused %sr0 registers are not displayed
+ IA64: better detection of operand sizes
+ IA64: multibyte character constants are allowed for GNU as (desipte the fact that it does not support them)
+ IBM PC: type information for functions called indirectly with complex offset expressions is propagated properly
+ IBM PC: push ##/pop eax is recognized as a sequence equal to "mov eax, ##"
+ PPC: addi instruction is taken into account when tracing the stack pointer
+ PPC: operands are converted to offsets only if the target is present in the program
+ PPC: support for GNU assembler is added
+ PPC: support for R_PPC_ADDR16_HI relocation type is added
+ PPC: type system support is added
FILE FORMATS
+ ELF: added an option to force PHT instead of SHT (useful for viruses and malicious programs)
+ ELF: ARM relocations are supported properly
+ ELF: HPPA relocation information is processed. Since there is enormous number of relocation records, we process only a limited number of them
+ ELF: IDA knows about some internal symbols generated by the ARM compiler
+ ELF: a bad section declaration is not considered as a fatal error during loading; PHT manual load is supported
+ ELF: pressing cancel in the manual mode aborts the whole loading process
+ ELF: introduced environment variable IDA_ELF_PATCH_MODE which can be used to override the patching made by IDA to the database when a new elf file is loaded
+ EPOC: condition and option lines in SIS files are properly recognized and skipped
+ HPSOM: $DLT$ entries are ignored during loading imports
+ AR libraries with '\n' embedded in the file names are processed correctly
+ MS DOS COM files use the metapc processor by default
+ MACH-O: MAC OSX support for the type system is added
USER INTERFACE
+ support for multiple selections in various lists has been added
+ debugger: '0', '+' and '-' keys can now be used to quickly zero, increment or decrement register values
+ debugger: 'Toggle value' command added to registers window (useful to quickly toggle flags)
+ debugger: added 'Add breakpoints', 'Enable breakpoints', 'Disable breakpoints' and 'Delete breakpoints' commands in popup menu of various lists (functions, names, ...) - these commands also accept multiple selection
+ debugger: during debugging, addresses in import section are now displayed as data: allows to easily view and jump to the target
+ debugger: Cancel is now the default button in the debugger warning message (appearing the first time the debugger is started)
+ tracing: added an option in the 'Tracing options' window to suspend tracing over library functions (enabled by default)
+ tracing: can now browse in Trace window even if process is not suspended
+ tracing: green arrow (target arrow) is refreshed during backtracing
+ tracing: in the trace window, a trace event selection is conserved (while it is in the trace buffer) - if the last trace event is selected, the selection will continuously remain on the last inserted trace event
+ added option to turn off the autoappend feature
+ can open more than one hex view - these hex views aren't anymore synchronized with IDA Views by default (to synchronize a hex view with an existing IDA View, use the 'Synchronize with' command in the hex view's popup menu)
+ command line status is now saved in the desktops
+ improved the 'offsets en masse' command: now ida verifies if the offset can be applied
+ it is possible to hide the question about a debug file from MSDN
+ most Jump and Search commands now work in hex views
+ positions of dialog boxes related to database are now saved to desktops
+ jumping to a problem does not delete the problem from the list anymore
+ it was not possible to choose an xref to a structure, so this command has been disabled
+ wrong values for the -z switch are catched and reported properly
+ 'dump to idc' can dump a selected part of the database
+ the offset in the 'Structure offsets' dialog box can be specified as a decimal or hexadecimal value
SDK & IDC (please look at the history file in the SDK for the details)
+ IDC: loadsym.idc is improved to support VisualAge (thanks to Dietrich Teickner)
+ IDC: #import directive can be used instead of #include
+ IDC: SegByName() returns the segment selector instead of its base address. The base address can be calculated from the selector by using the AskSelector(x)<<4 expression.
+ IDC: Set/GetFunctionAttr(), SetSegmentAttr() functions are added; existing functions are converted to macros using these new functions
+ IDC: added a comment about the color coding
+ IDC: added a flag to generate HTML files for GenerateFile()
+ IDC: loaddef.idc is donated by Dietrich Teickner; loadsym.idc has also been improved.
+ IDC: long running IDC scripts can be cancelled
+ IDC: optimization: idc.idc is parsed only once at the database loading time (used for inline expressions and the calculator; idc scripts including idc.idc will parse it at each compilation)
+ IDC: ord() function to get code of a character is added
+ IDC: removed the 64K limit for the compiled function length
+ IDC: rotate_left() function to rotate bit field is added
+ IDC: the built-in parser looks for the include files in the directory of the current file as well as in the directory of the main input file for '"' includes
+ IDC: SegAlign() and SegComb() functions are converted to macros; fixed a bug with SEGATTR_DEF_.. constants
+ SDK: HIGH22 and LOW10 offset types are generalised to be VHIGH and VLOW. The processor module can specify the widths of these fixups in the ph.high_fixup_bits field. Currently they are used in the SPARC and HPPA processors.
+ SDK: NULL value may be passed as the tester function to the nexthat, prevthat functions. It means that any address satisfies the criterium.
+ SDK: PR_FULL_HIFXP is introduced. It means: VHIGH fixup type expects the operand value to be equal to the full address of the target, not only the high bits. Used for HPPA HIGH21 fixup types.
+ SDK: UI list functions (choose(), choose2(), ...) now support multiple selection => the delete callback prototype was changed accordingly (older plugins can simply return 'true' to remain compatible)
+ SDK: added possibility to pass command line options to plugins (get_plugin_options)
+ SDK: added set/get_idc_func_body() to avoid frequent recompilation of IDC functions
+ SDK: debugger: enable_XXX_trace() functions can now disable tracing but conserve trace-over breakpoints
+ SDK: gen_use_arg_types() is added
+ SDK: lread() function is added; this function should be used in the loaders instead of eread(). The lread() function verifies if the read is ok, if not, it informs the user about it and asks if he wants to continue. If the user does not want to continue, the loader_failure() function is called
+ SDK: regex_match() to match regular expressions is added
+ SDK: removed support for the watcom compiler
+ SDK: set_idc_func() to add/remove IDC functions written in C++
+ SDK: the kernel knows about macroinstructions (cmd.flags |= INSN_MACRO); fixup information for macroinstructions is handled in a special way: partial fixups are combined into one full fixup
+ SDK: AS2_BYTE1CHAR is added: for wide byte processors, one character per byte
+ SDK: added the FILE option to the AUTOHIDE keyword for message boxes, to save hidden message box results to IDAMSG.CFG
+ SDK: get_next/prev_member_idx() functions are added; guess_func_type() understands stacks growing up (not tested yet)
BUGFIXES
BUGFIX: 'Attach to process...' and 'Detach from process' commands were sometimes not visible
BUGFIX: 'Change stack pointer...' command in context menu was sometimes displayed 2 times + we now always display it if Stack pointer is visible
BUGFIX: 'Reset desktop' command was not resetting settings from default hidden windows
BUGFIX: -b command line switch was broken
BUGFIX: AMD64 RIP addressing was decoded incorrectly if the second operand of the instruction was an immediate value
BUGFIX: ARM thumb BLX direct-addr could not be disassembled
BUGFIX: AS_STRINV flag could revert the value of 'inf.wide_high_byte_first' if the input string for the get_ascii_contents() function was too long to be stored in the buffer.
BUGFIX: C166 exts instruction was not emulated properly
BUGFIX: EIP was sometimes not properly invalidated on the screen when the debugger was running
BUGFIX: HPPA stack frame is created correctly
BUGFIX: IDA could enter an endless loop if a data item with an offset was visible on the screen along this the referenced instruction which was leading to the reanalysis of the data item (in other words, the data item causes the reanalysis of the instruction; the instruction leads to the reanalysis of the data). Scrolling aways from such a place would break the loop.
BUGFIX: IDA was loading some elf sections even if the user asked not to load them in the manual mode
BUGFIX: IDA would report not enough disk space on Windows98 if started in a directory with a double extension (like c:\dir\4.3.2\)
BUGFIX: IDC conditions (for breakpoints and tracing) referencing memory bytes were sometimes not properly evaluated
BUGFIX: IDC: ltoa() function was broken
BUGFIX: IP view was not properly refreshed if IP was not visible and the user switched between threads with same IP (for example 2 sleeping threads)
BUGFIX: Intel 8051: IDA crashes if at the loading time the user clears the "create segments" checkbox.
BUGFIX: MC6816 module: offset xrefs were not properly created for some operands
BUGFIX: PE loader would crash if only the PE header was loaded into the database and all other segments were skipped; made many PE loader messages hideable
BUGFIX: PrevHead() IDC function was returning wrong results
BUGFIX: R_PPC_ADDR16_LO relocation type was processed incorrectly for object files
BUGFIX: TXT: a segfault could occur after closing the Structures or Enums window
BUGFIX: TXT: on Windows 9X, it was not possible to enter some characters (like the @ character by pressing AltGr+Q on a German keyboard) => define the TV_IGNORE_RIGHT_ALT_PRESSED environment variable to let IDA ignore such key combinations on Windows 9X
BUGFIX: TXT: segfault when you grab the lower right corner of the disassembly window with the mouse and drag it to the left, shrinking the window (qsnprintf() should never return -1)
BUGFIX: an xref window would become empty if a modal window with xrefs to the same ea is opened and closed
BUGFIX: better handling of thread suspends/resumes for multi-threaded debugging
BUGFIX: closing Enums window by pressing ALT-F3 was causing a segfault
BUGFIX: colors of hidden areas were restored incorrectly
BUGFIX: column widths for the function list were wrong for 64-bit version
BUGFIX: epoc: the export table was located incorrectly
BUGFIX: debugger: DLL rebasing was not working properly in some cases
BUGFIX: debugger: FPU registers were sometimes not properly printed and detected as modified
BUGFIX: debugger: IDA was displaying non-readable memory as 0xFF bytes (for example in PAGE_GUARD and PAGE_NOACCESS pages on Windows)
BUGFIX: debugger: a breakpoint at address 0 was added if pressing Enter from the Insert command in the Breakpoints window
BUGFIX: debugger: addresses in the Breakpoints list were not properly resolved because lists refresh was initialized before the process was properly suspended
BUGFIX: debugger: after a suspend, breakpoint conditions containing registers couldn't be evaluated properly
BUGFIX: debugger: breakpoints were not properly handled during library loading (if 'Stop on library load' option was enabled)
BUGFIX: debugger: database desktop was sometimes overwritten by debugger desktop when process was not properly stopped
BUGFIX: debugger: debugger status in the main window titlebar was sometimes not accurate
BUGFIX: debugger: exported names (from loaded DLLs) were sometimes not properly displayed during debugging
BUGFIX: debugger: fixed minor disassembly view refresh issues when adding or editing breakpoints
BUGFIX: debugger: if a user forced a process termination and a pause request was already pending, the 'Pause process' command wasn't working anymore in new debugger sessions
BUGFIX: debugger: in some particular cases, segment reorganisation was not working properly after a debugger event
BUGFIX: debugger: it was not possible to add a hardware breakpoint at once from the breakpoints window
BUGFIX: debugger: it was sometimes impossible to disable hardware breakpoints at runtime
BUGFIX: debugger: the 'Clear trace' command was not properly refreshing some information like register views, arrows, ...
BUGFIX: debugger: the 'Detach from process' command was sometimes not properly resuming threads
BUGFIX: debugger: thread related segments (stack & PAGE_GUARD) were sometimes not properly named - Segments view was not properly updated in some cases
BUGFIX: deleting a record from a non-leave leads to a move of another record from a leave page to the freed place, an underflow occurs in the leave page, some records from the sibling of the underflowed page are moved to it, doing so leads to the modification of another record in the parent page, which leads to the overflow of the parent and the parent gets split. At this moment because of the bug we work with a freed page and the database gets corrupted. A bug with a similar situation had been corrected ten years ago.
BUGFIX: disassembly paint function was leaking GDI resources
BUGFIX: dsp56k ports are attached to the X space, not P space. dsp561xx: better version
BUGFIX: entering a long comment with tabulations could crash ida
BUGFIX: fixed a typo in sparc autocomments
BUGFIX: get_original_long() was wrong
BUGFIX: hardware breakpoint (with a size bigger than 1) background color was not red for additionnal lines (like a multi-line comment)
BUGFIX: in navigation bar, it was impossible to 'Zoom in' if 'Zoom out' was disabled (because maximum range was reached)
BUGFIX: in some really rare cases get_next_fcref() could never return BADADDR
BUGFIX: increased the width of the segment register window columns to fit narrow register values
BUGFIX: it was impossible to rename or double-click on a structure stack variable
BUGFIX: it was impossible to use function local vars/args in breakpoint conditions
BUGFIX: it was not possible to rename bitfield members from the interface
BUGFIX: jump tables were not analyzed correctly after Changelist 979
BUGFIX: jump to near addresses (which were not visible on the screen but already cached) was not working anymore, probably since Changelist 2655
BUGFIX: maximized windows in a saved desktop were sometimes restored as non-maximized
BUGFIX: mc6812 module did not know about the "wavr" pseudo-instruction
BUGFIX: mc6812 module was not disassembling "etbl", "tbl" instructions
BUGFIX: multiline instructions were not displayed correctly in the graphs
BUGFIX: nextaddr(BADADDR) was returning the first address of the program
BUGFIX: number of applied functions of a flirt signature takes into account all functions (before some function types were ignored)
BUGFIX: patching bytes during debugging would make IDA memorizes the database was patched
BUGFIX: register views creation was sometimes leaking GDI resources
BUGFIX: repetitive rebasing of the database might lead to a crash
BUGFIX: scroll buttons in IDA view scrollbars were not working properly
BUGFIX: scrolling the disassembly view using the mouse whlle with the hex view open could lead to an access violation at the beginning and end of the file
BUGFIX: segfault when typing an address into the search toolbar if no disassembly view was open
BUGFIX: set_debug_name() might cause an access violation
BUGFIX: some PE files with bad relocation table could not be loaded
BUGFIX: some Visual Age and GNU C++ names were not demangled correctly
BUGFIX: some strings couldn't be typed in the search toolbar due to auto-completion
BUGFIX: text version was not displaying error messages about the configuration file
BUGFIX: text version: the disassembly window was not refreshed immediately after renaming a stack variable and similar
BUGFIX: the Batch() IDC function does not disable the auto-analysis in TXT version anymore
BUGFIX: the elf loader was complaining about unusual usage of relocations for some incorrectly stripped executables
BUGFIX: the kernel was not saving the current instruction data before calling ph.create_func_frame(); this might lead to worse analysis (mostly for the arm processor)
BUGFIX: tracing: addresses not available in database were not displayed during backtracing
BUGFIX: tracing: if 'Trace over debugger segments' was enabled, tracing in KiUserCallbackDispatcher() function (used for kernel -> userland callbacks) was sometimes stopping with a "Breakpoint instruction reached (not inserted by the debugger)" message
BUGFIX: tracing: if the process is running, tracing is started while EIP is in a debugger segment, and 'Trace over debug segment' option is enabled, IDA will not add anymore trace events for these debugger segment instructions
BUGFIX: tracing: properly log modified register values over debug segments (when 'Trace over' option is active)
BUGFIX: unloading some corrupted databases to idc would lead to a crash, now ida should complain and continue
BUGFIX: unwanted hint of the address zero was displayed in the stack variables window for the processors with ':' after the data labels
BUGFIX: when closing a database, last address in IDA view was sometimes continuously saved on the previous addresses stack
BUGFIX: Z80 was not allowing to modify the out, in, and similar instruction operands
BUGFIX: creating an item crossing a hidden area boundaries would pose display problems in the future
BUGFIX: deleting a structure element at the end of the structure might lead to a wrong display (one superfluous data definition line beyond the end of the structure)
BUGFIX: if the 'Print flow chart labels' option was enabled, labels without valid names were preceded by a '7' character + IDA now uses the prefix line color for these labels
BUGFIX: sometimes the application title was not reflecting the database name correctly
BUGFIX: using the navigation band with all IDAViews closed could lead to crashes
BUGFIX: when creating a flow graph, local labels were redefined as globals
BUGFIX: H8: the '@' character was erroneously highlighted as a valid identifier character
BUGFIX: debugger: the destination arrow (green arrow) was not properly updated for JLE/JNG instructions
BUGFIX: if the database was created in the directory other than the input file directory, the input file name would be replaced by the database name
BUGFIX: it was not possible to search with Ctrl-T after pressing Esc in the Alt-T dialog even if the old search string was existing
BUGFIX: the stack tracing could be spoiled if the function end was moved back and forth
BUGFIX: when creating a new structure, the proposed structure name was incremented if the Cancel button was pressed
BUGFIX: when opcode bytes were displayed with a '+', IDA was not extracting the following name properly (if any) => it was then impossible to change this name
Discontinued
OS/2 and DOS4GW versions are discontinued. Please make a backup copy if you plan to use them in the future.
New Features in the IDA Pro v4.6 SP1 (3/15/04)
Main Improvements
Processor Modules
User Interface
Kernel Improvements
Debugger
IDC & SDK
New Features in the IDA Pro v4.6 (10/27/03)
Major Features
Processor Modules
File Formats
Kernel
SDK & IDC (please look at the history file in the SDK for the details)
User Interface
Bugfixes
BUGFIX: "load
ids" command might add comments instead of renaming imported functions if the
database was closed and opened at least once
BUGFIX: "make alignment" command
would fail for some addresses
BUGFIX: ELF: dynamic relocations to the whole
program were not applied
BUGFIX: ESP register view arrows panel width wasn't
saved properly in desktops
BUGFIX: FR module incorrectly disassembled some
instructions
BUGFIX: IA64: the opcode bytes were not displayed for predicated
instructions
BUGFIX: IBM PC: movq instruction was disassembled incorrectly
(F3 0F 7E); some data types for SSE2 instructions were wrong
BUGFIX: IDA
could crash if a list with a reverse sorting on a column was
refreshed
BUGFIX: IDA could crash if trying to debug a program spawning
subprocesses
BUGFIX: IDA could crash on corrupted databases with the hidden
area descriptions missing
BUGFIX: IDA could crash when loading a desktop with
open disassembly views
BUGFIX: IDA could die with some national keyboard
layouts
BUGFIX: IDA does not destroy code even if there is a data reference
to it from the type system
BUGFIX: IDA doesn't freeze anymore when drawing
the hint for stack variables in huge stack frames
BUGFIX: IDA was erroneously
reporting 'the input file has been changed' after the reloading of a new input
file into the database
BUGFIX: IDA would abort trying to execute some buggy
idc scripts
BUGFIX: IDA would complain about bad TMS id for some PE files
which look like COFF files
BUGFIX: MIPS module was using 32-bit definition of
the "move" instruction for all processors
BUGFIX: PC: 4k segment alignment
should be represented as "mempage"
BUGFIX: PowerPC function flow charts are
displayed correctly
BUGFIX: TMS320C54 module properly handles absolute
addressing and doesn't use anymore I/O definitions for immediates
BUGFIX:
TMS320C54 module properly prints variable names and creates xrefs for absolute
"indirect" adressing
BUGFIX: calling qexit() from a plugin was not
terminating plugins, closing windows, etc in the gui version
BUGFIX:
disassembly views weren't properly refreshed when creating a string
BUGFIX:
dr_I was not defined in idc.idc
BUGFIX: dumping a database with references to
unexisting structures or enums could crash IDA
BUGFIX: ida could add numerous
type comments on the register arguments
BUGFIX: ida could leave some imported
functions without types at the loading time
BUGFIX: ida would complain about
incorrect numbers in the "rom size" dialog box during editing them
BUGFIX:
idag in the batch mode quits if there were errors in the command line. before it
was silently hanging.
BUGFIX: if the number of the functions was greater than
65535, then some commands would fail (like "find next byte not belonging to a
function")
BUGFIX: it was impossible to jump to a name with colons (:) using
Ctrl-G
BUGFIX: it was not possible to select the little endian MIPS & RSP
processor from the initial dialog box
BUGFIX: manually suspending a
multithreaded process and steping over function calls could lead to erroneously
suspend some threads
BUGFIX: mc6808 module could not disassemble inc oprx8,
sp
BUGFIX: opening a modal window during debugging then stopping the debugged
application could freeze IDA
BUGFIX: operator new would be demangled
incorrectly (truncated as "operator ne")
BUGFIX: register views weren't
properly refreshed at the start of the debugging
BUGFIX: resetting the
debugger desktop wouldn't properly reset the height of the main window in some
particular cases
BUGFIX: some mach-o files could not be loaded
BUGFIX: the
analysis could loop endlessly in some functions due to the stack pointer
tracing
BUGFIX: the description of Word(), Dword() IDC functions is
corrected
BUGFIX: the first imported function would not have a type if it
were at the beginning of the program
BUGFIX: trying to pause an application
with many sleeping threads could lead to subsequent application crash when the
sleeping threads wake up
BUGFIX: vc6rtf.sig: strcpy/strcat functions were not
recognized
New Features is the IDA Pro v4.51 Disassembler (6/8/2003)
PROCESSOR MODULES
FILE FORMATS
USER INTERFACE
KERNEL IMPROVEMENTS
BUGFIXES
BUGFIX: "Rebase program" command was not correcting the image base correctly
BUGFIX: 'F' key was not working in the name, function, etc non-modal windows
BUGFIX: AIX COFF executables with the stripped symbol table were not loaded properly
BUGFIX: C166: bfldl instruction had 2 last operands swapped
BUGFIX: C166: rets instruction would have loc_xxx label instead of locret_xxx
BUGFIX: EPOC: ROM images were loaded incorrectly
BUGFIX: EPOC: some SIS files were not recognized
BUGFIX: Esc key closes the enumerations and structures windows even if they are on the desktop
BUGFIX: FR module had several disassembly problems (byte order, ascii string display, special register handling, indirect calls)
BUGFIX: FR: delayed instructions were not taken into account when following the execution flow
BUGFIX: HEX loader creates the correct segments even if the input file contains the data records in the wrong order
BUGFIX: IBM PC: all o_phrase operands were marked as having an immediate number
BUGFIX: IBM PC: the size of the second operand of "lea" instruction was always dt_byte
BUGFIX: IDA could crash if the user double clicked in the messages window and no database was open
BUGFIX: IDA could crash trying to close some windows
BUGFIX: IDA could crash trying to move a function in a corrupted database
BUGFIX: IDA could hang trying to delete a function from a corrupted database
BUGFIX: IDA could not open an old database after opening a new file from a ZIP or any other container file
BUGFIX: IDA would crash if a processor with word grouping of the instruction opcodes was used and the display of the instruction opcodes was turned on
BUGFIX: If Shift,Ctrl, or Alt keys are down, don't display help for F1
BUGFIX: If ida.cfg was missing, IDA would complain about IDC errors
BUGFIX: JAVA: fixed an access violation in the gui version of ida if the hints were turned on and the cursor was at the beginning of a line starting with a dot.
BUGFIX: M740 #imm values were represented as "port_name" without the '#' is am i/o port was corresponding to the immediate value. improved handling of the configuration file.
BUGFIX: MSDOS: some external pascal overlays were not detected and not loaded
BUGFIX: PIC: IDA was using only 1 bit of the STATUS register to calculate the target addresses (page addressing)
BUGFIX: PPC dcr field was decoded incorrectly
BUGFIX: TXT: if ida had been launched with "idaw not-existing-file", then switching to the silent mode immediately after the error message would crash ida
BUGFIX: VC mangled names like ?GetRowInfo@ui_textmatrix@@QAEXHPAH0@Z were demangled incorrectly
BUGFIX: XlatAsciiOutput for IBM PC was not working for the new bases and required the reloading an existing database
BUGFIX: XlatAsciiOutput was ignored in the strings window
BUGFIX: a memory leak is fixed. If a list is sorted by a column, stable_sort() would leak memory. Now we use sort() instead of stable_sort().
BUGFIX: access violation if a corrupted database had a bad function without a name
BUGFIX: annoying access violation in the gui when the user tries to rename a stack variable. the access violation would not hinder the normal execution.
BUGFIX: bin_search() could endlessly loop
BUGFIX: breakpoints window state is now saved
BUGFIX: changing the alignment type in an alignment directive could undefine everything in the database
BUGFIX: creating a user-defined offset for an indirect call using a vtable would consistently fail the first time
BUGFIX: debugger: 'Step over' command now works over LOOP/LOOPE/LOOPNE instructions
BUGFIX: debugger: if the path to the executable or the executable name contains spaces, everything after the first space gets split and passed as arguments to the process
BUGFIX: debugger: segments creation doesn't stop anymore if a breakpoint can't be restored.
BUGFIX: debugger: target arrow wasn't properly updated for LOOP/LOOPE/LOOPNE instructions
BUGFIX: deleting a segment could hang ida if trivial segment translations were used
BUGFIX: double clicking on IDA window system menus now properly close the window
BUGFIX: fixed the entry point problem of DJGPP COFF executables
BUGFIX: hex loader would not load the following line: S319FFC00000000000000000000000000000000000000000000027
BUGFIX: IA64 module had some disassembly problems
BUGFIX: idaw in the batch mode would loop forever trying to ask the user if a dependent dll was not found
BUGFIX: if a function stack variables window was open, IDA would crash when the function was deleted
BUGFIX: if a hidden area, function, or segment start at the same address, hidden functions would have priority over areas; the correct logic should take the longest hidden element rather than making one thing be more prioritary that another.
BUGFIX: if no selection is active, text search brings up the old search string by default
BUGFIX: in the case of a program/DLL rebase, some breakpoints were improperly restored/moved
BUGFIX: information in the debug segments could stay in the database even after the debugging session has been closed. the current fix fixes it somewhat but not completely
BUGFIX: input files from ZIP archives and other containers do not appear in the most recently used file list anymore
BUGFIX: instruction operands 4..6 were displayed in red
BUGFIX: it was not possible to declare variables of a structure type if this structure type had a union member in the past
BUGFIX: it was not possible to delete a dummy name without references in a function (normally these names doesn't appear unless the user creates them)
BUGFIX: it wasn't possible to create structure variables if an area was selected and there were defined bytes
BUGFIX: local labels and stack change point information might be lost during the program rebase
BUGFIX: long symbol names from COFF DBG information were not loaded
BUGFIX: properly refresh strings window when segments are moved
BUGFIX: properly update actions as soon as the debugged process is suspended
BUGFIX: rebase_program() would leave the xrefs unmoved if called when the debugger was active
BUGFIX: rebasing a corrupted database could lead to a crash (area_t::move)
BUGFIX: removed erroneous "rebasing program" message from the debugger
BUGFIX: removed misleading & from the Debugger menu name (Alt-D is used to setup the data types)
BUGFIX: scr2idb() would not do anything is !is_gui
BUGFIX: "search for immediate" would not find negated values
BUGFIX: the debugger would sometimes miss the dll relocations on XP (for some reason the system does not provide the dll name at the loading time)
BUGFIX: the main menu would stay in the incorrect state when switching between a desktop window and an MDI window
BUGFIX: the process parameters in the debugger could not be cleared once set
New features in version 4.50 (2/12/03)
New features in version 4.30 (8/5/2002)
New features in version 4.21 (4/19/2002)
IDA Pro PIC Limited Edition
New features in version 4.20 (12/19/2001)
New features in version 4.18 (10/19/2001)
New features in version 4.17 (6/22/2001)
New features in version 4.16 (3/22/2001)
Update to 4.15 (1/10/2001)
New features in version 4.15 (12/2/2000)
New features in version 4.14 (7/27/2000)
New features in version 4.01 (11/5/99)
(3.6) Standard Run-time Library Recognition
The following compilers are supported in this release. Support for other
compilers will be added in the future.
Turbo C v2.0
Turbo C
v2.01b
Turbo C++ v1.01
Borland C++ v3.1
Borland C++ v4.0
Borland C++
v4.5
Borland C++ v5.0
Borland C++ for OS/2 v1.5
EMX (GCC) for OS/2
v0.9b
Microsoft Quick C
Microsoft C v7.0
Microsoft Visual C++
v1.0
Microsoft Visual C++ v1.5
Microsoft Visual C++ v2.0
Microsoft
Visual C++ v4.0
Microsoft Visual C++ v4.1
Symantec C++ v6.0
Symantec
C++ v6.1
Visual Age C++ v3.0
Watcom C++ v9.5
Watcom C++
v10.0b
Zortech C v1.0
Zortech C v3.1
(3.6) 32-bit Windows native disassembly environment (console)
(3.6) Java support (and ZIP support)
(3.6) Motorola 8bit processors are now supported.
Motorola MC6800
Motorola MC6801
Motorola MC6803
Motorola
MC6805
Motorola MC6808
Motorola MC6809
Motorola MC6811
(3.6) 64MB programs can now be disassembled.
(3.6) OMF libraries are now recognized and modules can be extracted and disassembled.
(3.6) CEXTDEF records in OBJ files are now handled properly.
(3.6) improved recognition of data segment for DOS executables.
(3.6) COFF : the C_NT_WEAK storage class is now handled.
(3.6) OS/2 Merlin chained relocation records are now handled properly.
(3.6) the following sequence has changed: dd -> float -> dq -> dt
(3.6) jump tables are now analyzed faster.
(3.6) the generation of map files has been improved.
(3.6) It is now possible to define the following environment. variables.
IDASGN points to the signature directory.
IDAIDS points to the IDS files
directory.
(3.6) the environment variable IDA_PAGESIZE now defines the page size for
newly created databases. The default page size is 4096. Pagesize should be power
of 2. You may want to increase the page size if you hit limit on the number of
chunks when loading an .OBJ or NE file.
Judicious use of this variable now
allows the disassembly of files of virtually any size.
(3.6) the -b (program base address) switch now understands 32bit addresses.
(3.6) binary search is now faster.
(3.6) interface enhancements : CTRL-ENTER and BACKSAPACE allow fast lookups in the viewer. Data Items can now be defined massively. ALT-T and CTRL-T allow fast searches in the list viewers.
(3.6) dozens of minor enhancements.
(3.6) data xrefs can now be deleted manually.
(3.6) a bug with jcxz instruction in huge 32bit segments has been fixed.
(3.6) a bug has been fixed in the IDC interpreter: 16bit numbers at page boundaries would be read incorrectly.
(3.6) a laoding problem with some NE files has been corrected.
(3.6) version 3.53 would exit with a "heap corrupt" message when loading a 3.04 database.
(3.6) the loopw instruction was incorrectly disassembled in huge 32-bit segment. This has been corrected.
(3.6) The Borland v5.01 ctime() function has a bug that sometimes caused IDA to crash. This has been fixed.
(3.6) dozens of minor fixes.