LINUX.ORG.RU

История изменений

Исправление Moisha_Liberman, (текущая версия) :

Взоржахом аки конь стоялый! Занесть в летописи! Кто там под лавкою, подвиньтесь, падаю! =)))

И никакого больше системного стека.

Батенька, это Вы в преддверии праздника 23-го февраля так жжоте-то? А не рано ли ещё начинать? =)))

А теперь следите за руками. Два разА повторять трюк не буду. =)))

Вы используете setjmp() и longjmp()? Ну так откройте на них маны, да вкурите истину. =))) Используя setjmp() Вы просто создаёте фрейм программного окружения (туда попадут состояние регистров, в т.ч. и регистра стека, адреса возвратов, локальные переменные каждой запущеной функции, но нет, туда не попадут дескрипторы открытых файлов например).

Т.е., фрейм окружения это некое состояние программы на момент его сохранения через setjmp() в struct jmp_buf. К сегменту стека это ровным счётом никакого отношения не имеет, т.к. сегмент стека не изменяется, а просто сохраняется как есть. Как программа работала, так и работает.

При восстановлении состояния программы через longjmp() просто восстанавливаются значения регистров на некий момент времени, к которому мы хотим вернуться. Сегмент стека опять не меняется, просто восстанавливается значения ss и esp, остальное программа забывает (сколько бы там сохранений ни было, это всем пофиг).

Вот и всё что происходит в Вашем «стеке». Это как было валидным состоянием процесса или потока, так и есть. Никакой фантастики и никаких стеков. Соболезную. =)))

У вас какой-то культ поклонения системе. Система — это просто инструмент. Можно пользоваться частью её функционала, а можно нет.

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

P.S. Соббстна, про то и речь – как ни извращайтесь, а сегмент стека в приложении как жил своей жизнью, так и живёт, если только его специально не озадачивать. Как именно – уже написал, дважды повторять не буду.

Что касается меня лично, то я добавлю что как С-программисту мне и в голову не пришло бы городить огород с таким, как у Вас подходом. =))) Сознавайтесь – на чём сидите, ээээ… я хотел сказать «пишете»? =)))

Исправление Moisha_Liberman, :

Взоржахом аки конь стоялый! Занесть в летописи! Кто там под лавкою, подвиньтесь, падаю! =)))

И никакого больше системного стека.

Батенька, это Вы в преддверии праздника 23-го февраля так жжоте-то? А не рано ли ещё начинать? =)))

А теперь следите за руками. Два разА повторять трюк не буду. =)))

Вы используете setjmp() и longjmp()? Ну так откройте на них маны, да вкурите истину. =))) Используя setjmp() Вы просто создаёте фрейм программного окружения (туда попадут состояние регистров, в т.к. и регистра стека, адреса возвратов, локальные переменные каждой запущеной функции, но нет, туда не попадут дескрипторы открытых файлов например).

Т.е., фрейм окружения это некое состояние программы на момент его сохранения через setjmp() в struct jmp_buf. К сегменту стека это ровным счётом никакого отношения не имеет, т.к. сегмент стека не изменяется, а просто сохраняется как есть. Как программа работала, так и работает.

При восстановлении состояния программы через longjmp() просто восстанавливаются значения регистров на некий момент времени, к которому мы хотим вернуться. Сегмент стека опять не меняется, просто восстанавливается значения ss и esp, остальное программа забывает (сколько бы там сохранений ни было, это всем пофиг).

Вот и всё что происходит в Вашем «стеке». Это как было валидным состоянием процесса или потока, так и есть. Никакой фантастики и никаких стеков. Соболезную. =)))

У вас какой-то культ поклонения системе. Система — это просто инструмент. Можно пользоваться частью её функционала, а можно нет.

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

P.S. Соббстна, про то и речь – как ни извращайтесь, а сегмент стека в приложении как жил своей жизнью, так и живёт, если только его специально не озадачивать. Как именно – уже написал, дважды повторять не буду.

Что касается меня лично, то я добавлю что как С-программисту мне и в голову не пришло бы городить огород с таким, как у Вас подходом. =))) Сознавайтесь – на чём сидите, ээээ… я хотел сказать «пишете»? =)))

Исходная версия Moisha_Liberman, :

Бггг... =)))

Взоржахом аки конь стоялый! Занесть в летописи! Кто там под лавкою, подвиньтесь, падаю! =)))

И никакого больше системного стека.

Батенька, это Вы в преддверии праздника 23-го февраля так жжоте-то? А не рано ли ещё начинать? =)))

А теперь следите за руками. Два разА повторять трюк не буду. =)))

Вы используете setjmp() и longjmp()? Ну так откройте на них маны, да вкурите истину. =))) Используя setjmp() Вы просто создаёте фрейм программного окружения (туда попадут состояние регистров, в т.к. и регистра стека, адреса возвратов, локальные переменные каждой запущеной функции, но нет, туда не попадут дескрипторы открытых файлов например).

Т.е., фрейм окружения это некое состояние программы на момент его сохранения через setjmp() в struct jmp_buf. К сегменту стека это ровным счётом никакого отношения не имеет, т.к. сегмент стека не изменяется, а просто сохраняется как есть. Как программа работала, так и работает.

При восстановлении состояния программы через longjmp() просто восстанавливаются значения регистров на некий момент времени, к которому мы хотим вернуться. Сегмент стека опять не меняется, просто восстанавливается значения ss и esp, остальное программа забывает (сколько бы там сохранений ни было, это всем пофиг).

Вот и всё что происходит в Вашем «стеке». Это как было валидным состоянием процесса или потока, так и есть. Никакой фантастики и никаких стеков. Соболезную. =)))

У вас какой-то культ поклонения системе. Система — это просто инструмент. Можно пользоваться частью её функционала, а можно нет.

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