Давненько читал опции компилятора gcc, сейчас вспоминаю, что там было опция, благодаря которой можно изменить использование регистров по умолчанию
к примеру по умолчанию функции возвращают результат своего выполнения в регистре eax (rax x64)
при включении опции, можно настроить кодогенерацию пользовательствого кода так, чтобы результат хранился в ebx, edx и так далее
ну а если ближе к сути моих мыслей:
меня интересует вопрос изменения регистра хранения стека
например меняем ролями регистры esp и edi
при вызове функции в x86 аргументы помещаются на стек справа налево
а что если псевдокод будет выглядеть примерно так:
прежде чем пытаться что то такое реализовать, решил спросить может ли иметь место эта идея?
что будет по детекту, и как к этому отнесутся аверы
к примеру по умолчанию функции возвращают результат своего выполнения в регистре eax (rax x64)
Код:
push ebp
mov ebp, esp
sub esp, 60
...
call func
mov [ebp - 4], eax
при включении опции, можно настроить кодогенерацию пользовательствого кода так, чтобы результат хранился в ebx, edx и так далее
ну а если ближе к сути моих мыслей:
меня интересует вопрос изменения регистра хранения стека
например меняем ролями регистры esp и edi
при вызове функции в x86 аргументы помещаются на стек справа налево
а что если псевдокод будет выглядеть примерно так:
Код:
C code:
// stack in edi
// winapi need args in esp
char test[] = "test";
void* mini_stack = calloc(10, 4);
ministack[0] = retaddr;
ministack[1] = 0;
ministack[2] = test;
ministack[3] = test;
ministack[4] = 0;
asm{
mov esp, ministack
jmp __imp__MessageBoxA@16
...
}
...
прежде чем пытаться что то такое реализовать, решил спросить может ли иметь место эта идея?
что будет по детекту, и как к этому отнесутся аверы