Информация об изменениях

Сообщение Re[3]: особенности структурной обработки исключений в Win64 от 03.12.2016 17:47

Изменено 03.12.2016 17:49 ononim

кт>По поводу выравнивания стека я и с автором и с Вами согласен. Охренели они все, простите мой французский. Зачем, например, во вшивой API InternetGetConnectedState использовать SSE2? Ответ: да не используется там такие команды, просто по дороге один чудила написал
кт>...
кт>movdqa xmmword ptr [rsp+20h],xmm0
кт>movdqa xmmword ptr [rsp+30h],xmm1
кт>movdqa xmmword ptr [rsp+40h],xmm2
кт>movdqa xmmword ptr [rsp+50h],xmm3
кт>mov rdx,rax
кт>lea rcx,[WININET!Ordinal103+0x43524
кт>call WININET!DispatchAPICall+0x3f0 (
кт>movdqa xmm0,xmmword ptr [rsp+20h]
кт>movdqa xmm1,xmmword ptr [rsp+30h]
кт>movdqa xmm2,xmmword ptr [rsp+40h]
кт>movdqa xmm3,xmmword ptr [rsp+50h]
Ну прежде чем делать какие либо выводы нужно бы заглянуть в WININET!DispatchAPICall+0x3f0

кт>т.е. запомнил и восстановил эти чертовы регистры. Ну, даже, если и нужно их внутри использовать – ну и выровни стек на 16 ВНУТРИ свой программы. Зачем ты заставляешь всех нарезать стек крупными ломтями?

Это часть соглашений о вызове.


кт>Жизнь в программе после исключения вполне может быть

кт>Я часто видел в программах конструкции типа такой:
кт>On underflow begin; x=0; goto m1; end;
кт>…
кт>x=x/y;
кт>m1:…
Такое исключение не приведет к падению. 64 стек всегда аллоцируется кратным sizeof(void *) то есть 8. Добиться неровности можно только некорректным кодом, а не исключением в корректном коде, сгерененным компилятором с учетом известных ему правил. Если писать свой код на асме который делает add rsp, 3, а потом хвататься за свою голову остается только посочувтсовать. Как я уже сказал — меньше всего авторы соглашений колдогенерации в х64 позаботились о любителях теплого лампового ассемблера.
Re[3]: особенности структурной обработки исключений в Win64
кт>По поводу выравнивания стека я и с автором и с Вами согласен. Охренели они все, простите мой французский. Зачем, например, во вшивой API InternetGetConnectedState использовать SSE2? Ответ: да не используется там такие команды, просто по дороге один чудила написал
кт>...
кт>movdqa xmmword ptr [rsp+20h],xmm0
кт>movdqa xmmword ptr [rsp+30h],xmm1
кт>movdqa xmmword ptr [rsp+40h],xmm2
кт>movdqa xmmword ptr [rsp+50h],xmm3
кт>mov rdx,rax
кт>lea rcx,[WININET!Ordinal103+0x43524
кт>call WININET!DispatchAPICall+0x3f0 (
кт>movdqa xmm0,xmmword ptr [rsp+20h]
кт>movdqa xmm1,xmmword ptr [rsp+30h]
кт>movdqa xmm2,xmmword ptr [rsp+40h]
кт>movdqa xmm3,xmmword ptr [rsp+50h]
Ну прежде чем делать какие либо выводы нужно бы заглянуть в WININET!DispatchAPICall+0x3f0. А предде чем заглядывать в вывод отладчика вообще нужно бы настроить символы..

кт>т.е. запомнил и восстановил эти чертовы регистры. Ну, даже, если и нужно их внутри использовать – ну и выровни стек на 16 ВНУТРИ свой программы. Зачем ты заставляешь всех нарезать стек крупными ломтями?

Это часть соглашений о вызове.


кт>Жизнь в программе после исключения вполне может быть

кт>Я часто видел в программах конструкции типа такой:
кт>On underflow begin; x=0; goto m1; end;
кт>…
кт>x=x/y;
кт>m1:…
Такое исключение не приведет к падению. 64 стек всегда аллоцируется кратным sizeof(void *) то есть 8. Добиться неровности можно только некорректным кодом, а не исключением в корректном коде, сгерененным компилятором с учетом известных ему правил. Если писать свой код на асме который делает add rsp, 3, а потом хвататься за свою голову остается только посочувтсовать. Как я уже сказал — меньше всего авторы соглашений колдогенерации в х64 позаботились о любителях теплого лампового ассемблера.