Здравствуйте, Sergey, Вы писали:
S>Hello, lav03! S>You wrote on Tue, 02 Dec 2003 08:41:11 GMT:
S>>> Эта фигня происходит из-за того, что функция ZwGetContextThread S>>> скомпилена без кадра стека. Поэтому IntelStackWalk хватает кадр S>>> предыдущей функции (foo), из которого вытаскивает адрес возврата на S>>> OnBnClickedButton1(). В результате foo в дамп не попадает.
l>> А ведь если отключить оптимизацию, то foo() попадает в дамп. S>Не верю. Ты наверное что-то перепутал.
l>> Значит в этом случае кадр стека все же формируется? S>Как это он сформируется для функции из ntdll? Я дизассемблером смотрел — нет там никакой установки ebp, почти сразу int 2E идет.
l>> Можно ли как нибудь заставить функцию кадр стека формироваться, обхитрить? S>Ну так я говорил уже — опция компилятора /Oy- после опций оптимизации, и все будет почти как надо.
S>Best regards, S> Sergey.
Понятно, спасибо.
На счет отключения оптимизации я , кажется, действительно перепутал.
Но я пробовал и с /Oy и без нее, результат почему-то одинаков. Не работает. Я даже создал новцй проект для чистоты эксперимента.
Бог с ней с ZwGetContextThread. Мне не понятно, почему в моих OnBnClickedButton1() b foo() кадр стека формируется, а в IntelStackWalk() — нет, ведь все же они в одном проекте с одинаковыми опциями компилчтора скомпилированы.