Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1120)

Unified Diff: syzygy/agent/asan/gen/memory_interceptors_impl.asm

Issue 2321423002: Merge the latest changes to master in the vs2015 branch. (Closed)
Patch Set: Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « syzygy/SYZYGY_VERSION ('k') | syzygy/agent/asan/gen/memory_redirectors.asm » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: syzygy/agent/asan/gen/memory_interceptors_impl.asm
diff --git a/syzygy/agent/asan/gen/memory_interceptors_impl.asm b/syzygy/agent/asan/gen/memory_interceptors_impl.asm
index fc4c37263ba90fefa6226fd86d9bcb05ada34907..b3d140a38a200c9a75acb647e5f3bb1fe6d257f5 100644
--- a/syzygy/agent/asan/gen/memory_interceptors_impl.asm
+++ b/syzygy/agent/asan/gen/memory_interceptors_impl.asm
@@ -102,18 +102,24 @@ PUBLIC asan_check_repz_1_byte_cmps_access ; Probe #58.
PUBLIC asan_check_4_byte_cmps_access ; Probe #59.
PUBLIC asan_check_2_byte_cmps_access ; Probe #60.
PUBLIC asan_check_1_byte_cmps_access ; Probe #61.
-PUBLIC asan_check_repz_4_byte_movs_access ; Probe #62.
-PUBLIC asan_check_repz_2_byte_movs_access ; Probe #63.
-PUBLIC asan_check_repz_1_byte_movs_access ; Probe #64.
-PUBLIC asan_check_4_byte_movs_access ; Probe #65.
-PUBLIC asan_check_2_byte_movs_access ; Probe #66.
-PUBLIC asan_check_1_byte_movs_access ; Probe #67.
-PUBLIC asan_check_repz_4_byte_stos_access ; Probe #68.
-PUBLIC asan_check_repz_2_byte_stos_access ; Probe #69.
-PUBLIC asan_check_repz_1_byte_stos_access ; Probe #70.
-PUBLIC asan_check_4_byte_stos_access ; Probe #71.
-PUBLIC asan_check_2_byte_stos_access ; Probe #72.
-PUBLIC asan_check_1_byte_stos_access ; Probe #73.
+PUBLIC asan_check_repz_4_byte_lods_access ; Probe #62.
+PUBLIC asan_check_repz_2_byte_lods_access ; Probe #63.
+PUBLIC asan_check_repz_1_byte_lods_access ; Probe #64.
+PUBLIC asan_check_4_byte_lods_access ; Probe #65.
+PUBLIC asan_check_2_byte_lods_access ; Probe #66.
+PUBLIC asan_check_1_byte_lods_access ; Probe #67.
+PUBLIC asan_check_repz_4_byte_movs_access ; Probe #68.
+PUBLIC asan_check_repz_2_byte_movs_access ; Probe #69.
+PUBLIC asan_check_repz_1_byte_movs_access ; Probe #70.
+PUBLIC asan_check_4_byte_movs_access ; Probe #71.
+PUBLIC asan_check_2_byte_movs_access ; Probe #72.
+PUBLIC asan_check_1_byte_movs_access ; Probe #73.
+PUBLIC asan_check_repz_4_byte_stos_access ; Probe #74.
+PUBLIC asan_check_repz_2_byte_stos_access ; Probe #75.
+PUBLIC asan_check_repz_1_byte_stos_access ; Probe #76.
+PUBLIC asan_check_4_byte_stos_access ; Probe #77.
+PUBLIC asan_check_2_byte_stos_access ; Probe #78.
+PUBLIC asan_check_1_byte_stos_access ; Probe #79.
; Create a new text segment to house the memory interceptors.
.probes SEGMENT PAGE PUBLIC READ EXECUTE 'CODE'
@@ -4250,7 +4256,7 @@ skip_neg_direction_61 LABEL NEAR
asan_check_1_byte_cmps_access ENDP
ALIGN 16
-asan_check_repz_4_byte_movs_access PROC ; Probe #62.
+asan_check_repz_4_byte_lods_access PROC ; Probe #62.
; Prologue, save context.
pushfd
pushad
@@ -4270,6 +4276,276 @@ skip_neg_direction_62 LABEL NEAR
; Push ARG(context), the Asan registers context.
push esp
; Push ARG(compare), shortcut when memory contents differ.
+ push 1
+ ; Push ARG(increment), increment for EDI/EDI.
+ push ebx
+ ; Push ARG(access_size), the access size.
+ push 4
+ ; Push ARG(length), the number of memory accesses.
+ push ecx
+ ; Push ARG(src_access_mode), source access type.
+ push 0
+ ; Push ARG(src), the source pointer.
+ push esi
+ ; Push ARG(dst_access_mode), destination access type.
+ push 0
+ ; Push ARG(dst), the destination pointer.
+ push edi
+ ; Call the generic check strings function.
+ call asan_check_strings_memory_accesses
+ add esp, 36
+ ; Epilogue, restore context.
+ popad
+ popfd
+ ret
+asan_check_repz_4_byte_lods_access ENDP
+
+ALIGN 16
+asan_check_repz_2_byte_lods_access PROC ; Probe #63.
+ ; Prologue, save context.
+ pushfd
+ pushad
+ ; Fix the original value of ESP in the Asan registers context.
+ ; Removing 8 bytes (e.g.EFLAGS / EIP was on stack).
+ add DWORD PTR[esp + 12], 8
+ ; Setup increment in EBX (depends on direction flag in EFLAGS).
+ mov ebx, 2
+ pushfd
+ pop eax
+ test eax, 400h
+ jz skip_neg_direction_63
+ neg ebx
+skip_neg_direction_63 LABEL NEAR
+ ; By standard calling convention, direction flag must be forward.
+ cld
+ ; Push ARG(context), the Asan registers context.
+ push esp
+ ; Push ARG(compare), shortcut when memory contents differ.
+ push 1
+ ; Push ARG(increment), increment for EDI/EDI.
+ push ebx
+ ; Push ARG(access_size), the access size.
+ push 2
+ ; Push ARG(length), the number of memory accesses.
+ push ecx
+ ; Push ARG(src_access_mode), source access type.
+ push 0
+ ; Push ARG(src), the source pointer.
+ push esi
+ ; Push ARG(dst_access_mode), destination access type.
+ push 0
+ ; Push ARG(dst), the destination pointer.
+ push edi
+ ; Call the generic check strings function.
+ call asan_check_strings_memory_accesses
+ add esp, 36
+ ; Epilogue, restore context.
+ popad
+ popfd
+ ret
+asan_check_repz_2_byte_lods_access ENDP
+
+ALIGN 16
+asan_check_repz_1_byte_lods_access PROC ; Probe #64.
+ ; Prologue, save context.
+ pushfd
+ pushad
+ ; Fix the original value of ESP in the Asan registers context.
+ ; Removing 8 bytes (e.g.EFLAGS / EIP was on stack).
+ add DWORD PTR[esp + 12], 8
+ ; Setup increment in EBX (depends on direction flag in EFLAGS).
+ mov ebx, 1
+ pushfd
+ pop eax
+ test eax, 400h
+ jz skip_neg_direction_64
+ neg ebx
+skip_neg_direction_64 LABEL NEAR
+ ; By standard calling convention, direction flag must be forward.
+ cld
+ ; Push ARG(context), the Asan registers context.
+ push esp
+ ; Push ARG(compare), shortcut when memory contents differ.
+ push 1
+ ; Push ARG(increment), increment for EDI/EDI.
+ push ebx
+ ; Push ARG(access_size), the access size.
+ push 1
+ ; Push ARG(length), the number of memory accesses.
+ push ecx
+ ; Push ARG(src_access_mode), source access type.
+ push 0
+ ; Push ARG(src), the source pointer.
+ push esi
+ ; Push ARG(dst_access_mode), destination access type.
+ push 0
+ ; Push ARG(dst), the destination pointer.
+ push edi
+ ; Call the generic check strings function.
+ call asan_check_strings_memory_accesses
+ add esp, 36
+ ; Epilogue, restore context.
+ popad
+ popfd
+ ret
+asan_check_repz_1_byte_lods_access ENDP
+
+ALIGN 16
+asan_check_4_byte_lods_access PROC ; Probe #65.
+ ; Prologue, save context.
+ pushfd
+ pushad
+ ; Fix the original value of ESP in the Asan registers context.
+ ; Removing 8 bytes (e.g.EFLAGS / EIP was on stack).
+ add DWORD PTR[esp + 12], 8
+ ; Setup increment in EBX (depends on direction flag in EFLAGS).
+ mov ebx, 4
+ pushfd
+ pop eax
+ test eax, 400h
+ jz skip_neg_direction_65
+ neg ebx
+skip_neg_direction_65 LABEL NEAR
+ ; By standard calling convention, direction flag must be forward.
+ cld
+ ; Push ARG(context), the Asan registers context.
+ push esp
+ ; Push ARG(compare), shortcut when memory contents differ.
+ push 1
+ ; Push ARG(increment), increment for EDI/EDI.
+ push ebx
+ ; Push ARG(access_size), the access size.
+ push 4
+ ; Push ARG(length), the number of memory accesses.
+ push 1
+ ; Push ARG(src_access_mode), source access type.
+ push 0
+ ; Push ARG(src), the source pointer.
+ push esi
+ ; Push ARG(dst_access_mode), destination access type.
+ push 0
+ ; Push ARG(dst), the destination pointer.
+ push edi
+ ; Call the generic check strings function.
+ call asan_check_strings_memory_accesses
+ add esp, 36
+ ; Epilogue, restore context.
+ popad
+ popfd
+ ret
+asan_check_4_byte_lods_access ENDP
+
+ALIGN 16
+asan_check_2_byte_lods_access PROC ; Probe #66.
+ ; Prologue, save context.
+ pushfd
+ pushad
+ ; Fix the original value of ESP in the Asan registers context.
+ ; Removing 8 bytes (e.g.EFLAGS / EIP was on stack).
+ add DWORD PTR[esp + 12], 8
+ ; Setup increment in EBX (depends on direction flag in EFLAGS).
+ mov ebx, 2
+ pushfd
+ pop eax
+ test eax, 400h
+ jz skip_neg_direction_66
+ neg ebx
+skip_neg_direction_66 LABEL NEAR
+ ; By standard calling convention, direction flag must be forward.
+ cld
+ ; Push ARG(context), the Asan registers context.
+ push esp
+ ; Push ARG(compare), shortcut when memory contents differ.
+ push 1
+ ; Push ARG(increment), increment for EDI/EDI.
+ push ebx
+ ; Push ARG(access_size), the access size.
+ push 2
+ ; Push ARG(length), the number of memory accesses.
+ push 1
+ ; Push ARG(src_access_mode), source access type.
+ push 0
+ ; Push ARG(src), the source pointer.
+ push esi
+ ; Push ARG(dst_access_mode), destination access type.
+ push 0
+ ; Push ARG(dst), the destination pointer.
+ push edi
+ ; Call the generic check strings function.
+ call asan_check_strings_memory_accesses
+ add esp, 36
+ ; Epilogue, restore context.
+ popad
+ popfd
+ ret
+asan_check_2_byte_lods_access ENDP
+
+ALIGN 16
+asan_check_1_byte_lods_access PROC ; Probe #67.
+ ; Prologue, save context.
+ pushfd
+ pushad
+ ; Fix the original value of ESP in the Asan registers context.
+ ; Removing 8 bytes (e.g.EFLAGS / EIP was on stack).
+ add DWORD PTR[esp + 12], 8
+ ; Setup increment in EBX (depends on direction flag in EFLAGS).
+ mov ebx, 1
+ pushfd
+ pop eax
+ test eax, 400h
+ jz skip_neg_direction_67
+ neg ebx
+skip_neg_direction_67 LABEL NEAR
+ ; By standard calling convention, direction flag must be forward.
+ cld
+ ; Push ARG(context), the Asan registers context.
+ push esp
+ ; Push ARG(compare), shortcut when memory contents differ.
+ push 1
+ ; Push ARG(increment), increment for EDI/EDI.
+ push ebx
+ ; Push ARG(access_size), the access size.
+ push 1
+ ; Push ARG(length), the number of memory accesses.
+ push 1
+ ; Push ARG(src_access_mode), source access type.
+ push 0
+ ; Push ARG(src), the source pointer.
+ push esi
+ ; Push ARG(dst_access_mode), destination access type.
+ push 0
+ ; Push ARG(dst), the destination pointer.
+ push edi
+ ; Call the generic check strings function.
+ call asan_check_strings_memory_accesses
+ add esp, 36
+ ; Epilogue, restore context.
+ popad
+ popfd
+ ret
+asan_check_1_byte_lods_access ENDP
+
+ALIGN 16
+asan_check_repz_4_byte_movs_access PROC ; Probe #68.
+ ; Prologue, save context.
+ pushfd
+ pushad
+ ; Fix the original value of ESP in the Asan registers context.
+ ; Removing 8 bytes (e.g.EFLAGS / EIP was on stack).
+ add DWORD PTR[esp + 12], 8
+ ; Setup increment in EBX (depends on direction flag in EFLAGS).
+ mov ebx, 4
+ pushfd
+ pop eax
+ test eax, 400h
+ jz skip_neg_direction_68
+ neg ebx
+skip_neg_direction_68 LABEL NEAR
+ ; By standard calling convention, direction flag must be forward.
+ cld
+ ; Push ARG(context), the Asan registers context.
+ push esp
+ ; Push ARG(compare), shortcut when memory contents differ.
push 0
; Push ARG(increment), increment for EDI/EDI.
push ebx
@@ -4295,7 +4571,7 @@ skip_neg_direction_62 LABEL NEAR
asan_check_repz_4_byte_movs_access ENDP
ALIGN 16
-asan_check_repz_2_byte_movs_access PROC ; Probe #63.
+asan_check_repz_2_byte_movs_access PROC ; Probe #69.
; Prologue, save context.
pushfd
pushad
@@ -4307,9 +4583,9 @@ asan_check_repz_2_byte_movs_access PROC ; Probe #63.
pushfd
pop eax
test eax, 400h
- jz skip_neg_direction_63
+ jz skip_neg_direction_69
neg ebx
-skip_neg_direction_63 LABEL NEAR
+skip_neg_direction_69 LABEL NEAR
; By standard calling convention, direction flag must be forward.
cld
; Push ARG(context), the Asan registers context.
@@ -4340,7 +4616,7 @@ skip_neg_direction_63 LABEL NEAR
asan_check_repz_2_byte_movs_access ENDP
ALIGN 16
-asan_check_repz_1_byte_movs_access PROC ; Probe #64.
+asan_check_repz_1_byte_movs_access PROC ; Probe #70.
; Prologue, save context.
pushfd
pushad
@@ -4352,9 +4628,9 @@ asan_check_repz_1_byte_movs_access PROC ; Probe #64.
pushfd
pop eax
test eax, 400h
- jz skip_neg_direction_64
+ jz skip_neg_direction_70
neg ebx
-skip_neg_direction_64 LABEL NEAR
+skip_neg_direction_70 LABEL NEAR
; By standard calling convention, direction flag must be forward.
cld
; Push ARG(context), the Asan registers context.
@@ -4385,7 +4661,7 @@ skip_neg_direction_64 LABEL NEAR
asan_check_repz_1_byte_movs_access ENDP
ALIGN 16
-asan_check_4_byte_movs_access PROC ; Probe #65.
+asan_check_4_byte_movs_access PROC ; Probe #71.
; Prologue, save context.
pushfd
pushad
@@ -4397,9 +4673,9 @@ asan_check_4_byte_movs_access PROC ; Probe #65.
pushfd
pop eax
test eax, 400h
- jz skip_neg_direction_65
+ jz skip_neg_direction_71
neg ebx
-skip_neg_direction_65 LABEL NEAR
+skip_neg_direction_71 LABEL NEAR
; By standard calling convention, direction flag must be forward.
cld
; Push ARG(context), the Asan registers context.
@@ -4430,7 +4706,7 @@ skip_neg_direction_65 LABEL NEAR
asan_check_4_byte_movs_access ENDP
ALIGN 16
-asan_check_2_byte_movs_access PROC ; Probe #66.
+asan_check_2_byte_movs_access PROC ; Probe #72.
; Prologue, save context.
pushfd
pushad
@@ -4442,9 +4718,9 @@ asan_check_2_byte_movs_access PROC ; Probe #66.
pushfd
pop eax
test eax, 400h
- jz skip_neg_direction_66
+ jz skip_neg_direction_72
neg ebx
-skip_neg_direction_66 LABEL NEAR
+skip_neg_direction_72 LABEL NEAR
; By standard calling convention, direction flag must be forward.
cld
; Push ARG(context), the Asan registers context.
@@ -4475,7 +4751,7 @@ skip_neg_direction_66 LABEL NEAR
asan_check_2_byte_movs_access ENDP
ALIGN 16
-asan_check_1_byte_movs_access PROC ; Probe #67.
+asan_check_1_byte_movs_access PROC ; Probe #73.
; Prologue, save context.
pushfd
pushad
@@ -4487,9 +4763,9 @@ asan_check_1_byte_movs_access PROC ; Probe #67.
pushfd
pop eax
test eax, 400h
- jz skip_neg_direction_67
+ jz skip_neg_direction_73
neg ebx
-skip_neg_direction_67 LABEL NEAR
+skip_neg_direction_73 LABEL NEAR
; By standard calling convention, direction flag must be forward.
cld
; Push ARG(context), the Asan registers context.
@@ -4520,7 +4796,7 @@ skip_neg_direction_67 LABEL NEAR
asan_check_1_byte_movs_access ENDP
ALIGN 16
-asan_check_repz_4_byte_stos_access PROC ; Probe #68.
+asan_check_repz_4_byte_stos_access PROC ; Probe #74.
; Prologue, save context.
pushfd
pushad
@@ -4532,9 +4808,9 @@ asan_check_repz_4_byte_stos_access PROC ; Probe #68.
pushfd
pop eax
test eax, 400h
- jz skip_neg_direction_68
+ jz skip_neg_direction_74
neg ebx
-skip_neg_direction_68 LABEL NEAR
+skip_neg_direction_74 LABEL NEAR
; By standard calling convention, direction flag must be forward.
cld
; Push ARG(context), the Asan registers context.
@@ -4565,7 +4841,7 @@ skip_neg_direction_68 LABEL NEAR
asan_check_repz_4_byte_stos_access ENDP
ALIGN 16
-asan_check_repz_2_byte_stos_access PROC ; Probe #69.
+asan_check_repz_2_byte_stos_access PROC ; Probe #75.
; Prologue, save context.
pushfd
pushad
@@ -4577,9 +4853,9 @@ asan_check_repz_2_byte_stos_access PROC ; Probe #69.
pushfd
pop eax
test eax, 400h
- jz skip_neg_direction_69
+ jz skip_neg_direction_75
neg ebx
-skip_neg_direction_69 LABEL NEAR
+skip_neg_direction_75 LABEL NEAR
; By standard calling convention, direction flag must be forward.
cld
; Push ARG(context), the Asan registers context.
@@ -4610,7 +4886,7 @@ skip_neg_direction_69 LABEL NEAR
asan_check_repz_2_byte_stos_access ENDP
ALIGN 16
-asan_check_repz_1_byte_stos_access PROC ; Probe #70.
+asan_check_repz_1_byte_stos_access PROC ; Probe #76.
; Prologue, save context.
pushfd
pushad
@@ -4622,9 +4898,9 @@ asan_check_repz_1_byte_stos_access PROC ; Probe #70.
pushfd
pop eax
test eax, 400h
- jz skip_neg_direction_70
+ jz skip_neg_direction_76
neg ebx
-skip_neg_direction_70 LABEL NEAR
+skip_neg_direction_76 LABEL NEAR
; By standard calling convention, direction flag must be forward.
cld
; Push ARG(context), the Asan registers context.
@@ -4655,7 +4931,7 @@ skip_neg_direction_70 LABEL NEAR
asan_check_repz_1_byte_stos_access ENDP
ALIGN 16
-asan_check_4_byte_stos_access PROC ; Probe #71.
+asan_check_4_byte_stos_access PROC ; Probe #77.
; Prologue, save context.
pushfd
pushad
@@ -4667,9 +4943,9 @@ asan_check_4_byte_stos_access PROC ; Probe #71.
pushfd
pop eax
test eax, 400h
- jz skip_neg_direction_71
+ jz skip_neg_direction_77
neg ebx
-skip_neg_direction_71 LABEL NEAR
+skip_neg_direction_77 LABEL NEAR
; By standard calling convention, direction flag must be forward.
cld
; Push ARG(context), the Asan registers context.
@@ -4700,7 +4976,7 @@ skip_neg_direction_71 LABEL NEAR
asan_check_4_byte_stos_access ENDP
ALIGN 16
-asan_check_2_byte_stos_access PROC ; Probe #72.
+asan_check_2_byte_stos_access PROC ; Probe #78.
; Prologue, save context.
pushfd
pushad
@@ -4712,9 +4988,9 @@ asan_check_2_byte_stos_access PROC ; Probe #72.
pushfd
pop eax
test eax, 400h
- jz skip_neg_direction_72
+ jz skip_neg_direction_78
neg ebx
-skip_neg_direction_72 LABEL NEAR
+skip_neg_direction_78 LABEL NEAR
; By standard calling convention, direction flag must be forward.
cld
; Push ARG(context), the Asan registers context.
@@ -4745,7 +5021,7 @@ skip_neg_direction_72 LABEL NEAR
asan_check_2_byte_stos_access ENDP
ALIGN 16
-asan_check_1_byte_stos_access PROC ; Probe #73.
+asan_check_1_byte_stos_access PROC ; Probe #79.
; Prologue, save context.
pushfd
pushad
@@ -4757,9 +5033,9 @@ asan_check_1_byte_stos_access PROC ; Probe #73.
pushfd
pop eax
test eax, 400h
- jz skip_neg_direction_73
+ jz skip_neg_direction_79
neg ebx
-skip_neg_direction_73 LABEL NEAR
+skip_neg_direction_79 LABEL NEAR
; By standard calling convention, direction flag must be forward.
cld
; Push ARG(context), the Asan registers context.
« no previous file with comments | « syzygy/SYZYGY_VERSION ('k') | syzygy/agent/asan/gen/memory_redirectors.asm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698