GameHackLab[RU]
    • Категории
    • Последние
    • Метки
    • Популярные
    • Пользователи
    • Группы
    • Зарегистрироваться
    • Войти

    Стек

    Запланировано Прикреплена Закрыта Перенесена Базовая информация
    стекрегистрыassemblerинструкции
    1 Сообщения 1 Posters 253 Просмотры
    Загружаем больше сообщений
    • Сначала старые
    • Сначала новые
    • По количеству голосов
    Ответить
    • Ответить, создав новую тему
    Авторизуйтесь, чтобы ответить
    Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
    • PromisingP
      Promising
      отредактировано Promising

      В этой теме рассказано о том что такое стек потока


      Стек потока представляет собой временное хранилище данных для работы с ними. Данные могут быть помещены в стек и достаны из него с помощью разных инструкций ассемблера. Стек на самом деле является просто выделенной памятью.
      Поток получает странницу памяти представляющую стек при создании и хранит текущее смещение (адрес) стека в регистре esp.
      Изначально стек пустой, то есть имеет нулевые значения. Для взаимодействия со стеком есть специальные инструкции:

      push - Сдвинуть адрес стека (вычесть из esp) и записать в него значение. В 64 битных процессах сдвигает стек на 8 байт, в 32 битных процессах на 4 байта.

      push 5 //Сдвигает стек (значение адреса в esp) и записывает по адресу стека число 5 
      push [адрес] //Тоже самое, но загружает значение из адреса
      push eax //Тоже самое, но загружает значение регистра
      

      pop - Прочитать из стека и сдвинуть адрес стека (добавить к esp) и записать в него значение. Правила такие же как у push по разрядности процессов.

      push 5 
      pop eax //Выгружает из стека число 5 в регистр eax, теперь в нём число 5 
      push 6
      pop [адрес] //Выгружает из стека число 6 по адресу
      

      Использование обычных команд для работы со стеком

      //Аналог push 5, это то что он делает
      sub esp,4
      mov [esp],5
      
      //Аналог pop eax, это то что он делает
      mov eax,[esp]
      add esp,4
      
      //Загрузка и чтение нескольких разных значений из стека
      push 5
      push 4
      push 8
      mov eax,[esp] //eax = 8
      mov ecx,[esp+4] //ecx = 4
      mov ebx,[esp+8] //ebx = 5
      add esp,#12 //Или add esp,C в шестнадцатеричной системе счисления
      
      //Пример замены значения в стеке и выгрузки командой pop
      push 5
      mov [esp],8
      pop eax //eax = 8
      

      В Cheat Engine стек можно увидеть при выполнении отладки процесса, о которой рассказано в следующих статьях.

      1 ответ Последний ответ Ответить Цитировать 1
      • Первое сообщение
        Последнее сообщение