У меня есть указатель на функцию __stdcall на C, а в обеих сборках x86 и x64 то, что я хотел бы сделать, - это функция asm, которую я могу использовать для перехода к этой функции.MASM и C перейти к функции
Например, возьмем функцию Windows API MessageBoxW
void *fn = GetProcAddress(GetModuleHandle("kernel32.dll"), MessageBoxW);
Тогда в C Я буду иметь призыв к ASM, как
void foo()
{
MessageBoxW_asmstub(NULL, "test", "test", NULL);
}
Пусть п глобальна. Затем в сборке я хотел бы иметь функцию, которая просто переходит в MessageBoxW, но не вызывает ее. Другими словами, я хочу MessageBoxW, чтобы очистить переменные, передаваемые MessageBoxW_asmstub, а затем вернуться к Foo
jump (fn) ?
Я не знаю, как это сделать.
Необходимо выполнить соглашение о вызове stdcall на x86 и соглашение о вызове Microsoft x64 на x86. (На x86 нет stdcall). В зависимости от того, что вы делаете в MessageBoxW_asmstub, это можно сделать с помощью простой инструкции jmp fn. Это предполагает, что вы оставите все энергонезависимые и аргументные регистры вместе со стеком в том же состоянии, что и в точке входа в asmstub. В большинстве случаев это не должно быть сложно. –