кт>По поводу выравнивания стека я и с автором и с Вами согласен. Охренели они все, простите мой французский. Зачем, например, во вшивой 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 позаботились о любителях теплого лампового ассемблера.
Как много веселых ребят, и все делают велосипед...