Очистка стека вызовов с ZeroMemory?

295
22 августа 2021, 22:10

Пытаюсь очистить стек. Создаю структуру после этого помещаю её в стек и пытаюсь очистить его, но на дебагере ничего не происходит. Ни ошибки, ни чего вообще. Что я делаю не так, я хочу разобраться почему такой код не работает. Библиотека /MD оптимизация O2 размер стека 0x4000

struct stub {
    DWORD_PTR a;
    DWORD_PTR b;
};
int main() {
      foo1();
      foo2();
      foo3();
      foo4();
      stub stb;
      DWORD_PTR adr = (DWORD_PTR)&stb - 0x1000;
      ZeroMemory((void*)adr, 0x1000);
}

Этот код будет работать. Но мне нужно удалить верхние адреса стека.

 stub stb;
 DWORD_PTR adr = (DWORD_PTR)&stb; ////// - 0x1000;
 ZeroMemory((void*)adr, 0x1000);
Answer 1

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

В частности, в вашем случае, если вы хотите обнулить регион размером 0x1000, это значение вообще не должно фигурировать в процессе вычисления начального адреса региона.

Answer 2

Тут вы смещаетесь на 0x4000 байт, а не на 0x1000 как ожидаете, т.к. работает адресная арифметика. DWORD_PTR + 1 это смещене на следующий 4 байтный объект.

DWORD_PTR adr = (DWORD_PTR)&stb - 0x1000;

Тут вы отчищаете только первые 0x1000 байт, а в дебагере смотрете на последние 0x1000

ZeroMemory((void*)adr, 0x1000);
READ ALSO
Функция в C++ не видит динамический массив

Функция в C++ не видит динамический массив

Программа находит все перестановки n элементовВ функции perm() в условии пишет, что идентификатор chosen не определен

73
c++ , struct, разбитие строки

c++ , struct, разбитие строки

здраствуйте форумчане, суть моего вопроса состоит в том что надо разбить строку сисволом '=' из переменой env и записать в структуру block

132
Есть ли ошибки или проблемы в коде

Есть ли ошибки или проблемы в коде

Я начал изучать C++ ООПИ придумал вот такой пример с фабриками по добыче угля и железа

189
QTreeView с QCheckBox

QTreeView с QCheckBox

Не понимаю как реализовать QTreeView с checkboxКак обработать событие установки и снятия "галочки"

169