Где именно программа ломается? Вы пытались использовать OllyDbg для пошагового выполнения инструкций по сборке, чтобы увидеть, запускаете ли вы по крайней мере запуск буфера или отказали до этого? Если вы не выполняете даже первую инструкцию в буфере, то, вероятно, страница стека (или раздел данных в этом случае, поскольку вы предоставляете ее как строковый литерал) была помечена как неисполняемая, и вам придется использовать другой метод. , Возможно, есть способ заставить Windows сделать исполняемую страницу стека (или раздел данных в данном случае) для целей тестирования / обучения (я знаю, что двоичные файлы ELF имеют исполняемый флаг стека, а Linux предоставляет утилиту execstack
для редактирования флага). .
Если он прерывается после нескольких инструкций из вашего буфера, то, скорее всего, потому, что инструкции в вашем буфере пытаются (косвенно) вызвать абсолютный адрес (0xff 0x15 0x40 0x62 0x40 x00
=> call dword ptr ds:[406240]
) и в W7, address рандомизация размещения пространства (ASLR) может быть включена (я не уверен, что компоновщик VS2010 устанавливает бит IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE в заголовке PE по умолчанию).
Редактировать
На основании дополнительной информации, которую вы добавили в вопрос, может показаться, что проблема неисполняемого стека, упомянутая в моем первом абзаце, является виновником. Однако, даже если вы обойдете эту проблему, вторая проблема все еще может быть проблемой, так как вы не знаете, что будет в 0x00406240, если включен ASLR.