опизденеть |
Nov. 16th, 2018|08:36 pm |
целый день она ебалась, но, блядь, хуев баг нашла.
уж не знаю, ранди ли это жопорукий, или янис протупил, но в ACS VM был МЕГАБАГ. в вызовах внутренних acs-функций return не восстанавливало указатель на локалы из сохранённого значения, а тупо ставило его на «вершина стека минус количество аргументов минус количество локалов». и всё было заебись до тех пор, пока на стеке было чисто. но там не всегда чисто, там могут лежать временные значения!
ну, типа вот: `func0()+func1()*locvar`. при таком раскладе возврат `func0` временно шароёбится на стеке, и после вызова `func1` указатель на наши локалы съехал. и `locvar` берёт по кривому указателю полную поебень. к сегфолту это не приводит, но результат всё равно плачевен.
(ну да, это зависит от кодогена; неважно, вы уловили суть, я думаю)
на скриншоте — наконец-то рабочий «hpbar-v16.pk3». уффф.
|
|