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

Side by Side 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 unified diff | Download patch
« no previous file with comments | « syzygy/SYZYGY_VERSION ('k') | syzygy/agent/asan/gen/memory_redirectors.asm » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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
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
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
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
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
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
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
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
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
OLDNEW
« 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