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

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


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

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



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

Функция Осуществляет выход в DOS из программы, оставляя, тем не менее еe резидентной.

 
 Синтаксис          #include<dos.h>
 
                    void keep(unsigned char status, unsigned size);
 
 
 
 Файл, содержащий   dos.h
 
 прототип
 
 
 
 Описание           Функция keep осуществляет выход в DOS со  статусом
 
                    выхода в переменной status. Текущая программа, тем
 
                    не менее,  остается резидентной.  Длина  программы
 
                    устанавливается   в  size  параграфов,  и  остаток
 
                    памяти  освобождается.
 
 
 
                    Функция keep может быть использована для установки
 
                    резидентных   программ   (TSR).    Функция    keep
 
                    использует функцию DOS 0x31.
 
 
 
 Возвращаемое       Нет.
 
 значение
 
 
 
 Переносимость      Функция уникальна для DOS. Функция не совместима с
 
                    Windows.
 
 
 
 Смотрите также     abort, exit.
 
 
 
 Пример:
 
 
 
 /* ПРИМЕЧАНИЕ:
 
    Это программа   обработки   прерывания.   Если   вы    попытаетесь
 
    откомпилировать  ее с включенной проверкой переполнения стека,  то
 
    вы  не  !!!  получите  правильно  работающей  программы.   Формула
 
    использованая  в  этой  функции,  вычисляющая  число параграфом не
 
    обязательно  будет  работать  во  всех  случаях.   Используйте   с
 
    осторожностью!  Резидентные  программы  являются довольно сложными
 
    продуктами,  и для них не обеспечивается дополнительная поддержка.
 
    Дополнительную информацию вы найдете в технической документации по
 
    DOS */
 
 
 
 #include<dos.h>
 
 /* прерывание по таймеру */
 
 #define INTR 0x1c
 
 /* атрибут экрана (голубой или серый) */
 
 #define ATTR 0x7900
 
 /* уменьшить размер стека и локальной памяти, чтобы
 
    сделать программу меньше */
 
 extern unsigned _heaplen = 1024;
 
 extern unsigned _stklen = 512;
 
 
 
 void interrupt (*oldhandler)();
 
 
 
 void interrupt handler(void)
 
 {
 
    unsigned int (far *screen)[80];
 
    static int count;
 
    /* для цветного адаптера адрес видеопамяти
 
       B800:0000, для монохромного B000:0000 */
 
    screen = MK_FP(0x8000,0);
 
    /* увеличить счетчик, и взять его по модклю 10 */
 
    count++;
 
    count %= 10;
 
    /* вывести число на экран */
 
    screen[0][79] = count+'0'+ATTR;
 
    /* вызвать старую функцию обработки прерывания */
 
    oldhandler();
 
 }
 
 int main(void)
 
 {
 
    /* получить адрес текущей программы обработки прерываний
 
       по таймеру */
 
    oldhandler = getvect(INTR);
 
    /* установить свою программу обработки прерывания */
 
    setvect(INTR,handler);
 
    /* _psp содержит начальный адрес области памяти, в которой
 
       расположена ваша программа. Вершина стека определяет
 
       конец вашей программы. _SS и SP вместе дают конец стека.
 
       Возможно вам будет нужно добавить локальную память для
 
       собственных нужд, что делается следующим образом:
 
       (_SS + ((_SP + локальная память)/16) - _psp) */
 
 
 
    keep(0,_SS+(_SP/16)-_psp);
 
    return 0;
 
 }

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

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




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



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


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