-
Список говнокодов пользователя ISith
Всего: 4
-
+73.5
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
//...
}
}
}
if(found) break;
}
}
aStr=wcstok(NULL,m_cmdSEP);
}
}
}
}
}
}
else NoDeviceErrorActive(1);
}
}
}
else NoDeviceErrorActive(1);
}
}
}
}
}
//...
Кусочек функции, сегодня наткнулся, сама функция занимает 540 строк, все методы класса -- 8000 =). И форматирование оригинальное -- не табами, а двумя пробелами =) . Мне нужно было просто посмотреть, как этот класс одну штуку делает, и я теперь сижу счастливый и думаю, как хорошо, что не мне этот код поддерживать =)
ISith,
03 Марта 2010
-
+136.7
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
BOOLEAN
KiCheckForAtlThunk (
IN PEXCEPTION_RECORD ExceptionRecord,
IN PCONTEXT Context
)
/*++
Routine Description:
This routine will determine whether an access violation was raised due to
an attempt to execute an ATL thunk in a no-execute, non-stack area.
If so, the thunk will be emulated and execution resumed.
Arguments:
ExceptionRecord - Supplies a pointer to an exception record.
Context - Supplies a pointer to a context frame.
Return Value:
TRUE - Context was updated to reflect the emulated ATL thunk, resume
execution.
FALSE - Not an ATL thunk, continue raising the exception.
--*/
//.........
//KiDispatchException:
//......
switch (ExceptionRecord->ExceptionCode) {
case STATUS_BREAKPOINT:
ContextFrame.Eip--;
break;
case KI_EXCEPTION_ACCESS_VIOLATION:
ExceptionRecord->ExceptionCode = STATUS_ACCESS_VIOLATION;
if (PreviousMode == UserMode) {
if (KiCheckForAtlThunk(ExceptionRecord,&ContextFrame) != FALSE) {
goto Handled1;
}
//................
Объявление KiCheckForAtlThunk (втыкать в комменты и название =)) ) Для тех кто в танке: исходники Windows, оконные классы ATL выделяют тупо в хипе кусок-переходник, который заменяет HWND, идущий первым параметром в оконную процедуру, на естественный, объектно-ориентированный this. Так вот, если у нас установлено где-то в реестре юзать защиту от выполнения данных, то, естественно, в хипе хер чего выполнишь, и возникнет #GP, и тут-то нам и придет на помощь KiCheckForAtlThunk =) Короче, ИМХО, вносить изменения в ядро, для того, чтобы нормально работала криво написанная юзермодная библиотека -- та еще жесть =) Все кто минусует -- не шарят :P
ISith,
30 Января 2010
-
+70.8
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
lseek( h, headerSize+0x500, SEEK_SET );
if( _read( h, &buf, sizeof buf ) != sizeof buf )
goto __read_error;
for( int i = 0; i < NUM_EL(sig); ++i ) {
if( *(long*)&buf[sig->offs] != *(long*)sig->str ) {
__wrong_format:
message( .... );
_close( h );
return FALSE;
}
}
if( *(long*)&buf[0x2C] != *(long*)"_TAG" ) {
message( .... );
_close( h );
return FALSE;
}
if( *(long*)&buf[0x32] != *(long*)"_VER" )
goto __wrong_format;
*platform = *(ushort*)&buf[0x30];
if( ver ) {
long verOffs = headerSize + ((ulong)(*(ushort*)&buf[0x38]) << 4) + *(ushort*)&buf[0x36];
lseek( h, verOffs, SEEK_SET );
if( _read( h, ver, sizeof(float) ) != sizeof(float) )
goto __read_error;
}
_close( h );
Нужно было посмотреть, как делается одна вещь, залез в исходники некоторого старого __С++__(!!!!!!!!!!!!!!)(так что не надо "где здесь с++"=) ) проекта, там классы и все, как положено =)
Причем писал не школьник, а взрослый дядька, у которого опыта больше, чем у меня сознательной жизни(ну это я образно=) ) Я до сих пор пребываю в состоянии культурно-эстетического шока =)
ISith,
21 Января 2010
-
+66.6
- 1
- 2
- 3
- 4
- 5
- 6
- 7
//Дефайн в некотором хэдере
#define _TAPI(b) do {BOOL _b = (BOOL)(b); if (!b) throw(system_exception(GetLastError())); } while (false);
//...
// И далее такое:
//...
_TAPI (::CreateProcess(0, (LPWSTR)m_process.c_str(), 0,
0, FALSE, CREATE_SUSPENDED, 0, 0, &si, &pi));
Мой говнокод, хотя скорее опечатка =), я с такими явлениями уже не раз сталкивался, но все равно в течение получаса не мог понять, почему у меня по два процесса запускается =)))
ISith,
15 Января 2010