Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 8 мая!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Программисты долго мучаются с кодом прогаммы, изучают С++, WinAPI функции, MSDN. Потом пишут банальную систему защиты или навешивают банальный протектор, а крэкеры и реверсеры справляются с такой защитой за 5 минут. В итоге, продажи программы почти нулевые. Чтобы такого не допустить, тут самому надо немного поднабрать опыта отладки, реверсинга, тот же отладчик Ollydbg изучить или дизассемблер IDA Pro. Но где искать по крохам эти знания? Нет, конечно можно годами "методом тыка" разбираться, но куда быстрее видеокурс специальный посмотреть. Вот тут он есть: ссылка. Автор курса с большим опытом и объясняет понятно, я из этого курса много узнал про то как работает компьютер, процессор, про инструменты специальные и как с ними работать. Мои коллеги программисты на работе ничего такого и не знают, теперь я им нос утру.

setjmp

 
 Функция            Устанавливает нелокальный переход.
 
 
 
 Синтаксис          #include <setjmp.h>
 
                    int setjmp(jmp_buf jmpb);
 
 
 
 Файл, содержащий   setjmp.h
 
 прототип
 
 
 
 Описание           setjmp захватывает   состояние  задачи  в  jmpb  и
 
                    возвращает 0.
 
 
 
                    Последующий вызов      longjmp     восстанавливает
 
                    состояние задачи из jmpb и возвращается также  как
 
                    и setjmp со значением val.
 
 
 
                    Cостояние задачи представляет собой следующее:
 
 
 
                    - все сегментные регистры (CX,DS,ES,SS);
 
                    - переменные-регистры (SI,DI);
 
                    - указатель стека (SP);
 
                    - указатель базы (BP);
 
                    - флаги.
 
 
 
                    Состояние задачи  является достаточно полным,  так
 
                    что  функции   setjmp   и   longjmp   могут   быть
 
                    использованы   как   инструмент   для  организации
 
                    сопрограмм.
 
 
 
                    Перед использованием  функции  longjmp  необходимо
 
                    вызвать   функцию   setjmp.  Программа  вызывающая
 
                    setjmp и устанавливающая  jmpb  должна  оставаться
 
                    активной  и  не  должна  возвращать  управления до
 
                    вызова longjmp.  Если это случится,  то  результат
 
                    непредсказуем.
 
 
 
                    Данные подпрограммы  могут быть полезны для работы
 
                    с   ошибками   и    исключительными    ситуациями,
 
                    происходящими   в   низкоуровневых   подпрограммах
 
                    прикладных программ.
 
 
 
                    Примечание. Функции  setjmp   и   longjmp   нельзя
 
                    использовать  для  реализации оверлейных программ.
 
                    Обычно    setjmp    и    longjmp    сохраняют    и
 
                    восстананавливают все,  необходимые для реализации
 
                    сопрограмм,  однако   для   управления   оверлеями
 
                    необходимо     следить     за    стеком,    причем
 
                    подразумевается,  что стек  один.  При  реализации
 
                    сопрограмм  вы  обычно используете два стека,  или
 
                    две части одного стека,  и  поэтому  администратор
 
                    оверлеев не сможет корректно их отслеживать.
 
 
 
                    Вы можете   иметь  задачи,  работающие  в  фоновом
 
                    режиме,  которые используют свой  стек,  или  свой
 
                    раздел   общего   стека,  однако  вы  должны  быть
 
                    уверены,  что они не используют оверлеев,  и вы не
 
                    должны  использовать  оверлейные  версии  setjmp и
 
                    longjmp для переключения на эти фоновые задачи.
 
 
 
 Возвращаемое       setjmp возвращает 0 при начальном вызове.
 
 значение           Если это вызов для возврата после longjmp, setjmp
 
                    возвращает ненулевое значение (как в примере).
 
 
 
 Переносимость      Функция поддерживаются    на   системах   UNIX   и
 
                    стандартом  ANSI  C.  Функция  не   совместима   с
 
                    Windows.
 
 
 
 Смотрите также     longjmp, signal.
 
 
 
 Пример:
 
 
 
 #include <stdio.h>
 
 #include <process.h>
 
 #include <setjmp.h>
 
 
 
 void subroutine(void);
 
 
 
 imp_buf jumper;
 
 
 
 int main()
 
 {
 
    int value;
 
    value = setjmp(jumper);
 
    if (value != 0) {
 
      printf("longjmp со значением %d\n", value);
 
      exit(value);
 
    }
 
    printf("Вызов подпрограммы ... \n");
 
    subroutine();
 
    return 0;
 
 }
 
 void subroutine(void)
 
 {
 
    longjmp(jumper,l);
 
 }


<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS