- 001
- 002
- 003
- 004
- 005
- 006
- 007
- 008
- 009
- 010
- 011
- 012
- 013
- 014
- 015
- 016
- 017
- 018
- 019
- 020
- 021
- 022
- 023
- 024
- 025
- 026
- 027
- 028
- 029
- 030
- 031
- 032
- 033
- 034
- 035
- 036
- 037
- 038
- 039
- 040
- 041
- 042
- 043
- 044
- 045
- 046
- 047
- 048
- 049
- 050
- 051
- 052
- 053
- 054
- 055
- 056
- 057
- 058
- 059
- 060
- 061
- 062
- 063
- 064
- 065
- 066
- 067
- 068
- 069
- 070
- 071
- 072
- 073
- 074
- 075
- 076
- 077
- 078
- 079
- 080
- 081
- 082
- 083
- 084
- 085
- 086
- 087
- 088
- 089
- 090
- 091
- 092
- 093
- 094
- 095
- 096
- 097
- 098
- 099
- 100
Header:
#ifndef TETRIS_H
#define TETRIS_H
#include <cstdlib>
#include <GL/freeglut.h>
#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
#define _SCALE 20;
#define _HEIGHT 12;
#define _WIDTH 8;
#define _TICK 50;
#define _RIGHT 0
#define _RIGHT_KEY GLUT_KEY_RIGHT
#define _UP 1
#define _UP_KEY GLUT_KEY_UP
#define _LEFT 2
#define _LEFT_KEY GLUT_KEY_LEFT
#define _DOWN 3
#define _DOWN_KEY GLUT_KEY_DOWN
#endif
Сам файл:
#include "tetris.h"
using namespace std;
int width = _WIDTH;
int height = _HEIGHT;
int tick = _TICK;
int scale = _SCALE;
int direction = 0;
int width_prog = width * scale;
int height_prog = height * scale;
void Display();
void Tick()
{
}
void Keyboard(int key, int COORD_X, int COORD_Y)
{
}
void DrawField()
{
glColor3f(0.0, 1.0, 0.0);
glBegin(GL_LINES);
for (int i = 0; i <= width_prog; i =+ scale)
{
glVertex2f(i, 0);
glVertex2f(i, height_prog);
}
for (int j = 0; j <= height_prog; j =+ scale)
{
glVertex2f(0, j);
glVertex2f(width_prog, j);
}
glEnd();
}
void Timer(int = 0)
{
Display();
Tick();
glutTimerFunc(tick, Timer, 0);
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(width_prog, height_prog);
glutCreateWindow("Tetris");
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0, width_prog, 0, height_prog);
glutDisplayFunc(Display);
glutTimerFunc(tick, Timer, 0);
glutSpecialFunc(Keyboard);
glutMainLoop();
return 0;
}
void Display()
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0.0, 1.0, 0.0);
DrawField();
glEnd();
glFlush(); }
Решил значится сделать игрулю тетрис. Пишу значит программу. Дописал DrawField, решил посмотреть прорисовку сетки, тыкнул дабы скомпилить, а мне открывается окно, и выбивает нахер винду с ошибкой драйверов, второй раз так же. Может что не так?
Конечно же. GL же. С++ же
Короче - проще переписать по-иному, чем искать баг.
Ну или логи в руки и - анализ, что отвалилось > что пришло на вход > кто выдал некорректные данные > как его запросили > патч
Когда ты будешь проходить устройство многозадачных операционных систем, то узнаешь что userspace и kernelspace не имеют к "админу" никакого отношения.
Выполняемый на кольце 3 код всё равно не может спровоцировать синий экран, даже если он работает от админа.
Любые exceptions в таком коде могут спровоцировать завершение программы, WER, запуск дебагера (JIT Debugger) , но никак не BSOD
всё равно BSODа быть не должно
просто в очередной раз CreateProcess вернет ошибку
правда за долго до этого всё станет раком
Ну так дампы надо анализировать>
Например взять Windbg и там !analyze
По карайней мере с отключенным антивирусом какую-нибуть dll-ку подменить на хуиту.
Ты попробуй взломать пространство
Как ты мог не узнать? 😂
gdb -p 1
p exit(1)
Ещё на большинстве линуксов под рутом можно без проблем пихнуть неподписанный модуль, который будет методично заменять содержимое памяти ядра нулями.
а вот что бы ядро запускало там надо явно отключить driver singing check (параметр ядра)
http://cdn.makeuseof.com/wp-content/uploads/2013/09/install-unsigned-driver-anyway-on-windows-8.png?564cc6
на винде тоже можно грохнуть wininit.