почему мы увеличиваем / уменьшаем указатель стека на «4», когда мы sh и выталкиваем из стека программы? Мне интересно, откуда взялась эта цифра «4».
4 - это размер байтов, которые добавляются в стек.
Между старым адресом стека и новым адресом стека хранятся ваши данные.
Когда вы вычитаете 4 из адреса, чтобы иметь возможность перезаписать информацию на следующем pu sh.