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

ВИДЕОКУРС ВЗЛОМ
выпущен 10 декабря!


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

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



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

heapwalk
Функция Используется для перемещенмия по памяти от узла к узлу.

 
 Синтаксис          #include<alloc.h>
 
                    int heapwalk(struct heapinfo *hi);
 
 
 
 Файл, содержащий   alloc.h
 
 прототип
 
 
 
 Описание           heapwalk подразумевает,  что  память не запорчена.
 
                    Для  проверки,  перед   использованием   heapwalk,
 
                    вызовите   heapcheck.  При  достижении  последнего
 
                    блока,  функция возвращает _HEAPOK.  При следующем
 
                    вызове heapwalk, она вернет _HEAPEND.
 
 
 
                    heapwalk получает  указатель  на  структуру   типа
 
                    heapinfo (определена в файле alloc.h).  При первом
 
                    вызове  heapwalk  установите  поле  hi.ptr  в   0.
 
                    farheapwalk  вернет  вам в этом поле адрес первого
 
                    блока памяти.  Поле hi.size содержит размер  этого
 
                    блока  в  байтах.  hi.in_use  - это флаг,  который
 
                    устанавливается,  если этот  блок  используется  в
 
                    настоящий момент.
 
 
 
 Возвращемое        Если нет памяти, то возвращается значение
 
 значение           _HEAPEMPTY  (1).
 
 
 
                    Если hiapinfo  содержит  допустимые   данные,   то
 
                    возвращается _HEAPOK (2).
 
 
 
                    Если достигнут   конец   памяти,  то  возвращается
 
                    _HEAPEND (5).
 
 
 
 Переносимость      heapwalk уникальна для DOS.  Функция не совместима
 
                    с Windows.
 
 
 
 Смотрите также     farheapwalk.
 
 
 
 Пример:
 
 
 
 #include<stdio.h>
 
 #include<alloc.h>
 
 
 
 #define NUM_PTRS    10
 
 #define NUM_BYTES   16
 
 
 
 int main(void)
 
 {
 
    struct heapinfo hi;
 
    char *array[NUM_PTRS];
 
    int i;
 
    for(i=0; i<NUM_PTRS; i++)
 
      array[i] = malloc(NUM_BYTES);
 
    for(i=0; i<NUM_PTRS; i+=2)
 
      free(array[i]);
 
    hi.ptr = NULL;
 
    printf("   Размер      Статус   \n");
 
    printf("   ------      ------   \n");
 
    while(heapwalk(&hi) == _HEAROK)
 
       printf(" %7u      %s\n",fi.size,hi.in_use ? "используется" :
 
           "не используется");
 
    return 0;
 
 }


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

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




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



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


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