OLD | NEW |
1 ; Copyright 2016 Google Inc. All Rights Reserved. | 1 ; Copyright 2016 Google Inc. All Rights Reserved. |
2 ; | 2 ; |
3 ; Licensed under the Apache License, Version 2.0 (the "License"); | 3 ; Licensed under the Apache License, Version 2.0 (the "License"); |
4 ; you may not use this file except in compliance with the License. | 4 ; you may not use this file except in compliance with the License. |
5 ; You may obtain a copy of the License at | 5 ; You may obtain a copy of the License at |
6 ; | 6 ; |
7 ; http://www.apache.org/licenses/LICENSE-2.0 | 7 ; http://www.apache.org/licenses/LICENSE-2.0 |
8 ; | 8 ; |
9 ; Unless required by applicable law or agreed to in writing, software | 9 ; Unless required by applicable law or agreed to in writing, software |
10 ; distributed under the License is distributed on an "AS IS" BASIS, | 10 ; distributed under the License is distributed on an "AS IS" BASIS, |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
95 PUBLIC asan_check_16_byte_read_access_no_flags_4gb ; Probe #52. | 95 PUBLIC asan_check_16_byte_read_access_no_flags_4gb ; Probe #52. |
96 PUBLIC asan_check_16_byte_write_access_no_flags_4gb ; Probe #53. | 96 PUBLIC asan_check_16_byte_write_access_no_flags_4gb ; Probe #53. |
97 PUBLIC asan_check_32_byte_read_access_no_flags_4gb ; Probe #54. | 97 PUBLIC asan_check_32_byte_read_access_no_flags_4gb ; Probe #54. |
98 PUBLIC asan_check_32_byte_write_access_no_flags_4gb ; Probe #55. | 98 PUBLIC asan_check_32_byte_write_access_no_flags_4gb ; Probe #55. |
99 PUBLIC asan_check_repz_4_byte_cmps_access ; Probe #56. | 99 PUBLIC asan_check_repz_4_byte_cmps_access ; Probe #56. |
100 PUBLIC asan_check_repz_2_byte_cmps_access ; Probe #57. | 100 PUBLIC asan_check_repz_2_byte_cmps_access ; Probe #57. |
101 PUBLIC asan_check_repz_1_byte_cmps_access ; Probe #58. | 101 PUBLIC asan_check_repz_1_byte_cmps_access ; Probe #58. |
102 PUBLIC asan_check_4_byte_cmps_access ; Probe #59. | 102 PUBLIC asan_check_4_byte_cmps_access ; Probe #59. |
103 PUBLIC asan_check_2_byte_cmps_access ; Probe #60. | 103 PUBLIC asan_check_2_byte_cmps_access ; Probe #60. |
104 PUBLIC asan_check_1_byte_cmps_access ; Probe #61. | 104 PUBLIC asan_check_1_byte_cmps_access ; Probe #61. |
105 PUBLIC asan_check_repz_4_byte_movs_access ; Probe #62. | 105 PUBLIC asan_check_repz_4_byte_lods_access ; Probe #62. |
106 PUBLIC asan_check_repz_2_byte_movs_access ; Probe #63. | 106 PUBLIC asan_check_repz_2_byte_lods_access ; Probe #63. |
107 PUBLIC asan_check_repz_1_byte_movs_access ; Probe #64. | 107 PUBLIC asan_check_repz_1_byte_lods_access ; Probe #64. |
108 PUBLIC asan_check_4_byte_movs_access ; Probe #65. | 108 PUBLIC asan_check_4_byte_lods_access ; Probe #65. |
109 PUBLIC asan_check_2_byte_movs_access ; Probe #66. | 109 PUBLIC asan_check_2_byte_lods_access ; Probe #66. |
110 PUBLIC asan_check_1_byte_movs_access ; Probe #67. | 110 PUBLIC asan_check_1_byte_lods_access ; Probe #67. |
111 PUBLIC asan_check_repz_4_byte_stos_access ; Probe #68. | 111 PUBLIC asan_check_repz_4_byte_movs_access ; Probe #68. |
112 PUBLIC asan_check_repz_2_byte_stos_access ; Probe #69. | 112 PUBLIC asan_check_repz_2_byte_movs_access ; Probe #69. |
113 PUBLIC asan_check_repz_1_byte_stos_access ; Probe #70. | 113 PUBLIC asan_check_repz_1_byte_movs_access ; Probe #70. |
114 PUBLIC asan_check_4_byte_stos_access ; Probe #71. | 114 PUBLIC asan_check_4_byte_movs_access ; Probe #71. |
115 PUBLIC asan_check_2_byte_stos_access ; Probe #72. | 115 PUBLIC asan_check_2_byte_movs_access ; Probe #72. |
116 PUBLIC asan_check_1_byte_stos_access ; Probe #73. | 116 PUBLIC asan_check_1_byte_movs_access ; Probe #73. |
| 117 PUBLIC asan_check_repz_4_byte_stos_access ; Probe #74. |
| 118 PUBLIC asan_check_repz_2_byte_stos_access ; Probe #75. |
| 119 PUBLIC asan_check_repz_1_byte_stos_access ; Probe #76. |
| 120 PUBLIC asan_check_4_byte_stos_access ; Probe #77. |
| 121 PUBLIC asan_check_2_byte_stos_access ; Probe #78. |
| 122 PUBLIC asan_check_1_byte_stos_access ; Probe #79. |
117 | 123 |
118 ; Create a new text segment to house the memory interceptors. | 124 ; Create a new text segment to house the memory interceptors. |
119 .probes SEGMENT PAGE PUBLIC READ EXECUTE 'CODE' | 125 .probes SEGMENT PAGE PUBLIC READ EXECUTE 'CODE' |
120 | 126 |
121 ; On entry, the address to check is in EDX and the previous contents of | 127 ; On entry, the address to check is in EDX and the previous contents of |
122 ; EDX are on stack. On exit the previous contents of EDX have been restored | 128 ; EDX are on stack. On exit the previous contents of EDX have been restored |
123 ; and popped off the stack. This function modifies no other registers, | 129 ; and popped off the stack. This function modifies no other registers, |
124 ; in particular it saves and restores EFLAGS. | 130 ; in particular it saves and restores EFLAGS. |
125 ALIGN 16 | 131 ALIGN 16 |
126 asan_no_check PROC | 132 asan_no_check PROC |
(...skipping 4116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4243 ; Call the generic check strings function. | 4249 ; Call the generic check strings function. |
4244 call asan_check_strings_memory_accesses | 4250 call asan_check_strings_memory_accesses |
4245 add esp, 36 | 4251 add esp, 36 |
4246 ; Epilogue, restore context. | 4252 ; Epilogue, restore context. |
4247 popad | 4253 popad |
4248 popfd | 4254 popfd |
4249 ret | 4255 ret |
4250 asan_check_1_byte_cmps_access ENDP | 4256 asan_check_1_byte_cmps_access ENDP |
4251 | 4257 |
4252 ALIGN 16 | 4258 ALIGN 16 |
4253 asan_check_repz_4_byte_movs_access PROC ; Probe #62. | 4259 asan_check_repz_4_byte_lods_access PROC ; Probe #62. |
4254 ; Prologue, save context. | 4260 ; Prologue, save context. |
4255 pushfd | 4261 pushfd |
4256 pushad | 4262 pushad |
4257 ; Fix the original value of ESP in the Asan registers context. | 4263 ; Fix the original value of ESP in the Asan registers context. |
4258 ; Removing 8 bytes (e.g.EFLAGS / EIP was on stack). | 4264 ; Removing 8 bytes (e.g.EFLAGS / EIP was on stack). |
4259 add DWORD PTR[esp + 12], 8 | 4265 add DWORD PTR[esp + 12], 8 |
4260 ; Setup increment in EBX (depends on direction flag in EFLAGS). | 4266 ; Setup increment in EBX (depends on direction flag in EFLAGS). |
4261 mov ebx, 4 | 4267 mov ebx, 4 |
4262 pushfd | 4268 pushfd |
4263 pop eax | 4269 pop eax |
4264 test eax, 400h | 4270 test eax, 400h |
4265 jz skip_neg_direction_62 | 4271 jz skip_neg_direction_62 |
4266 neg ebx | 4272 neg ebx |
4267 skip_neg_direction_62 LABEL NEAR | 4273 skip_neg_direction_62 LABEL NEAR |
4268 ; By standard calling convention, direction flag must be forward. | 4274 ; By standard calling convention, direction flag must be forward. |
4269 cld | 4275 cld |
4270 ; Push ARG(context), the Asan registers context. | 4276 ; Push ARG(context), the Asan registers context. |
4271 push esp | 4277 push esp |
4272 ; Push ARG(compare), shortcut when memory contents differ. | 4278 ; Push ARG(compare), shortcut when memory contents differ. |
4273 push 0 | 4279 push 1 |
4274 ; Push ARG(increment), increment for EDI/EDI. | 4280 ; Push ARG(increment), increment for EDI/EDI. |
4275 push ebx | 4281 push ebx |
| 4282 ; Push ARG(access_size), the access size. |
| 4283 push 4 |
| 4284 ; Push ARG(length), the number of memory accesses. |
| 4285 push ecx |
| 4286 ; Push ARG(src_access_mode), source access type. |
| 4287 push 0 |
| 4288 ; Push ARG(src), the source pointer. |
| 4289 push esi |
| 4290 ; Push ARG(dst_access_mode), destination access type. |
| 4291 push 0 |
| 4292 ; Push ARG(dst), the destination pointer. |
| 4293 push edi |
| 4294 ; Call the generic check strings function. |
| 4295 call asan_check_strings_memory_accesses |
| 4296 add esp, 36 |
| 4297 ; Epilogue, restore context. |
| 4298 popad |
| 4299 popfd |
| 4300 ret |
| 4301 asan_check_repz_4_byte_lods_access ENDP |
| 4302 |
| 4303 ALIGN 16 |
| 4304 asan_check_repz_2_byte_lods_access PROC ; Probe #63. |
| 4305 ; Prologue, save context. |
| 4306 pushfd |
| 4307 pushad |
| 4308 ; Fix the original value of ESP in the Asan registers context. |
| 4309 ; Removing 8 bytes (e.g.EFLAGS / EIP was on stack). |
| 4310 add DWORD PTR[esp + 12], 8 |
| 4311 ; Setup increment in EBX (depends on direction flag in EFLAGS). |
| 4312 mov ebx, 2 |
| 4313 pushfd |
| 4314 pop eax |
| 4315 test eax, 400h |
| 4316 jz skip_neg_direction_63 |
| 4317 neg ebx |
| 4318 skip_neg_direction_63 LABEL NEAR |
| 4319 ; By standard calling convention, direction flag must be forward. |
| 4320 cld |
| 4321 ; Push ARG(context), the Asan registers context. |
| 4322 push esp |
| 4323 ; Push ARG(compare), shortcut when memory contents differ. |
| 4324 push 1 |
| 4325 ; Push ARG(increment), increment for EDI/EDI. |
| 4326 push ebx |
| 4327 ; Push ARG(access_size), the access size. |
| 4328 push 2 |
| 4329 ; Push ARG(length), the number of memory accesses. |
| 4330 push ecx |
| 4331 ; Push ARG(src_access_mode), source access type. |
| 4332 push 0 |
| 4333 ; Push ARG(src), the source pointer. |
| 4334 push esi |
| 4335 ; Push ARG(dst_access_mode), destination access type. |
| 4336 push 0 |
| 4337 ; Push ARG(dst), the destination pointer. |
| 4338 push edi |
| 4339 ; Call the generic check strings function. |
| 4340 call asan_check_strings_memory_accesses |
| 4341 add esp, 36 |
| 4342 ; Epilogue, restore context. |
| 4343 popad |
| 4344 popfd |
| 4345 ret |
| 4346 asan_check_repz_2_byte_lods_access ENDP |
| 4347 |
| 4348 ALIGN 16 |
| 4349 asan_check_repz_1_byte_lods_access PROC ; Probe #64. |
| 4350 ; Prologue, save context. |
| 4351 pushfd |
| 4352 pushad |
| 4353 ; Fix the original value of ESP in the Asan registers context. |
| 4354 ; Removing 8 bytes (e.g.EFLAGS / EIP was on stack). |
| 4355 add DWORD PTR[esp + 12], 8 |
| 4356 ; Setup increment in EBX (depends on direction flag in EFLAGS). |
| 4357 mov ebx, 1 |
| 4358 pushfd |
| 4359 pop eax |
| 4360 test eax, 400h |
| 4361 jz skip_neg_direction_64 |
| 4362 neg ebx |
| 4363 skip_neg_direction_64 LABEL NEAR |
| 4364 ; By standard calling convention, direction flag must be forward. |
| 4365 cld |
| 4366 ; Push ARG(context), the Asan registers context. |
| 4367 push esp |
| 4368 ; Push ARG(compare), shortcut when memory contents differ. |
| 4369 push 1 |
| 4370 ; Push ARG(increment), increment for EDI/EDI. |
| 4371 push ebx |
| 4372 ; Push ARG(access_size), the access size. |
| 4373 push 1 |
| 4374 ; Push ARG(length), the number of memory accesses. |
| 4375 push ecx |
| 4376 ; Push ARG(src_access_mode), source access type. |
| 4377 push 0 |
| 4378 ; Push ARG(src), the source pointer. |
| 4379 push esi |
| 4380 ; Push ARG(dst_access_mode), destination access type. |
| 4381 push 0 |
| 4382 ; Push ARG(dst), the destination pointer. |
| 4383 push edi |
| 4384 ; Call the generic check strings function. |
| 4385 call asan_check_strings_memory_accesses |
| 4386 add esp, 36 |
| 4387 ; Epilogue, restore context. |
| 4388 popad |
| 4389 popfd |
| 4390 ret |
| 4391 asan_check_repz_1_byte_lods_access ENDP |
| 4392 |
| 4393 ALIGN 16 |
| 4394 asan_check_4_byte_lods_access PROC ; Probe #65. |
| 4395 ; Prologue, save context. |
| 4396 pushfd |
| 4397 pushad |
| 4398 ; Fix the original value of ESP in the Asan registers context. |
| 4399 ; Removing 8 bytes (e.g.EFLAGS / EIP was on stack). |
| 4400 add DWORD PTR[esp + 12], 8 |
| 4401 ; Setup increment in EBX (depends on direction flag in EFLAGS). |
| 4402 mov ebx, 4 |
| 4403 pushfd |
| 4404 pop eax |
| 4405 test eax, 400h |
| 4406 jz skip_neg_direction_65 |
| 4407 neg ebx |
| 4408 skip_neg_direction_65 LABEL NEAR |
| 4409 ; By standard calling convention, direction flag must be forward. |
| 4410 cld |
| 4411 ; Push ARG(context), the Asan registers context. |
| 4412 push esp |
| 4413 ; Push ARG(compare), shortcut when memory contents differ. |
| 4414 push 1 |
| 4415 ; Push ARG(increment), increment for EDI/EDI. |
| 4416 push ebx |
| 4417 ; Push ARG(access_size), the access size. |
| 4418 push 4 |
| 4419 ; Push ARG(length), the number of memory accesses. |
| 4420 push 1 |
| 4421 ; Push ARG(src_access_mode), source access type. |
| 4422 push 0 |
| 4423 ; Push ARG(src), the source pointer. |
| 4424 push esi |
| 4425 ; Push ARG(dst_access_mode), destination access type. |
| 4426 push 0 |
| 4427 ; Push ARG(dst), the destination pointer. |
| 4428 push edi |
| 4429 ; Call the generic check strings function. |
| 4430 call asan_check_strings_memory_accesses |
| 4431 add esp, 36 |
| 4432 ; Epilogue, restore context. |
| 4433 popad |
| 4434 popfd |
| 4435 ret |
| 4436 asan_check_4_byte_lods_access ENDP |
| 4437 |
| 4438 ALIGN 16 |
| 4439 asan_check_2_byte_lods_access PROC ; Probe #66. |
| 4440 ; Prologue, save context. |
| 4441 pushfd |
| 4442 pushad |
| 4443 ; Fix the original value of ESP in the Asan registers context. |
| 4444 ; Removing 8 bytes (e.g.EFLAGS / EIP was on stack). |
| 4445 add DWORD PTR[esp + 12], 8 |
| 4446 ; Setup increment in EBX (depends on direction flag in EFLAGS). |
| 4447 mov ebx, 2 |
| 4448 pushfd |
| 4449 pop eax |
| 4450 test eax, 400h |
| 4451 jz skip_neg_direction_66 |
| 4452 neg ebx |
| 4453 skip_neg_direction_66 LABEL NEAR |
| 4454 ; By standard calling convention, direction flag must be forward. |
| 4455 cld |
| 4456 ; Push ARG(context), the Asan registers context. |
| 4457 push esp |
| 4458 ; Push ARG(compare), shortcut when memory contents differ. |
| 4459 push 1 |
| 4460 ; Push ARG(increment), increment for EDI/EDI. |
| 4461 push ebx |
| 4462 ; Push ARG(access_size), the access size. |
| 4463 push 2 |
| 4464 ; Push ARG(length), the number of memory accesses. |
| 4465 push 1 |
| 4466 ; Push ARG(src_access_mode), source access type. |
| 4467 push 0 |
| 4468 ; Push ARG(src), the source pointer. |
| 4469 push esi |
| 4470 ; Push ARG(dst_access_mode), destination access type. |
| 4471 push 0 |
| 4472 ; Push ARG(dst), the destination pointer. |
| 4473 push edi |
| 4474 ; Call the generic check strings function. |
| 4475 call asan_check_strings_memory_accesses |
| 4476 add esp, 36 |
| 4477 ; Epilogue, restore context. |
| 4478 popad |
| 4479 popfd |
| 4480 ret |
| 4481 asan_check_2_byte_lods_access ENDP |
| 4482 |
| 4483 ALIGN 16 |
| 4484 asan_check_1_byte_lods_access PROC ; Probe #67. |
| 4485 ; Prologue, save context. |
| 4486 pushfd |
| 4487 pushad |
| 4488 ; Fix the original value of ESP in the Asan registers context. |
| 4489 ; Removing 8 bytes (e.g.EFLAGS / EIP was on stack). |
| 4490 add DWORD PTR[esp + 12], 8 |
| 4491 ; Setup increment in EBX (depends on direction flag in EFLAGS). |
| 4492 mov ebx, 1 |
| 4493 pushfd |
| 4494 pop eax |
| 4495 test eax, 400h |
| 4496 jz skip_neg_direction_67 |
| 4497 neg ebx |
| 4498 skip_neg_direction_67 LABEL NEAR |
| 4499 ; By standard calling convention, direction flag must be forward. |
| 4500 cld |
| 4501 ; Push ARG(context), the Asan registers context. |
| 4502 push esp |
| 4503 ; Push ARG(compare), shortcut when memory contents differ. |
| 4504 push 1 |
| 4505 ; Push ARG(increment), increment for EDI/EDI. |
| 4506 push ebx |
| 4507 ; Push ARG(access_size), the access size. |
| 4508 push 1 |
| 4509 ; Push ARG(length), the number of memory accesses. |
| 4510 push 1 |
| 4511 ; Push ARG(src_access_mode), source access type. |
| 4512 push 0 |
| 4513 ; Push ARG(src), the source pointer. |
| 4514 push esi |
| 4515 ; Push ARG(dst_access_mode), destination access type. |
| 4516 push 0 |
| 4517 ; Push ARG(dst), the destination pointer. |
| 4518 push edi |
| 4519 ; Call the generic check strings function. |
| 4520 call asan_check_strings_memory_accesses |
| 4521 add esp, 36 |
| 4522 ; Epilogue, restore context. |
| 4523 popad |
| 4524 popfd |
| 4525 ret |
| 4526 asan_check_1_byte_lods_access ENDP |
| 4527 |
| 4528 ALIGN 16 |
| 4529 asan_check_repz_4_byte_movs_access PROC ; Probe #68. |
| 4530 ; Prologue, save context. |
| 4531 pushfd |
| 4532 pushad |
| 4533 ; Fix the original value of ESP in the Asan registers context. |
| 4534 ; Removing 8 bytes (e.g.EFLAGS / EIP was on stack). |
| 4535 add DWORD PTR[esp + 12], 8 |
| 4536 ; Setup increment in EBX (depends on direction flag in EFLAGS). |
| 4537 mov ebx, 4 |
| 4538 pushfd |
| 4539 pop eax |
| 4540 test eax, 400h |
| 4541 jz skip_neg_direction_68 |
| 4542 neg ebx |
| 4543 skip_neg_direction_68 LABEL NEAR |
| 4544 ; By standard calling convention, direction flag must be forward. |
| 4545 cld |
| 4546 ; Push ARG(context), the Asan registers context. |
| 4547 push esp |
| 4548 ; Push ARG(compare), shortcut when memory contents differ. |
| 4549 push 0 |
| 4550 ; Push ARG(increment), increment for EDI/EDI. |
| 4551 push ebx |
4276 ; Push ARG(access_size), the access size. | 4552 ; Push ARG(access_size), the access size. |
4277 push 4 | 4553 push 4 |
4278 ; Push ARG(length), the number of memory accesses. | 4554 ; Push ARG(length), the number of memory accesses. |
4279 push ecx | 4555 push ecx |
4280 ; Push ARG(src_access_mode), source access type. | 4556 ; Push ARG(src_access_mode), source access type. |
4281 push 0 | 4557 push 0 |
4282 ; Push ARG(src), the source pointer. | 4558 ; Push ARG(src), the source pointer. |
4283 push esi | 4559 push esi |
4284 ; Push ARG(dst_access_mode), destination access type. | 4560 ; Push ARG(dst_access_mode), destination access type. |
4285 push 1 | 4561 push 1 |
4286 ; Push ARG(dst), the destination pointer. | 4562 ; Push ARG(dst), the destination pointer. |
4287 push edi | 4563 push edi |
4288 ; Call the generic check strings function. | 4564 ; Call the generic check strings function. |
4289 call asan_check_strings_memory_accesses | 4565 call asan_check_strings_memory_accesses |
4290 add esp, 36 | 4566 add esp, 36 |
4291 ; Epilogue, restore context. | 4567 ; Epilogue, restore context. |
4292 popad | 4568 popad |
4293 popfd | 4569 popfd |
4294 ret | 4570 ret |
4295 asan_check_repz_4_byte_movs_access ENDP | 4571 asan_check_repz_4_byte_movs_access ENDP |
4296 | 4572 |
4297 ALIGN 16 | 4573 ALIGN 16 |
4298 asan_check_repz_2_byte_movs_access PROC ; Probe #63. | 4574 asan_check_repz_2_byte_movs_access PROC ; Probe #69. |
4299 ; Prologue, save context. | 4575 ; Prologue, save context. |
4300 pushfd | 4576 pushfd |
4301 pushad | 4577 pushad |
4302 ; Fix the original value of ESP in the Asan registers context. | 4578 ; Fix the original value of ESP in the Asan registers context. |
4303 ; Removing 8 bytes (e.g.EFLAGS / EIP was on stack). | 4579 ; Removing 8 bytes (e.g.EFLAGS / EIP was on stack). |
4304 add DWORD PTR[esp + 12], 8 | 4580 add DWORD PTR[esp + 12], 8 |
4305 ; Setup increment in EBX (depends on direction flag in EFLAGS). | 4581 ; Setup increment in EBX (depends on direction flag in EFLAGS). |
4306 mov ebx, 2 | 4582 mov ebx, 2 |
4307 pushfd | 4583 pushfd |
4308 pop eax | 4584 pop eax |
4309 test eax, 400h | 4585 test eax, 400h |
4310 jz skip_neg_direction_63 | 4586 jz skip_neg_direction_69 |
4311 neg ebx | 4587 neg ebx |
4312 skip_neg_direction_63 LABEL NEAR | 4588 skip_neg_direction_69 LABEL NEAR |
4313 ; By standard calling convention, direction flag must be forward. | 4589 ; By standard calling convention, direction flag must be forward. |
4314 cld | 4590 cld |
4315 ; Push ARG(context), the Asan registers context. | 4591 ; Push ARG(context), the Asan registers context. |
4316 push esp | 4592 push esp |
4317 ; Push ARG(compare), shortcut when memory contents differ. | 4593 ; Push ARG(compare), shortcut when memory contents differ. |
4318 push 0 | 4594 push 0 |
4319 ; Push ARG(increment), increment for EDI/EDI. | 4595 ; Push ARG(increment), increment for EDI/EDI. |
4320 push ebx | 4596 push ebx |
4321 ; Push ARG(access_size), the access size. | 4597 ; Push ARG(access_size), the access size. |
4322 push 2 | 4598 push 2 |
(...skipping 10 matching lines...) Expand all Loading... |
4333 ; Call the generic check strings function. | 4609 ; Call the generic check strings function. |
4334 call asan_check_strings_memory_accesses | 4610 call asan_check_strings_memory_accesses |
4335 add esp, 36 | 4611 add esp, 36 |
4336 ; Epilogue, restore context. | 4612 ; Epilogue, restore context. |
4337 popad | 4613 popad |
4338 popfd | 4614 popfd |
4339 ret | 4615 ret |
4340 asan_check_repz_2_byte_movs_access ENDP | 4616 asan_check_repz_2_byte_movs_access ENDP |
4341 | 4617 |
4342 ALIGN 16 | 4618 ALIGN 16 |
4343 asan_check_repz_1_byte_movs_access PROC ; Probe #64. | 4619 asan_check_repz_1_byte_movs_access PROC ; Probe #70. |
4344 ; Prologue, save context. | 4620 ; Prologue, save context. |
4345 pushfd | 4621 pushfd |
4346 pushad | 4622 pushad |
4347 ; Fix the original value of ESP in the Asan registers context. | 4623 ; Fix the original value of ESP in the Asan registers context. |
4348 ; Removing 8 bytes (e.g.EFLAGS / EIP was on stack). | 4624 ; Removing 8 bytes (e.g.EFLAGS / EIP was on stack). |
4349 add DWORD PTR[esp + 12], 8 | 4625 add DWORD PTR[esp + 12], 8 |
4350 ; Setup increment in EBX (depends on direction flag in EFLAGS). | 4626 ; Setup increment in EBX (depends on direction flag in EFLAGS). |
4351 mov ebx, 1 | 4627 mov ebx, 1 |
4352 pushfd | 4628 pushfd |
4353 pop eax | 4629 pop eax |
4354 test eax, 400h | 4630 test eax, 400h |
4355 jz skip_neg_direction_64 | 4631 jz skip_neg_direction_70 |
4356 neg ebx | 4632 neg ebx |
4357 skip_neg_direction_64 LABEL NEAR | 4633 skip_neg_direction_70 LABEL NEAR |
4358 ; By standard calling convention, direction flag must be forward. | 4634 ; By standard calling convention, direction flag must be forward. |
4359 cld | 4635 cld |
4360 ; Push ARG(context), the Asan registers context. | 4636 ; Push ARG(context), the Asan registers context. |
4361 push esp | 4637 push esp |
4362 ; Push ARG(compare), shortcut when memory contents differ. | 4638 ; Push ARG(compare), shortcut when memory contents differ. |
4363 push 0 | 4639 push 0 |
4364 ; Push ARG(increment), increment for EDI/EDI. | 4640 ; Push ARG(increment), increment for EDI/EDI. |
4365 push ebx | 4641 push ebx |
4366 ; Push ARG(access_size), the access size. | 4642 ; Push ARG(access_size), the access size. |
4367 push 1 | 4643 push 1 |
(...skipping 10 matching lines...) Expand all Loading... |
4378 ; Call the generic check strings function. | 4654 ; Call the generic check strings function. |
4379 call asan_check_strings_memory_accesses | 4655 call asan_check_strings_memory_accesses |
4380 add esp, 36 | 4656 add esp, 36 |
4381 ; Epilogue, restore context. | 4657 ; Epilogue, restore context. |
4382 popad | 4658 popad |
4383 popfd | 4659 popfd |
4384 ret | 4660 ret |
4385 asan_check_repz_1_byte_movs_access ENDP | 4661 asan_check_repz_1_byte_movs_access ENDP |
4386 | 4662 |
4387 ALIGN 16 | 4663 ALIGN 16 |
4388 asan_check_4_byte_movs_access PROC ; Probe #65. | 4664 asan_check_4_byte_movs_access PROC ; Probe #71. |
4389 ; Prologue, save context. | 4665 ; Prologue, save context. |
4390 pushfd | 4666 pushfd |
4391 pushad | 4667 pushad |
4392 ; Fix the original value of ESP in the Asan registers context. | 4668 ; Fix the original value of ESP in the Asan registers context. |
4393 ; Removing 8 bytes (e.g.EFLAGS / EIP was on stack). | 4669 ; Removing 8 bytes (e.g.EFLAGS / EIP was on stack). |
4394 add DWORD PTR[esp + 12], 8 | 4670 add DWORD PTR[esp + 12], 8 |
4395 ; Setup increment in EBX (depends on direction flag in EFLAGS). | 4671 ; Setup increment in EBX (depends on direction flag in EFLAGS). |
4396 mov ebx, 4 | 4672 mov ebx, 4 |
4397 pushfd | 4673 pushfd |
4398 pop eax | 4674 pop eax |
4399 test eax, 400h | 4675 test eax, 400h |
4400 jz skip_neg_direction_65 | 4676 jz skip_neg_direction_71 |
4401 neg ebx | 4677 neg ebx |
4402 skip_neg_direction_65 LABEL NEAR | 4678 skip_neg_direction_71 LABEL NEAR |
4403 ; By standard calling convention, direction flag must be forward. | 4679 ; By standard calling convention, direction flag must be forward. |
4404 cld | 4680 cld |
4405 ; Push ARG(context), the Asan registers context. | 4681 ; Push ARG(context), the Asan registers context. |
4406 push esp | 4682 push esp |
4407 ; Push ARG(compare), shortcut when memory contents differ. | 4683 ; Push ARG(compare), shortcut when memory contents differ. |
4408 push 0 | 4684 push 0 |
4409 ; Push ARG(increment), increment for EDI/EDI. | 4685 ; Push ARG(increment), increment for EDI/EDI. |
4410 push ebx | 4686 push ebx |
4411 ; Push ARG(access_size), the access size. | 4687 ; Push ARG(access_size), the access size. |
4412 push 4 | 4688 push 4 |
(...skipping 10 matching lines...) Expand all Loading... |
4423 ; Call the generic check strings function. | 4699 ; Call the generic check strings function. |
4424 call asan_check_strings_memory_accesses | 4700 call asan_check_strings_memory_accesses |
4425 add esp, 36 | 4701 add esp, 36 |
4426 ; Epilogue, restore context. | 4702 ; Epilogue, restore context. |
4427 popad | 4703 popad |
4428 popfd | 4704 popfd |
4429 ret | 4705 ret |
4430 asan_check_4_byte_movs_access ENDP | 4706 asan_check_4_byte_movs_access ENDP |
4431 | 4707 |
4432 ALIGN 16 | 4708 ALIGN 16 |
4433 asan_check_2_byte_movs_access PROC ; Probe #66. | 4709 asan_check_2_byte_movs_access PROC ; Probe #72. |
4434 ; Prologue, save context. | 4710 ; Prologue, save context. |
4435 pushfd | 4711 pushfd |
4436 pushad | 4712 pushad |
4437 ; Fix the original value of ESP in the Asan registers context. | 4713 ; Fix the original value of ESP in the Asan registers context. |
4438 ; Removing 8 bytes (e.g.EFLAGS / EIP was on stack). | 4714 ; Removing 8 bytes (e.g.EFLAGS / EIP was on stack). |
4439 add DWORD PTR[esp + 12], 8 | 4715 add DWORD PTR[esp + 12], 8 |
4440 ; Setup increment in EBX (depends on direction flag in EFLAGS). | 4716 ; Setup increment in EBX (depends on direction flag in EFLAGS). |
4441 mov ebx, 2 | 4717 mov ebx, 2 |
4442 pushfd | 4718 pushfd |
4443 pop eax | 4719 pop eax |
4444 test eax, 400h | 4720 test eax, 400h |
4445 jz skip_neg_direction_66 | 4721 jz skip_neg_direction_72 |
4446 neg ebx | 4722 neg ebx |
4447 skip_neg_direction_66 LABEL NEAR | 4723 skip_neg_direction_72 LABEL NEAR |
4448 ; By standard calling convention, direction flag must be forward. | 4724 ; By standard calling convention, direction flag must be forward. |
4449 cld | 4725 cld |
4450 ; Push ARG(context), the Asan registers context. | 4726 ; Push ARG(context), the Asan registers context. |
4451 push esp | 4727 push esp |
4452 ; Push ARG(compare), shortcut when memory contents differ. | 4728 ; Push ARG(compare), shortcut when memory contents differ. |
4453 push 0 | 4729 push 0 |
4454 ; Push ARG(increment), increment for EDI/EDI. | 4730 ; Push ARG(increment), increment for EDI/EDI. |
4455 push ebx | 4731 push ebx |
4456 ; Push ARG(access_size), the access size. | 4732 ; Push ARG(access_size), the access size. |
4457 push 2 | 4733 push 2 |
(...skipping 10 matching lines...) Expand all Loading... |
4468 ; Call the generic check strings function. | 4744 ; Call the generic check strings function. |
4469 call asan_check_strings_memory_accesses | 4745 call asan_check_strings_memory_accesses |
4470 add esp, 36 | 4746 add esp, 36 |
4471 ; Epilogue, restore context. | 4747 ; Epilogue, restore context. |
4472 popad | 4748 popad |
4473 popfd | 4749 popfd |
4474 ret | 4750 ret |
4475 asan_check_2_byte_movs_access ENDP | 4751 asan_check_2_byte_movs_access ENDP |
4476 | 4752 |
4477 ALIGN 16 | 4753 ALIGN 16 |
4478 asan_check_1_byte_movs_access PROC ; Probe #67. | 4754 asan_check_1_byte_movs_access PROC ; Probe #73. |
4479 ; Prologue, save context. | 4755 ; Prologue, save context. |
4480 pushfd | 4756 pushfd |
4481 pushad | 4757 pushad |
4482 ; Fix the original value of ESP in the Asan registers context. | 4758 ; Fix the original value of ESP in the Asan registers context. |
4483 ; Removing 8 bytes (e.g.EFLAGS / EIP was on stack). | 4759 ; Removing 8 bytes (e.g.EFLAGS / EIP was on stack). |
4484 add DWORD PTR[esp + 12], 8 | 4760 add DWORD PTR[esp + 12], 8 |
4485 ; Setup increment in EBX (depends on direction flag in EFLAGS). | 4761 ; Setup increment in EBX (depends on direction flag in EFLAGS). |
4486 mov ebx, 1 | 4762 mov ebx, 1 |
4487 pushfd | 4763 pushfd |
4488 pop eax | 4764 pop eax |
4489 test eax, 400h | 4765 test eax, 400h |
4490 jz skip_neg_direction_67 | 4766 jz skip_neg_direction_73 |
4491 neg ebx | 4767 neg ebx |
4492 skip_neg_direction_67 LABEL NEAR | 4768 skip_neg_direction_73 LABEL NEAR |
4493 ; By standard calling convention, direction flag must be forward. | 4769 ; By standard calling convention, direction flag must be forward. |
4494 cld | 4770 cld |
4495 ; Push ARG(context), the Asan registers context. | 4771 ; Push ARG(context), the Asan registers context. |
4496 push esp | 4772 push esp |
4497 ; Push ARG(compare), shortcut when memory contents differ. | 4773 ; Push ARG(compare), shortcut when memory contents differ. |
4498 push 0 | 4774 push 0 |
4499 ; Push ARG(increment), increment for EDI/EDI. | 4775 ; Push ARG(increment), increment for EDI/EDI. |
4500 push ebx | 4776 push ebx |
4501 ; Push ARG(access_size), the access size. | 4777 ; Push ARG(access_size), the access size. |
4502 push 1 | 4778 push 1 |
(...skipping 10 matching lines...) Expand all Loading... |
4513 ; Call the generic check strings function. | 4789 ; Call the generic check strings function. |
4514 call asan_check_strings_memory_accesses | 4790 call asan_check_strings_memory_accesses |
4515 add esp, 36 | 4791 add esp, 36 |
4516 ; Epilogue, restore context. | 4792 ; Epilogue, restore context. |
4517 popad | 4793 popad |
4518 popfd | 4794 popfd |
4519 ret | 4795 ret |
4520 asan_check_1_byte_movs_access ENDP | 4796 asan_check_1_byte_movs_access ENDP |
4521 | 4797 |
4522 ALIGN 16 | 4798 ALIGN 16 |
4523 asan_check_repz_4_byte_stos_access PROC ; Probe #68. | 4799 asan_check_repz_4_byte_stos_access PROC ; Probe #74. |
4524 ; Prologue, save context. | 4800 ; Prologue, save context. |
4525 pushfd | 4801 pushfd |
4526 pushad | 4802 pushad |
4527 ; Fix the original value of ESP in the Asan registers context. | 4803 ; Fix the original value of ESP in the Asan registers context. |
4528 ; Removing 8 bytes (e.g.EFLAGS / EIP was on stack). | 4804 ; Removing 8 bytes (e.g.EFLAGS / EIP was on stack). |
4529 add DWORD PTR[esp + 12], 8 | 4805 add DWORD PTR[esp + 12], 8 |
4530 ; Setup increment in EBX (depends on direction flag in EFLAGS). | 4806 ; Setup increment in EBX (depends on direction flag in EFLAGS). |
4531 mov ebx, 4 | 4807 mov ebx, 4 |
4532 pushfd | 4808 pushfd |
4533 pop eax | 4809 pop eax |
4534 test eax, 400h | 4810 test eax, 400h |
4535 jz skip_neg_direction_68 | 4811 jz skip_neg_direction_74 |
4536 neg ebx | 4812 neg ebx |
4537 skip_neg_direction_68 LABEL NEAR | 4813 skip_neg_direction_74 LABEL NEAR |
4538 ; By standard calling convention, direction flag must be forward. | 4814 ; By standard calling convention, direction flag must be forward. |
4539 cld | 4815 cld |
4540 ; Push ARG(context), the Asan registers context. | 4816 ; Push ARG(context), the Asan registers context. |
4541 push esp | 4817 push esp |
4542 ; Push ARG(compare), shortcut when memory contents differ. | 4818 ; Push ARG(compare), shortcut when memory contents differ. |
4543 push 0 | 4819 push 0 |
4544 ; Push ARG(increment), increment for EDI/EDI. | 4820 ; Push ARG(increment), increment for EDI/EDI. |
4545 push ebx | 4821 push ebx |
4546 ; Push ARG(access_size), the access size. | 4822 ; Push ARG(access_size), the access size. |
4547 push 4 | 4823 push 4 |
(...skipping 10 matching lines...) Expand all Loading... |
4558 ; Call the generic check strings function. | 4834 ; Call the generic check strings function. |
4559 call asan_check_strings_memory_accesses | 4835 call asan_check_strings_memory_accesses |
4560 add esp, 36 | 4836 add esp, 36 |
4561 ; Epilogue, restore context. | 4837 ; Epilogue, restore context. |
4562 popad | 4838 popad |
4563 popfd | 4839 popfd |
4564 ret | 4840 ret |
4565 asan_check_repz_4_byte_stos_access ENDP | 4841 asan_check_repz_4_byte_stos_access ENDP |
4566 | 4842 |
4567 ALIGN 16 | 4843 ALIGN 16 |
4568 asan_check_repz_2_byte_stos_access PROC ; Probe #69. | 4844 asan_check_repz_2_byte_stos_access PROC ; Probe #75. |
4569 ; Prologue, save context. | 4845 ; Prologue, save context. |
4570 pushfd | 4846 pushfd |
4571 pushad | 4847 pushad |
4572 ; Fix the original value of ESP in the Asan registers context. | 4848 ; Fix the original value of ESP in the Asan registers context. |
4573 ; Removing 8 bytes (e.g.EFLAGS / EIP was on stack). | 4849 ; Removing 8 bytes (e.g.EFLAGS / EIP was on stack). |
4574 add DWORD PTR[esp + 12], 8 | 4850 add DWORD PTR[esp + 12], 8 |
4575 ; Setup increment in EBX (depends on direction flag in EFLAGS). | 4851 ; Setup increment in EBX (depends on direction flag in EFLAGS). |
4576 mov ebx, 2 | 4852 mov ebx, 2 |
4577 pushfd | 4853 pushfd |
4578 pop eax | 4854 pop eax |
4579 test eax, 400h | 4855 test eax, 400h |
4580 jz skip_neg_direction_69 | 4856 jz skip_neg_direction_75 |
4581 neg ebx | 4857 neg ebx |
4582 skip_neg_direction_69 LABEL NEAR | 4858 skip_neg_direction_75 LABEL NEAR |
4583 ; By standard calling convention, direction flag must be forward. | 4859 ; By standard calling convention, direction flag must be forward. |
4584 cld | 4860 cld |
4585 ; Push ARG(context), the Asan registers context. | 4861 ; Push ARG(context), the Asan registers context. |
4586 push esp | 4862 push esp |
4587 ; Push ARG(compare), shortcut when memory contents differ. | 4863 ; Push ARG(compare), shortcut when memory contents differ. |
4588 push 0 | 4864 push 0 |
4589 ; Push ARG(increment), increment for EDI/EDI. | 4865 ; Push ARG(increment), increment for EDI/EDI. |
4590 push ebx | 4866 push ebx |
4591 ; Push ARG(access_size), the access size. | 4867 ; Push ARG(access_size), the access size. |
4592 push 2 | 4868 push 2 |
(...skipping 10 matching lines...) Expand all Loading... |
4603 ; Call the generic check strings function. | 4879 ; Call the generic check strings function. |
4604 call asan_check_strings_memory_accesses | 4880 call asan_check_strings_memory_accesses |
4605 add esp, 36 | 4881 add esp, 36 |
4606 ; Epilogue, restore context. | 4882 ; Epilogue, restore context. |
4607 popad | 4883 popad |
4608 popfd | 4884 popfd |
4609 ret | 4885 ret |
4610 asan_check_repz_2_byte_stos_access ENDP | 4886 asan_check_repz_2_byte_stos_access ENDP |
4611 | 4887 |
4612 ALIGN 16 | 4888 ALIGN 16 |
4613 asan_check_repz_1_byte_stos_access PROC ; Probe #70. | 4889 asan_check_repz_1_byte_stos_access PROC ; Probe #76. |
4614 ; Prologue, save context. | 4890 ; Prologue, save context. |
4615 pushfd | 4891 pushfd |
4616 pushad | 4892 pushad |
4617 ; Fix the original value of ESP in the Asan registers context. | 4893 ; Fix the original value of ESP in the Asan registers context. |
4618 ; Removing 8 bytes (e.g.EFLAGS / EIP was on stack). | 4894 ; Removing 8 bytes (e.g.EFLAGS / EIP was on stack). |
4619 add DWORD PTR[esp + 12], 8 | 4895 add DWORD PTR[esp + 12], 8 |
4620 ; Setup increment in EBX (depends on direction flag in EFLAGS). | 4896 ; Setup increment in EBX (depends on direction flag in EFLAGS). |
4621 mov ebx, 1 | 4897 mov ebx, 1 |
4622 pushfd | 4898 pushfd |
4623 pop eax | 4899 pop eax |
4624 test eax, 400h | 4900 test eax, 400h |
4625 jz skip_neg_direction_70 | 4901 jz skip_neg_direction_76 |
4626 neg ebx | 4902 neg ebx |
4627 skip_neg_direction_70 LABEL NEAR | 4903 skip_neg_direction_76 LABEL NEAR |
4628 ; By standard calling convention, direction flag must be forward. | 4904 ; By standard calling convention, direction flag must be forward. |
4629 cld | 4905 cld |
4630 ; Push ARG(context), the Asan registers context. | 4906 ; Push ARG(context), the Asan registers context. |
4631 push esp | 4907 push esp |
4632 ; Push ARG(compare), shortcut when memory contents differ. | 4908 ; Push ARG(compare), shortcut when memory contents differ. |
4633 push 0 | 4909 push 0 |
4634 ; Push ARG(increment), increment for EDI/EDI. | 4910 ; Push ARG(increment), increment for EDI/EDI. |
4635 push ebx | 4911 push ebx |
4636 ; Push ARG(access_size), the access size. | 4912 ; Push ARG(access_size), the access size. |
4637 push 1 | 4913 push 1 |
(...skipping 10 matching lines...) Expand all Loading... |
4648 ; Call the generic check strings function. | 4924 ; Call the generic check strings function. |
4649 call asan_check_strings_memory_accesses | 4925 call asan_check_strings_memory_accesses |
4650 add esp, 36 | 4926 add esp, 36 |
4651 ; Epilogue, restore context. | 4927 ; Epilogue, restore context. |
4652 popad | 4928 popad |
4653 popfd | 4929 popfd |
4654 ret | 4930 ret |
4655 asan_check_repz_1_byte_stos_access ENDP | 4931 asan_check_repz_1_byte_stos_access ENDP |
4656 | 4932 |
4657 ALIGN 16 | 4933 ALIGN 16 |
4658 asan_check_4_byte_stos_access PROC ; Probe #71. | 4934 asan_check_4_byte_stos_access PROC ; Probe #77. |
4659 ; Prologue, save context. | 4935 ; Prologue, save context. |
4660 pushfd | 4936 pushfd |
4661 pushad | 4937 pushad |
4662 ; Fix the original value of ESP in the Asan registers context. | 4938 ; Fix the original value of ESP in the Asan registers context. |
4663 ; Removing 8 bytes (e.g.EFLAGS / EIP was on stack). | 4939 ; Removing 8 bytes (e.g.EFLAGS / EIP was on stack). |
4664 add DWORD PTR[esp + 12], 8 | 4940 add DWORD PTR[esp + 12], 8 |
4665 ; Setup increment in EBX (depends on direction flag in EFLAGS). | 4941 ; Setup increment in EBX (depends on direction flag in EFLAGS). |
4666 mov ebx, 4 | 4942 mov ebx, 4 |
4667 pushfd | 4943 pushfd |
4668 pop eax | 4944 pop eax |
4669 test eax, 400h | 4945 test eax, 400h |
4670 jz skip_neg_direction_71 | 4946 jz skip_neg_direction_77 |
4671 neg ebx | 4947 neg ebx |
4672 skip_neg_direction_71 LABEL NEAR | 4948 skip_neg_direction_77 LABEL NEAR |
4673 ; By standard calling convention, direction flag must be forward. | 4949 ; By standard calling convention, direction flag must be forward. |
4674 cld | 4950 cld |
4675 ; Push ARG(context), the Asan registers context. | 4951 ; Push ARG(context), the Asan registers context. |
4676 push esp | 4952 push esp |
4677 ; Push ARG(compare), shortcut when memory contents differ. | 4953 ; Push ARG(compare), shortcut when memory contents differ. |
4678 push 0 | 4954 push 0 |
4679 ; Push ARG(increment), increment for EDI/EDI. | 4955 ; Push ARG(increment), increment for EDI/EDI. |
4680 push ebx | 4956 push ebx |
4681 ; Push ARG(access_size), the access size. | 4957 ; Push ARG(access_size), the access size. |
4682 push 4 | 4958 push 4 |
(...skipping 10 matching lines...) Expand all Loading... |
4693 ; Call the generic check strings function. | 4969 ; Call the generic check strings function. |
4694 call asan_check_strings_memory_accesses | 4970 call asan_check_strings_memory_accesses |
4695 add esp, 36 | 4971 add esp, 36 |
4696 ; Epilogue, restore context. | 4972 ; Epilogue, restore context. |
4697 popad | 4973 popad |
4698 popfd | 4974 popfd |
4699 ret | 4975 ret |
4700 asan_check_4_byte_stos_access ENDP | 4976 asan_check_4_byte_stos_access ENDP |
4701 | 4977 |
4702 ALIGN 16 | 4978 ALIGN 16 |
4703 asan_check_2_byte_stos_access PROC ; Probe #72. | 4979 asan_check_2_byte_stos_access PROC ; Probe #78. |
4704 ; Prologue, save context. | 4980 ; Prologue, save context. |
4705 pushfd | 4981 pushfd |
4706 pushad | 4982 pushad |
4707 ; Fix the original value of ESP in the Asan registers context. | 4983 ; Fix the original value of ESP in the Asan registers context. |
4708 ; Removing 8 bytes (e.g.EFLAGS / EIP was on stack). | 4984 ; Removing 8 bytes (e.g.EFLAGS / EIP was on stack). |
4709 add DWORD PTR[esp + 12], 8 | 4985 add DWORD PTR[esp + 12], 8 |
4710 ; Setup increment in EBX (depends on direction flag in EFLAGS). | 4986 ; Setup increment in EBX (depends on direction flag in EFLAGS). |
4711 mov ebx, 2 | 4987 mov ebx, 2 |
4712 pushfd | 4988 pushfd |
4713 pop eax | 4989 pop eax |
4714 test eax, 400h | 4990 test eax, 400h |
4715 jz skip_neg_direction_72 | 4991 jz skip_neg_direction_78 |
4716 neg ebx | 4992 neg ebx |
4717 skip_neg_direction_72 LABEL NEAR | 4993 skip_neg_direction_78 LABEL NEAR |
4718 ; By standard calling convention, direction flag must be forward. | 4994 ; By standard calling convention, direction flag must be forward. |
4719 cld | 4995 cld |
4720 ; Push ARG(context), the Asan registers context. | 4996 ; Push ARG(context), the Asan registers context. |
4721 push esp | 4997 push esp |
4722 ; Push ARG(compare), shortcut when memory contents differ. | 4998 ; Push ARG(compare), shortcut when memory contents differ. |
4723 push 0 | 4999 push 0 |
4724 ; Push ARG(increment), increment for EDI/EDI. | 5000 ; Push ARG(increment), increment for EDI/EDI. |
4725 push ebx | 5001 push ebx |
4726 ; Push ARG(access_size), the access size. | 5002 ; Push ARG(access_size), the access size. |
4727 push 2 | 5003 push 2 |
(...skipping 10 matching lines...) Expand all Loading... |
4738 ; Call the generic check strings function. | 5014 ; Call the generic check strings function. |
4739 call asan_check_strings_memory_accesses | 5015 call asan_check_strings_memory_accesses |
4740 add esp, 36 | 5016 add esp, 36 |
4741 ; Epilogue, restore context. | 5017 ; Epilogue, restore context. |
4742 popad | 5018 popad |
4743 popfd | 5019 popfd |
4744 ret | 5020 ret |
4745 asan_check_2_byte_stos_access ENDP | 5021 asan_check_2_byte_stos_access ENDP |
4746 | 5022 |
4747 ALIGN 16 | 5023 ALIGN 16 |
4748 asan_check_1_byte_stos_access PROC ; Probe #73. | 5024 asan_check_1_byte_stos_access PROC ; Probe #79. |
4749 ; Prologue, save context. | 5025 ; Prologue, save context. |
4750 pushfd | 5026 pushfd |
4751 pushad | 5027 pushad |
4752 ; Fix the original value of ESP in the Asan registers context. | 5028 ; Fix the original value of ESP in the Asan registers context. |
4753 ; Removing 8 bytes (e.g.EFLAGS / EIP was on stack). | 5029 ; Removing 8 bytes (e.g.EFLAGS / EIP was on stack). |
4754 add DWORD PTR[esp + 12], 8 | 5030 add DWORD PTR[esp + 12], 8 |
4755 ; Setup increment in EBX (depends on direction flag in EFLAGS). | 5031 ; Setup increment in EBX (depends on direction flag in EFLAGS). |
4756 mov ebx, 1 | 5032 mov ebx, 1 |
4757 pushfd | 5033 pushfd |
4758 pop eax | 5034 pop eax |
4759 test eax, 400h | 5035 test eax, 400h |
4760 jz skip_neg_direction_73 | 5036 jz skip_neg_direction_79 |
4761 neg ebx | 5037 neg ebx |
4762 skip_neg_direction_73 LABEL NEAR | 5038 skip_neg_direction_79 LABEL NEAR |
4763 ; By standard calling convention, direction flag must be forward. | 5039 ; By standard calling convention, direction flag must be forward. |
4764 cld | 5040 cld |
4765 ; Push ARG(context), the Asan registers context. | 5041 ; Push ARG(context), the Asan registers context. |
4766 push esp | 5042 push esp |
4767 ; Push ARG(compare), shortcut when memory contents differ. | 5043 ; Push ARG(compare), shortcut when memory contents differ. |
4768 push 0 | 5044 push 0 |
4769 ; Push ARG(increment), increment for EDI/EDI. | 5045 ; Push ARG(increment), increment for EDI/EDI. |
4770 push ebx | 5046 push ebx |
4771 ; Push ARG(access_size), the access size. | 5047 ; Push ARG(access_size), the access size. |
4772 push 1 | 5048 push 1 |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4853 DWORD shadow_reference_51 - 4 | 5129 DWORD shadow_reference_51 - 4 |
4854 DWORD shadow_reference_52 - 4 | 5130 DWORD shadow_reference_52 - 4 |
4855 DWORD shadow_reference_53 - 4 | 5131 DWORD shadow_reference_53 - 4 |
4856 DWORD shadow_reference_54 - 4 | 5132 DWORD shadow_reference_54 - 4 |
4857 DWORD shadow_reference_55 - 4 | 5133 DWORD shadow_reference_55 - 4 |
4858 DWORD 0 | 5134 DWORD 0 |
4859 | 5135 |
4860 .rdata ENDS | 5136 .rdata ENDS |
4861 | 5137 |
4862 END | 5138 END |
OLD | NEW |