ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
|

25.06.2009, 02:47
|
|
Постоянный
Регистрация: 12.12.2006
Сообщений: 906
Провел на форуме: 4205500
Репутация:
930
|
|
Насчет 10-ой задачи:
цель этих заданий, по-моему, состоит в том, чтобы показать решающим нечто, чего они раньше не видели, о чем не задумывались и что, возможно (!=точно), поможет им в дальнейшем.
Ай-ай! Я перепутал 10 и 14 задания ) Сорри
Код:
const int N = 3;
int** buf = new int*;
int z = 0;
for (int i=0; i<N; i++) {
*(buf + i) = new int;
for (int k=0; k<N; k++) {
*(*(buf + i) + k) = z++;
std::cout << *(*(buf + i) + k) << std::endl;
}
}
Последний раз редактировалось Fata1ex; 25.06.2009 в 13:15..
|
|
|

25.06.2009, 03:13
|
|
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме: 1354067
Репутация:
599
|
|
ну хзхз. тут не вижу ничего интересного. все итак очевидно - юзать сишный способ работы с памятью + арифметика указателей. это как раз то, что должен обходить за километр программист на с++.
|
|
|

25.06.2009, 03:20
|
|
Постоянный
Регистрация: 12.12.2006
Сообщений: 906
Провел на форуме: 4205500
Репутация:
930
|
|
Я не очень верно выразился:
чтобы показать решающим нечто, чего они, по-моему, раньше не видели, о чем не задумывались и что, возможно (!=точно), поможет им в дальнейшем.
|
|
|

25.06.2009, 10:24
|
|
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
Кстати, чтото пока никто не решил мою задачку с обработкой исключений
|
|
|

25.06.2009, 11:39
|
|
Reservists Of Antichat - Level 6
Регистрация: 04.02.2007
Сообщений: 1,152
Провел на форуме: 3008839
Репутация:
1502
|
|
Сообщение от slesh
Кстати, чтото пока никто не решил мою задачку с обработкой исключений
а одна строчка "VEH" тебя устроит?) //add: кстати, ты ведь не хотел застаить людей хучить KiUserExceptionDispatcher?
просто все чего-нть интересного ждут - вдруг появится?
кстати - скопипастю задачку из того, что я зачем-то в задания по пхп кинул:
что будет в переменной после выполнения кода (не компилить!)
Код:
/*very very long not ever overflowable*/ int a = 5+765432l;
__________________
Bedankt euch dafür bei euch selbst.
H_2(S^3/((z1, z2)~(exp(2pi*i/p)z1, exp(2pi*q*i/p)z2)))=Z/pZ
Последний раз редактировалось desTiny; 25.06.2009 в 11:58..
|
|
|

25.06.2009, 12:51
|
|
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
2 desTiny вообще это решается без ассемблера и без разного рода ядерных функций.
Чисто только API функции (даже одна функция)
|
|
|

25.06.2009, 13:07
|
|
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
т.к. судя по всему мало кто это использует или комуто неинтерестно это придется рассказать самому )
Есть такая апишка - SetUnhandledExceptionFilter. Через неё можно устанавливать собственный обработчик исключений для процесса.
Т.е. даже если ошибка произошла в каком либо потоке приложения, то всё равно будет вызван этот обработчик. Дригими словами это типа try except но в глобальном масштабе всего приложения. Вообще эта функция какбы заменяет обработчик ошибок который есть в винде (который показывает сообщение что прога выполнила некорректрую операцию итд).
Использовать его очень удобно для создания стабильных приложений. К примеру если в приложенни появится ошибка, то с помошью этой технологии её можно перехватить (даже без показа на экран) и запустить приложение заново или даже для удобства скинуть отладочный дамп на винт.
Использование очень просто:
Код:
// наш фильтр
LONG MyExceptHandle(struct _EXCEPTION_POINTERS *pExceptionInfo)
{
char buf[256];
GetModuleFileNameA(0,buf,256); // получим имя нашей проги
printf("ERROR\n");
WinExec(buf,SW_SHOW); // запустим заново её
ExitProcess(0); // завершим процесс
return 0;
}
int main(int argc, char* argv[])
{
printf("SRART\n");
// ставим свой фильтр исключений
SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)&MyExceptHandle);
__asm
{
hlt // делаем ошибку
}
return 0;
}
Хоть перезапуск лучше делать с следящем процесс.
Лично я иногда использую слудующего рода конструкцию
Код:
LONG MyExceptHandle(struct _EXCEPTION_POINTERS *pExceptionInfo)
{
_MINIDUMP_EXCEPTION_INFORMATION ExInfo;
SYSTEMTIME lt;
char NAME[512];
GetModuleFileNameA(0, NAME, 512); // получим имя нашей проги
GetLocalTime(<); // получим системное время
sprintf(NAME, "%s_%i-%i-%i_%i-%i-%i.dmp", NAME, lt.wYear, lt.wMonth, lt.wDay, lt.wHour, lt.wMinute, lt.wSecond);
ExInfo.ThreadId = GetCurrentThreadId(); // зададим ID потока
ExInfo.ExceptionPointers = pExceptionInfo; // зададим исключение
ExInfo.ClientPointers = 0;
// создадим файл для дампа
HANDLE hFile = CreateFileA(NAME, GENERIC_WRITE, FILE_SHARE_WRITE, NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL, NULL );
// скинем дамп в файл
MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(),hFile,MiniDumpNormal,&ExInfo,0,0);
// закроем файл
CloseHandle(hFile);
// завершим процес с кодом появившейся ошибки
ExitProcess(pExceptionInfo->ExceptionRecord->ExceptionCode);
return 0;
}
В этоге при ошибке в прогамме, в папке с прогой появится файл
имяпроги_дата_время.dmp в котором будет содержаться дамп программы на момент ошибки.
Далее этот файл можно свободно подгрузить в отладчик или даже в VC++ 2008 открыть и подробно изучить причину ошибки (при наличии исходников вообще можно видеть строку где произошла ошибка итд итп) Очень удобная вешь для отладки больших проектов.
Последний раз редактировалось slesh; 25.06.2009 в 13:16..
|
|
|

25.06.2009, 13:12
|
|
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
2 desTiny какой пакостник, людей дурить нехорошо. Ониже голову сломают без капса )
|
|
|

25.06.2009, 13:24
|
|
Постоянный
Регистрация: 12.12.2006
Сообщений: 906
Провел на форуме: 4205500
Репутация:
930
|
|
Обновил задания ) Обновил решение 10 задания ( теперь это решение 10 задания, а не другого (: ).
2 13 14 16
|
|
|

25.06.2009, 19:21
|
|
Reservists Of Antichat - Level 6
Регистрация: 04.02.2007
Сообщений: 1,152
Провел на форуме: 3008839
Репутация:
1502
|
|
slesh, SetUnhandledExceptionFilter делает не то, что ты просил. он добавит обработчик в самый низ, а ты, как я понял, просил добавить его наверх. И, к тому же, твой код трёт уже установленный exceptionfilter.
а
Код:
LONG NTAPI VEHproc(PEXCEPTION_POINTERS param){
printf("error!!");
return EXCEPTION_CONTINUE_EXECUTION;
}
...
AddVectoredExceptionHandler(1, VEHProc);
...
должен вполне нормально справляться со всем.
__________________
Bedankt euch dafür bei euch selbst.
H_2(S^3/((z1, z2)~(exp(2pi*i/p)z1, exp(2pi*q*i/p)z2)))=Z/pZ
|
|
|
|
 |
|
Похожие темы
|
| Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
|
[PHP] ЗАДАНИЯ от Krist_ALL
|
Krist_ALL |
PHP, PERL, MySQL, JavaScript |
205 |
30.11.2009 18:31 |
|
Задания
|
~Fenix~ |
Болталка |
11 |
13.05.2006 11:03 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|