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

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


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

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



Возможности языков семейства Си по истине безграничны, однако, в этой свободе кроются и недостатки: всегда нужно программисту держать ухо востро и контроллировать "переполнение буфера", чтобы потом программа не вылетала в "синий экран" на массе разнообразных версий Windows и железа у пользователей. Те же крэкеры и реверсеры специально ищут в коде программ на Си уязвимости, куда можно подсадить любой вирусный код, об этом более подробно автор рассказывал в своём видеокурсе здесь. Я там многое узнал и теперь мой код стал значительно более безопасный.

allocmem

 
 Функция            Выделяет сегмент памяти DOS.
 
 
 
 Синтаксис          #include<dos.h>
 
                    int allocmem(unsigned size, unsigned *segp);
 
 
 
 Файл, содержащий   dos.h
 
 прототип
 
 
 
 Описание           allocmem для выделения блока свободной памяти
 
                    использует системный вызов DOS 0x48 и возвращает  в
 
                    качестве   результата  адрес  сегмента  выделенного
 
                    блока.
 
 
 
                    size - желаемый размер области памяти в  параграфах
 
                    (параграф  равен  16  байт).  segp  -  указатель на
 
                    слово,  которому  будет  присвоен  адрес   сегмента
 
                    нового   выделенного   блока  памяти.  Присваивание
 
                    адреса слову, указателем которого является segp, не
 
                    происходит,  если  запрашиваемого количества памяти
 
                    не имеется в наличии.
 
 
 
                    Все выделяемые блоки выравниваются по параграфам.
 
 
 
                    allocmem и malloc не могут использоваться вместе.
 
 
 
 Возвращаемое       allocmem при успешном завершении возвра-
 
 значение           щает значение -1. При возникновении ошибки
 
                    возвращается число (размер в параграфах наибольшего
 
                    блока памяти, имеющегося в наличии).
 
 
 
                    Ошибка, возвращаемая   из  allocmem,  устанавливает
 
                    _doserrno и глобальную переменную errno в
 
 
 
                      ENOMEM - Не хватает памяти
 
 
 
 Переносимость      allocmem уникальна для DOS.
 
                    Функция не поддерживается Windows.
 
 
 
 Смотрите также     coreleft,freemem,malloc,setblock.
 
 
 
 Пример:
 
 
 
 #include<dos.h>
 
 #include<alloc.h>
 
 #include<stdio.h>
 
 
 
 int main(void)
 
 {
 
    unsigned int size,segp;
 
    int stat;
 
 
 
    size = 64;   /* 64 * 16 = 1024 байта */
 
    stat = allocmem(size,&segp);
 
    if(stat == -1)
 
       printf("Выделен сегмент памяти по адресу %x\n",segp);
 
    else
 
       printf("Ошибка! Допустимый максимальный размер = %u\n",stat);
 
    return 0;
 
 }
 
 


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

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




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



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


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