avva: (moose)
[personal profile] avva
Прикольно - оказывается, инструкция idiv, деление со знаком, на x86 кидает исключение не только при делении на ноль, но и когда результат не помещается в регистр. А этого очень легко добиться, написав в C например INT_MIN / -1. Как мы помним, INT_MIN по модулю на единицу больше, чем INT_MAX; например, в 32-битных числах INT_MIN равно -2147483648, а INT_MAX равно 2147483647. Поэтому когда INT_MIN делят на -1, положительный результат не вмещается в 32 бита.

Само по себе это не катастрофа - ну кидает исключение, ну и подумаешь. Дело в том, однако, что про деление на ноль все знают и помнят, и проверяют перед попыткой делить. А против INT_MIN/-1 никто практически не защищается. Поэтому можно, например:

- крэшнуть компилятор (правда, игрушечный), PostgreSQL (не игрушечную) или антивирус;
- подвесить Windows 8;
- убить bash

Date: 2013-01-30 05:27 am (UTC)
From: [identity profile] spamsink.livejournal.com
Про "внутри ядра" тоже никто не говорил.

Date: 2013-01-30 01:54 pm (UTC)
From: [identity profile] meshko.livejournal.com
Ну оно бы не упало, если бы это был userspace. И не случайно в качестве вектора выбран GDI call.

Date: 2013-01-31 04:02 am (UTC)
From: [identity profile] archaicos.livejournal.com
Выбор весьма не случайный. GDI старый, исторически дырявый, и в нём появились новые дыры с новым UI и новой функциональностью в Win8.

December 2025

S M T W T F S
  123 4 56
78 9 10 11 1213
1415 1617181920
21 22 23 24 2526 27
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Dec. 28th, 2025 04:21 pm
Powered by Dreamwidth Studios