Всем спасибо, вопрос отменяется. Тему я удалю, так как она бессмысленна и вводит в заблуждение. Я посмотрел ассемблер, инициализацию именно самих строк. И внезапно всё стало ясно. char str[] = "Test"; работало потому что инициализировалось в main() ДО вызова функции. В которой один законченный мудак писал зачем-то в DSRPAG. (я разумеется это предвидел и искал такой код, однако же он извратился максимально неявным способом). Соответственно всё что позже переставало работать не потому что указатель неверный, а потому что была выбрана иная страница. Наткнулся я когда перестало работать ниже по коду даже: { char t[] = "test"; testfun(t); } как можно понять, "test" все равно берется из psv-страницы.