Независимо от флагов stdcall/cdecl, компилятор использует fastcall
Для функций, объявленных с naked атрибутом, компилятор создает код без пролога и кода эпилога. Эту возможность можно использовать, чтобы создавать свой собственный код на языке ассемблера и вставлять его в качестве пролога и эпилога. Функции с атрибутом naked особенно полезны для написания драйверов виртуальных устройств. Обратите внимание, что naked атрибут допустим только на платформах x86 и ARM и недоступен в x64.
/**
* This macro outputs the prolog code for a naked intercept function. It
* should be the first code in the function.
*/
#define INTERCEPT_PROLOG() \
__asm \
{ \
__asm push ebp \
__asm mov ebp, esp \
__asm sub esp, __LOCAL_SIZE \
}
/**
* This macro outputs the epilog code for a naked intercept function. It
* should be the last code in the function. argsSize is the number of
* bytes for the argments to the function (not including the the api parameter).
* The return from the function should be stored in the "result" variable, and
* the "stdcall" bool variable determines if the function was called using the
* stdcall or cdecl calling convention.
*/
#define INTERCEPT_EPILOG(argsSize) \
__asm \
{ \
__asm mov eax, result \
__asm cmp stdcall, 0 \
__asm mov esp, ebp \
__asm pop ebp \
__asm jne stdcall_ret \
__asm ret 4 \
__asm stdcall_ret: \
__asm ret (4 + argsSize) \
}
/**
* This macro outputs the epilog code for a naked intercept function that doesn't
* have a return value. It should be the last code in the function. argsSize is the
* number of bytes for the argments to the function (not including the the api
* parameter). The "stdcall" bool variable determines if the function was called using
* the stdcall or cdecl calling convention.
*/
#define INTERCEPT_EPILOG_NO_RETURN(argsSize) \
__asm \
{ \
__asm cmp stdcall, 0 \
__asm mov esp, ebp \
__asm pop ebp \
__asm jne stdcall_ret \
__asm ret 4 \
__asm stdcall_ret: \
__asm ret (4 + argsSize) \
}
__asm \
{ \
__asm push ebp \
__asm mov ebp, esp \
__asm sub esp, __LOCAL_SIZE \
}
#pragma auto_inline()
__declspec(naked) int DecodaOutput(unsigned long api, lua_State* L)
{
int result;
bool stdcall;
INTERCEPT_PROLOG()
result = DecodaOutputWorker(api, L, stdcall);
INTERCEPT_EPILOG(4)
}
mov stackLeftOver, esp
push arg1
call function
mov final, eax
mov eax, stackLeftOver
sub eax, esp
mov stackLeftOver, eax
add esp, stackLeftOver
bool GetIsStdCallConvention(void* function, void* arg1, void** result)
{
int stackLeftOver;
int final;
extern "C"
{
void Rememberthestackpointer1(int stackLeftOver, int final, int arg1 );
}
EXTERN stackLeftOver:DWORD
EXTERN final:DWORD
EXTERN arg1:DWORD
.CODE
readName PROTO C
Rememberthestackpointer1 PROC
mov stackLeftOver, esp
push arg1
call function
mov final, eax
mov eax, stackLeftOver
sub eax, esp
mov stackLeftOver, eax
add esp, stackLeftOver
ret
Rememberthestackpointer1 ENDP
END
Там же можно получить права к любому файлу поставив определённую галочку,- это вообще непонятно к какому месту сказано, права доступа к любому файлу можно итак получить без всяких твикеров, короче ответ не в тему
да что значит быстрее работает винда? Чем ты измеряешь? Что смотришь
Винда мало что делает с приложением.зато винда отжирает немалую долю работы ЦПУ и оперативки и в итоге запущенным приложениям остается меньше, и к тому же эта ваша фраза вообще говорит о вашей компьютерной малограмотности - ОС не "мало что делает с приложением" а ОС вообще делает для приложения все! - все чтобы оно запустилось и работало, и от того как ОС это делает и зависит быстродействие и все остальное, т.к. любое приложение для своего запуска и работы использует средства ОСи - API и прочее и от того как в ОСи это все реализовано все и зависит, а то если бы приложениям ОС для запуска и работы была бы не нужна то тогда и ОСи никакие были бы не нужны - проги бы запускались бы сами по себе и работали
ни когда не ставьте два антивируса
но и защищает. сосед по локалке принес флешку с вирусом, который умеет распространятся как червь
Так тоже не сработало ))