Очередной Asm Арррргх
 Добавлено: 28.03.2017 20:43:23
Добавлено: 28.03.2017 20:43:23Кто-нибудь объясните мне, слабоумному, почему в win32 это работает, а в win64 - работало, а потом ВДРУГ стало давать AV ?

Добавлено спустя 3 минуты 30 секунд:
З.Ы. Если закомментировать - движок взлетает, НО не работает ловля исключений т.к. там параноидальная проверка вменяемости на родной сегмент стека.
Добавлено спустя 1 минуту 21 секунду:
З.З.Ы. Оптимизацию сбрасывал до -O1, компилятор пробовал 3.0.0 вместо 2.6.4 - что совой об пень, что пнём об сову
Добавлено спустя 3 минуты 19 секунд:
З.З.З.Ы. ppcrossx64 воняет, что chentrah.lpr(111,3) Note: Object file "cge.o" contains 32-bit absolute relocation to symbol ".bss.n_u_cge_mother". - какого...
Добавлено спустя 7 минут 10 секунд:
З.З.З.З.Ы Обошёл хаком:
но всё равно интересует: КАКОГО?!
			- Код: Выделить всё
- ...
 Mother^.ExceptionState.ThreadId:= GetCurrentThreadId();
 Mother^.ExceptionState.ThreadTitle:= 'main thread';
 {$ifdef windows}
 //Mother^.ExceptionState.StackSegment:= <current ss>;
 // This is only needed for the Windows-only SEH hack.
 {$ifdef cpu64}
 asm
 mov rsi, qword[Mother]
 mov ax, ss
 mov word[rsi + TMother.ExceptionState.StackSegment], ax
 end ['rsi', 'rax'];
 {$else}
 asm
 mov esi, dword[Mother]
 mov ax, ss
 mov word[esi + TMother.ExceptionState.StackSegment], ax
 end ['esi', 'eax'];
 {$endif}
 {$endif}

Добавлено спустя 3 минуты 30 секунд:
З.Ы. Если закомментировать - движок взлетает, НО не работает ловля исключений т.к. там параноидальная проверка вменяемости на родной сегмент стека.
Добавлено спустя 1 минуту 21 секунду:
З.З.Ы. Оптимизацию сбрасывал до -O1, компилятор пробовал 3.0.0 вместо 2.6.4 - что совой об пень, что пнём об сову

Добавлено спустя 3 минуты 19 секунд:
З.З.З.Ы. ppcrossx64 воняет, что chentrah.lpr(111,3) Note: Object file "cge.o" contains 32-bit absolute relocation to symbol ".bss.n_u_cge_mother". - какого...

Добавлено спустя 7 минут 10 секунд:
З.З.З.З.Ы Обошёл хаком:
- Код: Выделить всё
- var myss: word;
 ...
 {$ifdef cpu64}
 asm
 mov ax, ss
 mov word[myss], ax
 end ['rax'];
 Mother^.ExceptionState.StackSegment:= myss;
 {$else}
но всё равно интересует: КАКОГО?!
