\endhtmlonly \section sec_package Distribution Contents The following are part of the DynamoRIO release distribution: \if profiling PR 225255: list profile library too \endif - Four different DynamoRIO libraries: debug and release for each of 32-bit and 64-bit. The debug library enables assertion messages to more easily diagnose API usage errors. - Four different IA-32/AMD64 decoding static libraries: debug and release for each of 32-bit and 64-bit. The debug library enables assertion messages to more easily diagnose API usage errors. - A variety of DynamoRIO Extension libraries that augment the core DynamoRIO API (see \ref page_ext). - Additional Extension libraries from the Dr. Memory Framework (DRMF). If this documentation is part of a DynamoRIO public release, this link should point at the local documentation for DRMF. - The DynamoRIO configuration and execution libraries and command-line utilities \c drconfiglib.dll, \c drinjectlib.dll, \c drfrontendlib.dll, \c drconfig.exe, \c drrun.exe, and \c drinject.exe. On Linux, the tools are named \c drconfig, \c drrun, and \c drinject. - A utility \c drview.exe for viewing which processes are running under DynamoRIO control (Windows package only). - Header files for the DynamoRIO APIs. - This documentation. - \ref API_samples "Sample clients". \ifnot vmsafe - A graphical statistics viewer \c DRstats.exe that displays internal DynamoRIO statistics as well as custom statistics defined by a client (see \ref sec_drstats) (Windows package only). DynamoRIO exports a large number of statistics in its debug build, and a handful in release builds. \endif \ifnot vmsafe - A binary tracedump reader, which also functions as a sample client using DynamoRIO as a standalone library (see \ref sec_standalone). \endif - A number of end-user tools including a code coverage tool (see \ref page_drcov) and a library tracing tool (see \ref page_drltrace). If this is a DynamoRIO public release, it also includes the Dr. Memory memory debugging tool (see \ref page_drmemory), a system call tracer for Windows (see \ref page_drstrace), and a symbol querying tool (see \ref page_symquery). When unpacking the release package on Windows, be aware that the Cygwin unzip utility does not preserve executable permissions properly. After unzipping with Cygwin, add ugo+rx permissions to all of the .dll and .exe files in the resulting directory tree: \code find . -name \*.dll -exec chmod ugo+rx {} \; -o -name \*.exe -exec chmod ugo+rx {} \; \endcode \ifnot vmsafe *************************************************************************** \htmlonly
The changes between version 4.0.1 and 4.0.0 include: - Fixed a bug resulting in large 64-bit applications failing to allocate heap (Issue 1041) **************************************************
Version 3.0.0 was a development version. 3.1.0 is the first official released version of the 3.x series. The changes between version 3.0.0 and 2.2.0 include the following major features: - Added a private loader on Linux for better support for C++ clients and third-party library usage by clients - Added Linux support for \p drsyms to enable symbol processing in Linux clients - Added \p drutil Extension which provides memory address retrieval and string loop expansion (note: LGPL license) - Added a static library for decoding and encoding \b IMPORTANT: The 3.0.0 and onward client API is mostly backward compatible with releases from 1.0.0 (originally called 0.9.6: see below) onward with the exception of functions that involve dr_mcontext_t and several other source and binary compatibility changes since version 2.2.0 described below. The dr_mcontext_t struct and all structs that contain it have changed and are NOT backward compatible with releases prior to 3.0.0. A sample script for updating client sources to the 3.0.0 API's version of dr_mcontext_t and related functions is as follows: \code perl -pi -e '\ s|dr_mcontext_t (\w+);|dr_mcontext_t \1 = {sizeof(\1),DR_MC_ALL,};|;\ s|(dr_[gs]et_mcontext$$\S+,\s+\S+),\s+[^\s$$]+\)|\1)|;\ s|(dr_redirect_execution$$\S+),\s+\S+$$|\1)|;\ s|^\s+int app_errno;\s*\n||ms;\ s|raw_mcontext\.|raw_mcontext->|g;\ s|info->mcontext\.|info->mcontext->|g;\ s|excpt->mcontext\.|excpt->mcontext->|g;' *.c \endcode The script makes 3 main changes. First, any dr_mcontext_t allocated by the client must have its \p size and \p flags fields set. Second, the \p app_errno parameter was removed from several functions; it required a local variable, so any local named \p app_errno is removed. Third, the dr_mcontext_t fields in the fault, signal, and exception structs all became pointers. This script may not catch all cases. Use your version control system to look at the diff after applying it to ensure it did not change anything it shouldn't have. Run with debug build to catch other instances where dr_mcontext_t.size is not set. Also note that using the dr_mcontext_t initialization syntax in the script will end up calling memset; for performance-critical situations, instead initialize only the size and flags fields separately. Also note that if the xmm or ymm registers are not needed, asking for DR_MC_CONTROL and/or DR_MC_INTEGER is more performant than DR_MC_ALL. \b IMPORTANT: Further changes between version 3.0.0 and 2.2.0 include the following that affect source and/or binary compatibilty: - Changed the #dr_mcontext_t structure field layout. This is a binary compatibility change with respect to versions prior to 3.0.0. - Added a dr_mcontext_t.size field which must be set by the client prior to calling dr_get_mcontext(), dr_set_mcontext(), or dr_redirect_execution. This is a source compatibility change with respect to versions prior to 3.0.0. - Added a dr_mcontext_t.flags field which must be set by the client prior to calling dr_get_mcontext(), dr_set_mcontext(), or dr_redirect_execution. This is a source compatibility change with respect to versions prior to 3.0.0. - Removed the app_errno parameter from dr_get_mcontext(), dr_set_mcontext(), and dr_redirect_execution(). This is a source compatibility change with respect to versions prior to 3.0.0. - Changed all dr_mcontext_t fields in the dr_restore_state_info_t, dr_exception_t, and dr_siginfo_t structs to be pointers. This is a source compatibility change with respect to versions prior to 3.0.0. - Changed the bool typedef from int to char for C++ compatibility. This is a binary compatibility change with respect to versions prior to 3.0.0. - Changed the signature of drwrap_unwrap(), in order to allow one of the pre or post hooks to be optional (Issue 562). This is a source compatibility change with respect to versions prior to 3.0.0. - Moved console printing support from the drsyms Extension to core DR. The drsym_write_to_console() and drsym_using_console() are no longer supported. Instead, call dr_enable_console_printing() in dr_init(), which then enables dr_printf() and dr_fprintf() to print to the console (with some limitations: see dr_enable_console_printing() documentation). This is a source compatibility change with respect to versions prior to 3.0.0. - Added a \p flags argument to most of the routines in the \p drsyms extension to control demangling, and added drsym_demangle_symbol(). This is a source compatibility change with respect to versions prior to 3.0.0. - Added drsym_get_module_debug_kind() and a \p debug_kind field to the \p drsym_info_t struct written by drsym_lookup_address(). These additions allow drsyms users to determine what kind of debug info is available for a module. The \p debug_kind field creates a binary compatibility change for users of \p drsym_info_t with respect to versions prior to 3.0.0. Additional changes between version 3.0.0 and 2.2.0 include the following: - Added \p drvector to drcontainers Extension: simple resizable vector - Added a windbg script for auto-locating libraries for easier debugging - Added dr_mutex_self_owns() and recursive lock support (dr_recurlock_*) (Issue 219) - Added dr_map_file(), dr_unmap_file(), and dr_file_size() (Issue 542) - Added dr_rename_file() and dr_delete_file(). - Added routines to disassemble to a buffer rather than a file (Issue 524) - Added support for the AVX and FMA ISA extensions - Added dr_insert_get_seg_base() - Added return value to dr_redirect_execution() and dr_set_mcontext() - Increased maximum option string from 512 to 2048 (Issue 363) - Increased default stack size from 20KB to 56KB to make it easier to use C++ and external libraries with larger stack usage - Added dr_get_os_version() (Issue 304) - Deprecated the "meta-instruction that can fault" property and instr_is_meta_may_fault(), instr_set_meta_may_fault(), instrlist_meta_fault_preinsert(), instrlist_meta_fault_postinsert(), and instrlist_meta_fault_append(). - Added dr_using_app_state() - Added instr_encode_to_copy() and instrlist_encode_to_copy() - Added disassemble_set_syntax() for -syntax_intel control without runtime options and proc_set_vendor() to control vendor-specific ISA details when decoding or encoding - Added instrlist_set_fall_through_target() and instrlist_set_return_target() - Added hashtable_clear() to the drcontainers Extension - Several bug fixes **************************************************
The changes between version 2.2.0 and 2.1.0 are: - Added \p drwrap Extension which provides function wrapping and replacing (note: LGPL license) - Added \p drmgr Extension: the DynamoRIO Multi-Instrumentation Manager Extension, a mediator for combining and coordinating multiple instrumentation passes - Added read-write locks (Issue 406) - Added isolation of client-opened files from the application (Issue 357) - Added dr_mcontext_t.xip for syscall events (Issue 442) - Several bug fixes **************************************************