-
Notifications
You must be signed in to change notification settings - Fork 571
/
Copy pathrelease.dox
1694 lines (1571 loc) · 85.2 KB
/
release.dox
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
/* ******************************************************************************
* Copyright (c) 2010-2018 Google, Inc. All rights reserved.
* Copyright (c) 2011 Massachusetts Institute of Technology All rights reserved.
* Copyright (c) 2008-2010 VMware, Inc. All rights reserved.
* ******************************************************************************/
/*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the name of VMware, Inc. nor the names of its contributors may be
* used to endorse or promote products derived from this software without
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL VMWARE, INC. OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
* DAMAGE.
*/
/**
***************************************************************************
***************************************************************************
***************************************************************************
\page release_notes Release Notes for Version \DR_VERSION
This section is divided into the following subsections:
- \ref sec_package
\ifnot vmsafe
- \ref sec_changes
\endif
- \ref sec_limits
\ifnot vmsafe
- \ref sec_future
\endif
***************************************************************************
\htmlonly
<table width=100% bgcolor="#000000" cellspacing=0 cellpadding=2 border=0>
<tr><td><table width=100% bgcolor="#0000C0" cellspacing=0 cellpadding=1 border=0>
<tr><td><table width=100% bgcolor="#0000C0" cellspacing=0 cellpadding=1 border=0>
<tr><td></td></tr></table></td></tr></table></td></tr></table>
\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 (for ARM or AArch64 builds, only a single bitwidth
matching the ISA is provided).
The debug library enables assertion messages to more easily diagnose
API usage errors.
- Four different IA-32/AMD64/ARM/AArch64 decoding static libraries: debug and release
for each of 32-bit and 64-bit (only 32-bit for ARM and 64-bit for AArch64).
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, <a
href="../../drmemory/drmemory/docs/html/page_drmf.html">this link</a> 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.lib,
\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), a multi-process cache simulator (see \ref page_drcachesim),
a last-level cache miss analyzer (see \ref page_drcachesim),
and a legacy CPU testing tool (see \ref page_drcpusim).
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), a library tracing tool (see
\ref page_drltrace), 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
<table width=100% bgcolor="#000000" cellspacing=0 cellpadding=2 border=0>
<tr><td><table width=100% bgcolor="#0000C0" cellspacing=0 cellpadding=1 border=0>
<tr><td><table width=100% bgcolor="#0000C0" cellspacing=0 cellpadding=1 border=0>
<tr><td></td></tr></table></td></tr></table></td></tr></table>
\endhtmlonly
\section sec_changes Changes Since Prior Releases
The current version is \DR_VERSION. It includes Dr. Memory and the
Dr. Memory Framework (DRMF) in the same package as DynamoRIO. DRMF
provides the umbra, drsyscall, and drsymcache Extensions for use by
clients.
The changes between version \DR_VERSION and 7.0.0 include the following minor
compatibility changes:
- The drltrace tool has been moved to the Dr.Memory Framework.
- Removed DRMGR_PRIORITY_INSERT_CLS_ENTRY, DRMGR_PRIORITY_INSERT_CLS_EXIT,
DRMGR_PRIORITY_NAME_CLS_ENTRY, and DRMGR_PRIORITY_NAME_CLS_EXIT, as
the new kernel xfer event (drmgr_register_kernel_xfer_event()) removes the
need for them.
- Renamed the LOG_ macros (#LOG_NONE, #LOG_ALL, etc.) to have a DR_ prefix
to avoid name conflicts. Clients should set(DynamoRIO_LOG_COMPATIBILITY ON)
prior to configure_DynamoRIO_client() to use the old constants and avoid
any source changes; this will happen automatically if the client
targets version 7.0.0 or earlier. Binary compatibility is unaffected.
- Added a parameter to cmake functions DynamoRIO_get_target_path_for_execution and
DynamoRIO_copy_target_to_device. External projects outside of DynamoRIO need
to pass _DR_location_suffix.
- The drcachesim tool's offline traces are now stored in separate files per traced
application thread, rather than a single interleaved file. Reading and analyzing
a legacy interleaved file is still supported, but all new generated traces are
split. Splitting enables parallelized post-processing and trace analysis.
- In standalone mode, there are no 32-bit-displacement reachability guarantees
regarding DynamoRIO's heap.
Further non-compatibility-affecting changes include:
- Added drx_buf_insert_buf_memcpy().
- Added XINST_CREATE_add_sll(), XINST_CREATE_jump_cond(), and XINST_CREATE_slr_s().
- Added thread synchronization events via dr_event_create(), dr_event_destroy(),
dr_event_wait(), dr_event_signal(), and dr_event_reset().
- Added drmodtrack customization via drmodtrack_add_custom_data() and
post-processing support via drmodtrack_offline_write().
- Added drcachesim customization via drmemtrace_replace_file_ops(),
drmemtrace_custom_module_data(), drmemtrace_get_output_path(),
drmemtrace_get_modlist_path(), and a separate rawtrace library for
post-processing customization with raw2trace_t::handle_custom_data(),
raw2trace_t::do_module_parsing(), raw2trace_t::do_conversion(), and
raw2trace_directory_t. The raw2trace library also includes an interface
for obtaining further instruction information than is stored in the
trace via raw2trace_t::do_module_parsing_and_mapping() and
raw2trace_t::find_mapped_trace_address().
A corresponding CMake function for finding the
tracer customization header is use_DynamoRIO_drmemtrace_tracer().
- Added drreg_restore_app_aflags().
- Added a set_value() function to the \ref page_droption.
- Added instrlist_get_auto_predicate() and instrlist_set_auto_predicate().
- Globally enabled auto predication in the drmgr instrumentation insertion event by
default.
- Added drmgr_disable_auto_predication().
- Added a new option -signal_stack_size with a smaller default value than
before, to save space on applications with many threads.
- Added instr_predicate_is_cond().
- Added a hardware data next-line prefetcher to drcachesim. It is on by
default, so simulation results may not match those in prior releases.
It can be disabled by running with "-data_prefetcher none" (see \ref
sec_drcachesim_ops).
- Added a last-level cache miss recording feature to drcachesim.
- Added a delayed tracing feature to drcachesim.
- Added an option to drcachesim to specify cache warmup by loaded fraction of the
last level cache.
- On Linux, the VDSO module is now included in the module list at program
startup.
- Added support for Windows 10 1703. We provide an artificial version
identifier #DR_WINDOWS_VERSION_10_1703 to distinguish this major update.
- Added support for Windows 10 1709. We provide an artificial version
identifier #DR_WINDOWS_VERSION_10_1709 to distinguish this major update.
- Added an event for kernel-mediated control flow via
dr_register_kernel_xfer_event() with corresponding routines
drmgr_register_kernel_xfer_event() and drmgr_register_kernel_xfer_event_ex().
- Added a new option -ignore_all_libs to drcpusim.
- Added several new trace analysis tools to drcachesim: reuse distance,
reuse time, histogram, and trace basic counts.
- Added a trace analysis tool framework to facilitate creating custom
trace tools using the CMake function use_DynamoRIO_drmemtrace() and
exported drmemtrace_analyzer and analysis tool libraries.
- Added the CMake function configure_DynamoRIO_main_headers() to
facilitate using drfrontendlib by itself.
- Added instr_is_string_op() and instr_is_rep_string_op().
- Added dr_app_recurlock_lock().
- Added hashtable_apply_to_all_payloads() to iterate over all payloads in a
hashtable.
- Added drutil_insert_get_mem_addr_ex().
- Added dr_vfprintf().
- Added drmgr_register_thread_init_event_user_data() and
drmgr_unregister_thread_init_event_user_data() to enable passing of user data.
- Added drmgr_register_thread_exit_event_user_data() and
drmgr_unregister_thread_exit_event_usr_data() to enable passing of user data.
- Added drmgr_register_module_load_event_user_data() and
drmgr_unregister_module_load_event_user_data() to enable passing of user data.
- Added drmgr_register_module_unload_event_user_data() and
drmgr_unregister_module_unload_event() to enable passing of user data.
- Added a new drcachesim feature that records which cpu each thread
executed on along with an optional simulator scheduling feature to
schedule threads on simulated cores to match the recorded execution on
physical cpus.
- Added #DR_DISALLOW_UNSAFE_STATIC and dr_disallow_unsafe_static_behavior()
for sanity checks to help support statically-linked clients.
- Added drmgr_register_pre_syscall_event_user_data() and
drmgr_unregister_pre_syscall_event_user_data() to enable passing of user data.
- Added drmgr_register_post_syscall_event_user_data() and
drmgr_unregister_post_syscall_event_user_data() to enable passing of user data.
- Added dr_where_am_i(), dr_track_where_am_i(), and dr_is_tracking_where_am_i()
better support client self-profiling via sampling.
- Added dr_get_stats() to retrieve runtime stats. Currently limited to number
of built basic blocks.
- Added drreg_reservation_info_ex(), drreg_statelessly_restore_app_value(),
and drreg_is_instr_spill_or_restore().
- Added dr_app_stop_and_cleanup_with_stats() to obtain stats values right before
cleanup.
- drmodtrack now allocates an entry per segment for each loaded module.
Added a file offset field to module_segment_data_t for UNIX platforms.
drcachesim saves file offset information in modules.log on UNIX platforms.
- Added dr_prepopulate_cache() and dr_prepopulate_indirect_targets() for
setting up the code cache prior to execution.
- Added support for Windows 10 1803. We provide an artificial version
identifier #DR_WINDOWS_VERSION_10_1803 to distinguish this major update.
- Generalization of the drcachesim #raw2trace_t API (Issue #3129):
- Added #module_mapper_t, which factors out the module mapping functionality
out of #raw2trace_t, replacing the following #raw2trace_t APIs:
#raw2trace_t::handle_custom_data(), #raw2trace_t::do_module_parsing(),
#raw2trace_t::do_module_parsing_and_mapping(), and
#raw2trace_t::find_mapped_trace_address().
- Added #trace_metadata_writer_t, a set of utility functions used by drcachesim's
#raw2trace_t for writing trace metadata: process/thread ids, timestamps, etc.
- Added #trace_metadata_reader_t, a set of utilities for checking and validating
thread start successions of offline entries in a raw data file.
- Added #trace_converter_t, an extensibility mechanism for raw trace conversion.
- Added drmemtrace_get_timestamp_from_offline_trace(), an API for fetching the timestamp
from the beginning of a raw trace bundle (regardless of whether it is a thread start
or just a subsequent bundle).
- Added dr_abort_with_code().
- Added support for interoperability between emulation clients and observational
clients: #emulated_instr_t, drmgr_insert_emulation_start(),
drmgr_insert_emulation_end(), drmgr_is_emulation_start(), drmgr_is_emulation_end()
and drmgr_get_emulated_instr_data().
- Added drmgr_register_signal_event_user_data() and
drmgr_unregister_signal_event_user_data() to enable passing of user data.
- Added hashtable_apply_to_all_payloads_user_data() to iterate over all payloads
in a hashtable with user data also available.
- Added cmake function DynamoRIO_get_full_path that shall be used instead of reading
the LOCATION target property.
- Added a drcachesim/drmemtrace analysis tool routine initialize() to help separate
initialization that could fail from tool construction.
- Split raw2trace_directory_t initialization from its constructors
into new initialize() and initialize_module_file() methods.
- Added drcachesim/drmemtrace support for analyzing offline traces in parallel,
concurrently operating on each traced thread (or other sharding division). This
is made possible by the new storage of traces in separate files. Adds a new
analysis_tool_t interface where if the tool's parallel_shard_supported() returns
true, analyzer_t switches to a parallel operation mode. Today, a simple static
scheduling among worker threads is used. Each worker completely owns one or more
shards, eliminating the need for synchronization when processing a thread's trace
entries. The tools' parallel_shard_init() function is invoked to create
traced-thread-local data, which is passed to parallel_shard_memref(). A
parallel_shard_exit() is provided for cleanup, though most tools will sort,
aggregate, and clean up in print_results().
- Added module_mapper_t::find_mapped_trace_bounds() to allow callers to cache
results and avoid global locks during parallel operation.
**************************************************
<hr>
Version 7.0.0 includes Dr. Memory and the Dr. Memory Framework (DRMF) in
the same package as DynamoRIO. DRMF provides the umbra, drsyscall, and
drsymcache Extensions for use by clients.
The changes between version 7.0.0 and 6.2.0 include the following minor
compatibility changes:
- Changed dr_app_stop() to send all threads native instead of only the
calling thread.
- Replaced PAGE_SIZE with dr_page_size() and removed PAGE_START from the API.
However, clients may set(DynamoRIO_PAGE_SIZE_COMPATIBILITY ON), in which
case definitions of PAGE_SIZE and PAGE_START using dr_page_size() are
provided, though code that uses these macros in a constant expression,
such as a static initialiser, will still need to be rewritten.
DynamoRIO_PAGE_SIZE_COMPATIBILITY will be set automatically if the
client targets version 6.2 or earlier.
Further non-compatibility-affecting changes include:
- Added preliminary AArch64 ARMv8 support: see \ref sec_limits for a
description of what is not yet expected to work.
- Added a static library form of DynamoRIO for use either with
auto-takeover or the start/stop API. The configure_DynamoRIO_static()
and use_DynamoRIO_static_client() CMake utilities facilitate this.
- Enabled \ref page_drcachesim for Windows for single-process applications.
- Added a module tracking feature \p drmodtrack for quick identification of which
library a program counter belongs to and for persistent labeling of
modules for post-processing and across library reloads. This is part of
the \p drcovlib Extension. See #drmodtrack_init() and related functions.
- Added drx_open_unique_appid_dir().
- Added #DRX_FILE_SKIP_OPEN.
- Added %[] support to dr_sscanf.
- Added dr_map_executable_file() and dr_unmap_executable_file().
- Added dr_get_microseconds().
- Added #DR_CLEANCALL_ALWAYS_OUT_OF_LINE.
- Added instr_create_4dst_2src().
- Added drreg_restore_app_values() and drreg_restore_app_aflags().
- Added drx_tail_pad_block().
- Added XINST_CREATE_load_1byte_zext4().
**************************************************
<hr>
Version 6.2.0 includes Dr. Memory and the Dr. Memory Framework (DRMF) in
the same package as DynamoRIO. DRMF provides the umbra, drsyscall, and
drsymcache Extensions for use by clients.
The changes between version 6.2.0 and 6.1.0 include:
- Added support for Windows 10 1607. We provide an artificial version
identifier #DR_WINDOWS_VERSION_10_1607 to distinguish this major update.
- Split the memory trace sample memtrace_x86 into memtrace_x86_text and
memtrace_x86_binary to highlight the huge performance difference.
- Added instruction trace samples instrace_simple, instrace_x86_text, and
instrace_x86_binary.
- Added better drreg support for intra-bb control flow by adding
drreg_set_bb_properties().
- Added priority-controlled drmgr_register_thread_init_event_ex() and
drmgr_register_thread_exit_event_ex().
- Added \ref sec_drx_buf to drx: drx_buf_create_circular_buffer(),
drx_buf_create_trace_buffer(), and more.
- Documented that drx_insert_counter_update() does rely on drx_init().
- Better international string support for usernames and application
paths.
**************************************************
<hr>
Version 6.1.0 includes Dr. Memory and the Dr. Memory Framework (DRMF) in
the same package as DynamoRIO. DRMF provides the umbra, drsyscall, and
drsymcache Extensions for use by clients.
The changes between version 6.1.0 and 6.0.0 include the
following minor compatibility changes:
- Fixed problems with configuration directories on Android. This involved
changing drfront_access() to attempt to create a file by calling a new
routine that is also exported, drfront_dir_try_writable().
- Fixed several bugs.
**************************************************
<hr>
Version 6.1.0 includes Dr. Memory and the Dr. Memory Framework (DRMF) in
the same package as DynamoRIO. DRMF provides the umbra, drsyscall, and
drsymcache Extensions for use by clients.
The changes between version 6.1.0 and 6.0.0 include the
following minor compatibility changes:
- Changed drreg_aflags_liveness() to take in the target instruction.
Further non-compatibility-affecting changes include:
- Added support for C++ clients on Android via private loader support for
Bionic.
- opnd_size_in_bytes() and opnd_size_in_bits() no longer accept DR_REG_
constants as input (the caller must first call reg_get_size()).
This was true in the 6.0.0 release but the documentation and the
routines themselves did not reflect this.
- Added drreg_init_and_fill_vector() and drreg_set_vector_entry().
- Augmented drx_insert_counter_update() to work with drreg.
- Added dr_raw_tls_opnd().
- Added drreg_reservation_info().
- Added opnd_create_rel_addr() and opnd_is_rel_addr() support for ARM.
- Added drreg_is_register_dead() and drreg_reserve_dead_register().
- Split out the core functionality of the \ref page_drcov tool into
a new Extension \p drcovlib for easier inclusion of coverage output in
other tools.
- Added support for the Windows 10 TH2 1511 update. We provide an
artificial version identifier #DR_WINDOWS_VERSION_10_1511 to distinguish
this major update.
**************************************************
<hr>
Version 6.0.0 includes Dr. Memory and the Dr. Memory Framework (DRMF)
in the same package as DynamoRIO. DRMF provides the umbra, drsyscall, and
drsymcache Extensions for use by clients.
The changes between version 6.0.0 and 5.0.0 include the
following minor compatibility changes:
- Deprecated dr_init() as a client's entry point, replacing it with
dr_client_main() which is passed an argv-style array of client options
just like a regular application's main() routine.
- Changed the default injection method on Linux to use "early injection"
which begins executing the target application from its very first
instruction. Clients on Linux will now see more application code than
they did previously. The old behavior can be requested by passing
"-late" to drrun or drinject, or including "-no_early_inject" in the
options to drinjectlib.
- Moved the module load event to a later point where the application first
executes code from the library. This enables clients to access properly
relocated values inside the library, which was not possible with the
prior event point at the first memory mapping of the library.
Applications that still wish to see the first mapping will need to
monitor system calls to replicate the old control point.
- To support conditionally executed instructions, added a new parameter of
type #dr_opnd_query_flags_t to routines that explicitly query what was
read or written by an instruction: instr_get_eflags(),
instr_get_arith_flags(), decode_eflags_usage(), instr_writes_to_reg(),
instr_reads_from_reg(), and instr_writes_to_exact_reg(). This new
parameter determines how to treat conditionally accessed operands. We
decided that breaking compatibility directly was the best solution to
ensure that clients performing liveness analysis versus other types of
usage analysis are properly updated to handle conditionally executed
instructions. All other API routines include all operands whether
conditionally accessed or not.
- Removed the artificial additional source operand that was added to each
OP_cmovcc and OP_fcmovcc instruction in the past. We have replaced this
with the new predication API (instr_is_predicated(), etc.) and new
parameters to read/write query routines (#dr_opnd_query_flags_t).
- Widened the #reg_id_t type from a byte to a ushort.
- Changed both drconfiglib and drinjectlib to be static libraries rather
than shared libraries on UNIX platforms, for simpler usage without
worrying about locating them at runtime, as well as making it easier to
use on Android. They remain shared libraries on Windows.
- Deprecated dr_get_options(), replacing it with direct arguments to
dr_client_main() or alternatively with dr_get_option_array().
- Deprecated set_x86_mode(), replacing it with dr_set_isa_mode().
- Deprecated get_x86_mode(), replacing it with dr_get_isa_mode().
- Deprecated instr_set_x86_mode(), replacing it with instr_set_isa_mode().
- Deprecated instr_get_x86_mode(), replacing it with instr_get_isa_mode().
- Added a third parameter to drfront_is_64bit_app().
- Deprecated instr_is_sse_or_sse2().
- Removed legacy executable bbcov2lcov.
- Removed legacy "-t bbcov" support.
Further non-compatibility-affecting changes include:
- Added AArch32 ARMv7 and ARMv8 support.
- Added experimental Android support. C clients are supported, but C++
clients are not yet supported.
- Added Windows 10 support.
- Added a new scratch register coordination Extension, \p drreg.
The \p drreg Extension is still considered experimental and its
interface is subject to change in the next release.
- Added easy-to-use option declaration and parsing for C++ clients
and standalone applications via a new Extension, the \ref page_droption
and the #droption_t class.
- Added a new tool: \ref page_drcachesim, a multi-process cache simulator.
- Added a new tool: \ref page_drcpusim, a CPU simulator for illegal
instructions on legacy processors.
- Added distinctions between reasons for dr_query_memory_ex() to fail
- Added opnd_size_in_bits().
- Added cross-platform instruction creation macros
XINST_CREATE_debug_instr(), XINST_CREATE_load(), XINST_CREATE_store(),
XINST_CREATE_move(), XINST_CREATE_load_simd(), XINST_CREATE_store_simd(),
XINST_CREATE_jump_mem(), XINST_CREATE_jump_reg(), XINST_CREATE_load_int(),
XINST_CREATE_jump(), XINST_CREATE_jump_short(),
XINST_CREATE_call(), XINST_CREATE_return(),
XINST_CREATE_add(), XINST_CREATE_add_2src(), XINST_CREATE_add_s(),
XINST_CREATE_sub(), XINST_CREATE_sub_s(),
XINST_CREATE_and_s(), XINST_CREATE_cmp(),
XINST_CREATE_interrupt(), XINST_CREATE_nop(),
XINST_CREATE_load_1byte(), XINST_CREATE_load_2bytes(),
XINST_CREATE_store_1byte(), and XINST_CREATE_store_2bytes().
- Added a new feature: a binary annotation framework that facilitates communication
between the target app and the DynamoRIO client and core. See \ref sec_annotations
and dr_annotation.h.
- Added instr_is_predicated(), instr_get_predicate(), and
instr_set_predicate().
- Added instr_predicate_triggered().
- Added dr_save_arith_flags_to_reg() and dr_restore_arith_flags_from_reg().
- Added opnd_get_index_shift() and opnd_set_index_shift().
- Added opnd_create_reg_ex() and opnd_get_flags().
- Added opnd_create_base_disp_arm().
- Added reg_is_simd().
- Added instr_create_0dst_4src(), instr_create_1dst_4src(),
instr_create_2dst_5src(), instr_create_Ndst_Msrc_vardst(),
and instr_create_Ndst_Msrc_varsrc().
- Added OPND_CREATE_MEMLIST().
- Added dr_get_stolen_reg(), dr_insert_get_stolen_reg_value(),
dr_insert_set_stolen_reg_value(), and reg_is_stolen().
- Added opnd_create_immed_uint().
- Added instr_remove_srcs() and instr_remove_dsts().
- Added cross-platform #EFLAGS_READ_ARITH and #EFLAGS_WRITE_ARITH.
- Added instr_invert_predicate() and instr_predicate_name().
- Added instr_it_block_get_count(), instr_it_block_get_pred(),
instr_it_block_compute_immediates(), and instr_it_block_create()
for manipulating IT block instructions on ARM.
- Added opnd_set_flags().
- Added opnd_create_immed_int64(), opnd_is_immed_int64(), and
opnd_get_immed_int64() for 64-bit immediate SIMD constants on 32-bit ARM.
- Added dr_set_client_version_string().
- Added instr_get_prev_app() and instrlist_last_app().
- Added the \ref op_syntax_arm "-syntax_arm" runtime option.
- Added opnd_add_flags().
- Added drmgr_unregister_bb_insertion_event().
- Added drmgr_is_first_instr() and drmgr_is_last_instr().
- Added dr_app_pc_as_jump_target() and dr_app_pc_as_load_target().
- Added dr_remove_it_instrs() and dr_insert_it_instrs().
- Added automated conditional instrumentation to drmgr.
- Added dr_insert_read_raw_tls() and dr_insert_write_raw_tls().
- Added instr_is_exclusive_store().
- Added #DR_FILE_WRITE_ONLY.
- Added dr_get_option_array().
- Added drwrap_redirect_execution().
- Added support for common calling conventions in drwrap.
- Added a new sample client, named ssljack.
- Added the -pathmap option to the post-processor for \ref page_drcov.
- Added instr_is_sse() and instr_is_sse2().
- Added instr_is_3DNow(), instr_is_sse3(), and instr_is_ssse3().
- Added instr_is_sse41(), instr_is_sse42(), and instr_is_sse4A().
- Added instr_is_reg_spill_or_restore().
- Added #DR_MEMPROT_VDSO.
**************************************************
<hr>
Version 5.0.0 includes Dr. Memory and the Dr. Memory Framework (DRMF)
in the same package as DynamoRIO. DRMF provides the umbra, drsyscall, and
drsymcache Extensions for use by clients.
The changes between version 5.0.0 and 4.2.0 also include the
following minor compatibility changes:
- Dropped official support for Windows 2000. The core DynamoRIO engine
should continue to work there, but the official release package
will not run on Windows 2000.
- Changed the third parameter to drsym_search_symbols_ex() from a bool to
a uint flags in order to take in demangling flags. Binary compatibility
is maintained as drsym_info_t's size was changed, but source
compatibility is affected by this change.
- Added collapsing of template parameters to "<>" for drsyms operations on
Windows PDB symbols when #DRSYM_DEMANGLE is specified. This can be
undone by specifying #DRSYM_DEMANGLE_PDB_TEMPLATES.
- Removed empty parentheses "()" from partially-demangled symbols (when
#DRSYM_DEMANGLE is specified) for #DRSYM_ELF_SYMTAB and #DRSYM_PECOFF_SYMTAB.
Windows and Linux symbols are now consistent for #DRSYM_DEMANGLE.
- Changed the operand sizes of instructions that read or write only part
of a multimedia register (mmx, xmm, or ymm) to reflect the partial size.
- Added return value for dr_fprintf to indicate how many bytes are written.
- Renamed the function add_rel_rpaths() in DynamoRIOConfig.cmake to
DynamoRIO_add_rel_rpaths().
- Deprecated instr_ok_to_mangle() and instr_set_ok_to_mangle()
(replaced with instr_is_app(), instr_is_meta(), instr_set_app(), and
instr_set_meta()).
Further non-compatibility-affecting changes include:
- Added dr_syscall_get_result_ex() and dr_syscall_set_result_ex() for
future MacOS support.
- Added Mach-O support to drsyms.
- Added INSTR_CREATE_cmpxchg_8() for 64-bit cmpxchg
- Changed the default -stderr_mask on Windows to 0xC (for both release
and debug), and the default -msgbox_mask on Windows release builds
to 0xC, for better error reporting. For interactive runs, then,
the user should explicitly pass -msgbox_mask 0.
- Added a flags output parameter to #drsym_info_t.
- Added dr_module_contains_addr() to make handling non-contiguous
libraries easier.
- Added hashtable_lock_self_owns() to the drcontainers Extension.
- Added opnd_create_reg_partial() and opnd_is_reg_partial() for
representing a partial multimedia register
- Added operand size suffixes on disassembly in the default mode.
This can be disabled via -disasm_mask 0x8 or by calling
disassemble_set_syntax(DR_DISASM_NO_OPND_SIZE).
- Added instr_zeroes_ymmh().
- Added new fields to module_data_t: timestamp for Linux and MacOS, and
version and uuid fields for MacOS.
- Added a new library drfrontendlib to be used for building tool
front-ends. For more information see dr_frontend.h.
- Added dr_create_memory_dump().
- Added dr_mcontext_to_context().
- Added dr_call_on_clean_stack().
- Added dr_set_client_name() for customizing the diagnostic message
presented to users when an error occurs or when dr_messagebox() is called.
- Added instr_get_next_app() and instrlist_first_app() to allow clients to
traverse only application (non-meta) instructions.
- Added dr_config_status_code_to_string().
- Added custom tool front-end launching support to drrrun tool config files.
- Added a tool notification feature to drrun tool config files.
- Added get_visualstudio_info() for looking up visual studio
installation information.
- Renamed the strace sample to "syscall" and removed its tracing feature,
in favor of a superior strace sample inside DRMF.
- Included a copy of dbghelp.dll for drsyms
- Added dr_insert_cbr_instrumentation_ex(),
which provides the fall-through address.
- Added instr_is_app(), instr_is_meta(), instr_set_app(), and instr_set_meta().
- Added reg_get_value_ex().
**************************************************
<hr>
The changes between version 4.2.0 and 4.1.0 include:
- Added preliminary Windows 8.1 support
- Added a new Library Tracing Tool, drltrace.
- Re-branded our \ref page_drcov
- Added an export iterator: dr_symbol_export_iterator_start(),
dr_symbol_export_iterator_hasnext(), dr_symbol_export_iterator_next(),
dr_symbol_export_iterator_stop()
- Added relative directory support to file routines on Windows
- Added dr_get_current_directory()
- Added dr_delete_dir()
- Added drx_open_unique_file() and drx_open_unique_appid_file()
- Added proc_avx_enabled()
- Added support for recent IA-32/AMD64 instructions: the rdrand,
fsgsbase, FMA4, XOP, TBM, LWP, BMI1, BMI2, SMX, INVPCID,
TSX, and AVX2 instruction groups
- Added vector addressing (VSIB) support to instr_compute_address(),
instr_compute_address_ex() and
instr_compute_address_ex_pos()
- Added opnd_is_vsib()
- Fixed misnamed opcodes: OP_pmovsxdw is now OP_pmovsxwd,
OP_pmovzxdw is now OP_pmovzxwd, OP_vpmovsxdw is now OP_vpmovsxwd,
and OP_vpmovzxdw is now OP_vpmovzxwd.
- Renamed DRgui to DRstats in anticipation of a new DRgui graphical tool framework
- dr_exit_process() now supports sending a fatal signal via the 2nd byte of
the exit code being set to the signal number
- Added a return value of NULL to dr_standalone_init() to indicate
failure, such as running on an unsupported OS
- Added a "soft kills" feature to the \p drx Extension via
drx_register_soft_kills() to avoid child process termination preventing
output of instrumentation results
- Added dr_convert_pid_to_handle()
- Added dr_syscall_intercept_natively()
- Added dr_app_handle_mbr_target()
- Added dr_app_running_under_dynamorio()
- Added drvector_set_entry()
- Re-ordered the initial thread init event to be prior to the initial
module load events
- Changed DynamoRIO_USE_LIBC to be on by default for all clients,
including clients written in C
- Added static library versions of most Extension libraries: drmgr_static,
drutil_static, drwrap_static, drsyms_static, and drx_static.
Be sure to check the licenses and other restrictions (in particular,
most of these Extensions will not work properly if duplicated)
before using these static versions.
- Various bug fixes
**************************************************
<hr>
The changes between version 4.1.0 and 4.0.1 include the
following compatibility changes:
- The #drsym_info_t data structure has changed. The file name is now
a caller-allocated buffer, and it and the symbol name are separated out.
This affects code that calls drsym_lookup_address().
- Memory allocated through system libraries (including malloc, operator
new, and HeapAlloc) is not guaranteed to be reachable by a 32-bit
displacement from the code cache: only memory directly allocated via
DR's API. The \ref op_reachable_heap "-reachable_heap runtime option"
can be used to guarantee that all memory is reachable.
- For 64-bit, the opcode constants OP_fxsave, OP_fxrstor, OP_xsave,
OP_xrstor, and OP_xsaveopt have all been replaced with two versions: one
with a "32" suffix and one with a "64" suffix. E.g., OP_fxsave is split
into #OP_fxsave32 and #OP_fxsave64. The 32 version corresponds to the
no-suffix assembler mnemonic while the 64 version coresponds to the
assembler mnemonic of the same name. Previously, the 64-bit versions of
these instrutions could not be distinguished nor encoded from scratch.
Further non-compatibility-affecting changes include:
- Added instr_is_floating_ex()
- Ported the stats.c sample and DRgui to 64-bit. As part of this, the
shared memory structure changed shape on Windows: pid is now of type
process_id_t.
- Added the \p drtable Extension which provides simple table management
- Added opnd_size_from_bytes()
- Added path searching support to dr_load_aux_library()
- Added limited, experimental support for 32-bit WOW64 clients to use
64-bit libraries and code via dr_load_aux_x64_library(),
dr_lookup_aux_x64_library_routine(), dr_unload_aux_x64_library(), and
dr_invoke_x64_routine().
- Added drmgr_current_bb_phase()
- The deployment tools (drrun, drconfig, and drinject) are now helper
binaries instead of shell scripts.
- The deployment tools (drrun etc.) now interpret -v as an alias for
-verbose and use -version to print version info.
- Added instrlist_insert_mov_immed_ptrsz() and instrlist_insert_push_immed_ptrsz()
- Added instrlist_insert_mov_instr_addr() and instrlist_insert_push_instr_addr()
- Added drsym_enumerate_lines()
- Added #DR_DISASM_STRICT_INVALID
- Added a new runtime option \ref op_syntax_att "-syntax_att" for
AT&T-style disassembly that hides the implicit operands.
Also added #DR_DISASM_DR to name DR's default disassembly style, with
#DR_DISASM_ATT selecting a true AT&T disassembly style that hides
implicit operands. The only compatibility change here is if a client
selected DR_DISASM_ATT and expected DR-style disassembly.
- Added #DR_MAP_IMAGE
- Added -t option to drrun for end-user tools
- Added 64-bit reachability support to dr_insert_call() and
dr_insert_clean_call(). Added explicit control over reachability
in a new routine dr_insert_call_ex() and in #DR_CLEANCALL_INDIRECT
for dr_insert_clean_call_ex().
- Added auto-magic conversion of absolute and pc-relative memory
operands to each other for more flexible 64-bit encoding.
- Added opnd_create_instr_ex() and opnd_get_shift()
- Added dr_custom_alloc()
- Added dr_raw_mremap() and dr_raw_brk()
- Added #DR_EMIT_GO_NATIVE, dr_suspend_all_other_threads_ex(),
dr_retakeover_suspended_native_thread(), and dr_is_thread_native() for
temporarily-native support.
- Added dr_get_token()
- Added dr_switch_to_app_state_ex() and dr_switch_to_dr_state_ex()
- Added dr_is_nudge_thread()
- Added support for nudging 64-bit Windows applications
- Added dr_get_dr_thread_handle()
- Added #DR_MEMTYPE_RESERVED to #dr_mem_info_t
- proc_save_fpstate(), proc_restore_fpstate(), dr_insert_save_fpstate(),
and dr_insert_restore_fpstate() now use the current thread's x86 mode
to determine which fxsave state format to use.
- Added partial support for presenting the proper floating point program
counter when floating point state is saved.
Xref the \ref op_translate_fpu_pc "-translate_fpu_pc runtime option".
- Added \p drx Extension: the DynamoRIO Instrumentation Utility
Extension with BSD license
- Added automatic restarting of appropriate system calls interrupted by signals.
- Various bug fixes
**************************************************
<hr>
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)
**************************************************
<hr>
The changes between version 4.0.0 and 3.2.0 include a
compatibility change in the drsyms Extension:
- Changed the drsyms type query data structures (#drsym_type_t,
#drsym_func_type_t, #drsym_int_type_t, #drsym_ptr_type_t).
This is a binary compatibility change for drsym_get_func_type().
And in the drmgr Extension:
- The post-syscall, module load, module unload, signal, exception,
and restore state events are now mediated and ordered by drmgr.
Thus, clients should call drmgr_register_post_syscall_event()
(for a default priority) or drmgr_register_post_syscall_event_ex() (to
specify a priority) rather than
dr_register_post_syscall_event(). The same applies to
drmgr_register_module_load_event() +
drmgr_register_module_load_event_ex(),
drmgr_register_module_unload_event() +
drmgr_register_module_unload_event_ex(),
drmgr_register_signal_event() +
drmgr_register_signal_event_ex(),
drmgr_register_exception_event() +
drmgr_register_exception_event_ex(), and
drmgr_register_restore_state_event() +
drmgr_register_restore_state_ex_event() +
drmgr_register_restore_state_ex_event_ex().
And in the core API:
- dr_get_milliseconds() now returns the number of milliseconds since Jan
1, 1601 on all platforms.
And in the non-core APIs:
- dr_inject_process_create() now takes a NULL-terminated array of strings for
the app command line to better support porting to Linux.
Further non-compatibility-affecting changes include:
- Added preliminary Windows 8 support, though private kernelbase.dll is
not yet supported
- Added persistent cache support for clients via
dr_register_persist_ro(), dr_register_persist_rx(),
dr_register_persist_rw(), dr_register_persist_patch(), and
#DR_EMIT_PERSISTABLE. However, dr_register_persist_patch() is
still experimental, is in flux, and is subject to change in
the next release.
- Added hashtable persistence support via hashtable_persist_size(),
hashtable_persist(), and hashtable_resurrect()
- Added drsym_get_type(), drsym_expand_type(), and support for additional
type categories for Windows drsyms.
- Ported the drinjectlib and drconfiglib libraries to Linux. Routines that
are still Windows-only are marked in the API docs.
- Added dr_inject_prepare_to_exec() on Linux
- Added drsym_free_resources()
- Added drsym_module_has_symbols()
- Added a type_id field to drsym_info_t (without compatibility changes)
- Added drsym_enumerate_symbols_ex() and drsym_search_symbols_ex() which
return drsym_info_t on each symbol
- Added dr_exit_process() to cleanly shut down with a specified
exit code
- Added dr_convert_handle_to_pid()
- Added dr_nudge_client_ex() to enable nudging other processes
from within a client
- Added reg_resize_to_opsz()
- Added dr_save_arith_flags_to_xax() and dr_restore_arith_flags_from_xax()
- Added dr_snwprintf() and dr_vsnwprintf()
- Added drwrap_replace_native(), drwrap_is_replaced(),
drwrap_is_replaced_native()
- Added dr_clobber_retaddr_after_read()
- Added dr_get_string_option() and dr_get_integer_option() to support querying
arbitrary DynamoRIO runtime options
- Added support for building with Visual Studio 2010 and with MSBuild
- Added instr_is_near_ubr() and instr_is_near_call_direct()
- Added exported CMake cross-platform assembly support in
cpp2asm_support.cmake and auxiliary files
- Added get_DynamoRIO_defines() to DynamoRIOConfig.cmake
- Added DR_EMIT_MUST_END_TRACE flag
- Improved the performance of dr_safe_read() such that it out-performs
DR_TRY_EXCEPT and no longer invokes a system call on Windows.
- Added dr_redirect_native_target()
- Added dr_mark_safe_to_suspend()
- Added dr_mutex_mark_as_app(), dr_rwlock_mark_as_app(), and
dr_recurlock_mark_as_app()
- Added dr_get_main_module()
- Added module import iterators dr_module_import_iterator_start(),
dr_module_import_iterator_hasnext() dr_module_import_iterator_next(),
dr_module_import_iterator_stop(), dr_symbol_import_iterator_start(),
dr_symbol_import_iterator_hasnext(), dr_symbol_import_iterator_next(), and
dr_symbol_import_iterator_stop().
- Added DR_FAST_IR to allow clients to inline some key IR routines
- Added -logdir runtime option for control over the log directory
- Added drmgr_get_parent_cls_field()
- Added support for building DynamoRIO with Visual Studio 2012 and
the Windows 8 WDK
- Added a new operand type enabling an instr_t to be used as a
memory reference: opnd_create_mem_instr(), opnd_is_mem_instr(),
opnd_get_mem_instr_disp()
- Added DYNAMORIO_CONFIGDIR alternative to HOME as a config dir location.
Additionally, drrun uses a temp dir for config files rather than failing.
- Added library search path control via the client_basename.drpath file
- Added drmgr_register_pre_syscall_event_ex()
- Added DR_MEMPROT_GUARD for dr_memory_protect (Windows only).
- Added dr_sscanf()
- Added notifications on application faults and additional information
on client faults
- Added conversion between UTF-16 and UTF-8 to dr_snprintf() and
dr_snwprintf()
- Added simplified -c client argument form to drrun, drconfig, and drinject.
- Added official support for the \ref op_speed "-opt_speed" option
to prioritize speed over a simple code stream.
- Added dr_atomic_add32_return_sum()
- Deprecated dr_save_arith_flags() and dr_restore_arith_flags()
- Fixed performance regression involving inlined clean calls
- Fixed bug involving 32-bit Linux support on a 64-bit Linux
kernel on an AVX-enabled processor (Issue 754)
- Fixed bug involving multimedia state on a 32-bit Windows kernel
(Issue 139)
- Fixed bugs building and running on Ubuntu 11.10 (Issue 718, Issue 720)
- Several other bug fixes
- Added dr_raw_mem_alloc() and dr_raw_mem_free(). However, they are still
experimental, are in flux, and are subject to change in the next release.
**************************************************
<hr>
The changes between version 3.2.0 and 3.1.0 are:
- Added support for PECOFF + DWARF2 symbols on Windows in the
drsyms Extension
- Added support for building extensions as static libraries (subject to
licensing constraints) via DR_EXT_{DRWRAP,DRUTIL,DRMGR,DRSYMS}_STATIC
- Added support for linking C clients with libc via DynamoRIO_USE_LIBC
- Added dr_insert_clean_call_ex()
- Added a no-frills drwrap mode for faster but constrained wrapping
- Added drwrap_get_drcontext() for performance
- Added drwrap notification on exceptions bypassing post-hooks
- Added drwrap_wrap_ex() to pass initial constant user data
- Added drwrap_is_wrapped() and drwrap_is_post_wrap()
- Added drwrap_set_global_flags() to control safety of
application memory accesses
- Added drwrap_get_mcontext_ex() to avoid the cost of copying
multimedia register values when not necessary
- Added drwrap interface for caching post-call addresses
- Added drmgr_decode_sysnum_from_wrapper()
- Added drutil_expand_rep_string_ex() that returns additional
information about string loop expansion
- Added improved instrlist disassembly that includes labels and
instruction targets
- Added instr_compute_address_ex_pos() for instrs with multiple memory
operands.
- Added dr_get_client_base()
- Added dr_vsnprintf()
- Added service pack version to dr_get_os_version()
- Added mediation of note fields to drmgr
- Added custom storage in label instructions via instr_get_label_data_area()
- Added support for multiple non-meta control transfer instructions
with intra-block targets in one basic block to drmgr
- Added user data passing support among all four passes of drmgr
- Several bug fixes
**************************************************
<hr>
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(),