Giter VIP home page Giter VIP logo

ironstack's Introduction

Защищенный стек

Идея

Хотим обезопасить стек от посторонних записей.

Зачем это нужно?

Переполнение буфера стека происходит, когда программа выполняет запись в адрес памяти в стеке вызовов программы за пределами предполагаемой структуры данных. Это почти всегда приводит к повреждению смежных данных в стеке, что может привести к сбоям программы, неправильной работе или проблемам безопасности.

Канарейки или канареечные слова - это известные значения, которые помещаются между буфером и управляющими данными в стеке для отслеживания переполнения буфера. При переполнении буфера первыми поврежденными данными обычно будут данные канарейки, поэтому проверка данных канарейки будет предупреждать о переполнении, которое затем может быть обработано, например, путем аннулирования поврежденных данных.

Реализация

Есть динамический стек, в конце и в начале которого есть канарейки. Сам стек хешируется. И после каждого действием над стеком происходит проверка хеша и валидности канареек.

Есть структура в файле stack.h

    typedef struct {
        StackElement* array; #  Стек
        int64_t size; # Размер массива
        StackElement CANARY = rand(); # Рандомное значение канарейки
        int64_t capacity; # Вместимость стека
        uint64_t hash; # Значение хеша
    } IronStack;

Для которой есть методы:

  • Вставка void Push(IronStack& Stack, StackElement new_el) # вставляет элемент new_el в стек.
  • Удаление StackElement Pop(IronStack& Stack) # удаляет и возвращает верхний элемент.
  • Просмотр элементов StackElement Top(IronStack& Stack) # возвращает верхний элемент.
  • Просмотр размера int64_t Size(IronStack& Stack) # возвращает текующий размер стека.

Так как стек динамический, есть метод IronStack Reallocate(IronStack& Stack, int64_t new_capacity).
На вход подаются стек и его желаемая вместимость. Метод вызывается самостоятельно, если в случае вставки элемента не хватает места. Вместимость в этом случае увеличивается в 2 раза.

Функция void Check(IronStack& Stack) проверяет все канарейки.

Отдельно пишется фунция uint64_t hashing (IronStack& Stack), которая выполняет хеширование стека и возвращает хеш, соответствующий стеку.

Распределение хеш-функции на 10000 массивов размера 1000.

Hash Graph

Из графика видим, что хеш-функция распределена равномерно.

Запуск

Чтобы запустить проект используете команду

gcc ... -o main
\.main

Также проект подразумевает покрытие каждой функции тестами, которые лежат в test.h
Чтобы запустить проект с тестами используйте флаг:

-DTEST_BUILD

ironstack's People

Contributors

kristinakulabuhova avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.