задача такова нужно при вызове апи сохранить все регистры неизменными задача усложнена тем что в стеке мы уже имеем необходимые параметры для какой либо апи функции (неизвестной) я решил это так @API_STACK_SAFE_DEPTH = 4096 ; regs save push eax mov eax, esp add eax, 200h and eax, -200h pop d_w_p [ss:eax-@API_STACK_SAFE_DEPTH] ; eax mov d_w_p [ss:eax-@API_STACK_SAFE_DEPTH-04h], ebx mov d_w_p [ss:eax-@API_STACK_SAFE_DEPTH-08h], ecx mov d_w_p [ss:eax-@API_STACK_SAFE_DEPTH-0ch], edx mov d_w_p [ss:eax-@API_STACK_SAFE_DEPTH-10h], ebp mov d_w_p [ss:eax-@API_STACK_SAFE_DEPTH-14h], edi mov d_w_p [ss:eax-@API_STACK_SAFE_DEPTH-18h], esi call API ; regs resore mov eax, esp add eax, 200h and eax, -200h mov ebx, d_w_p [ss:eax-@API_STACK_SAFE_DEPTH-04h] mov ecx, d_w_p [ss:eax-@API_STACK_SAFE_DEPTH-08h] mov edx, d_w_p [ss:eax-@API_STACK_SAFE_DEPTH-0ch] mov ebp, d_w_p [ss:eax-@API_STACK_SAFE_DEPTH-10h] mov edi, d_w_p [ss:eax-@API_STACK_SAFE_DEPTH-14h] mov esi, d_w_p [ss:eax-@API_STACK_SAFE_DEPTH-18h] mov eax, d_w_p [ss:eax-@API_STACK_SAFE_DEPTH] я таким образом повызывал всякие апи все вроде работает нормально но всетаки малость неуверенно себя чувствую... хотелось бы знать какова вероятность того что апи заюзает стек на 4к. Может майкрсофт указала минимальный безопасный размер стека для своих апи? кто что знает подскажите пожалуйста.
doctor_Ice не факт что 4К спасут, если АПИ с CallBack использование стека может быть любое. ИМХО оптимальный вариант создание своего стека или сдвинуть часть стека (например 1К) вверх, а в образовавшееся окно сохранить регистры, после вызова АПИ все вернуть как было(возможно надо будет ещё перестраивать цепочку SEH до и после).
мне вообщем нужен самый быстрай способ поэтому аалоки не катят. вот свой стек уже чтото... и так для каждого треда блин мона пихать реги в сторожевую страницу и при возникновении исключения переносить их в следующую... тока как это организовать я пока не знаю... можно еще с самого начала резервировать место на топе стека ))) вот это имхо лучший вариант будет... да по поводу ebp ebx esi edi их испльзует мой алгоритм до и после вызова апи.