Как правильно перехватить аргумент элипсис?
От: пффф  
Дата: 08.06.23 09:37
Оценка:
Привет!

В общем, не помню, как оно правильно называется, ... как в printf.

Есть допустим функция int some_cool_printf(const char* format, ...).
Сорцов нет, версии с va_args нет, я хочу сделать прокладку типа:

int some_cool_printf(const char* format, ...) // my version of some_cool_printf
{
    // do something with args

    auto orgSomeCoolPrint = getOrgSomeCoolPrint();
    return orgSomeCoolPrint(...);
}
// ...




Просто так это не сделать, насколько помню. Тут, по идее, выручил бы не вызов, а переход по адресу some_cool_printf. Ну, и with_log_some_cool_printf должна быть declspec(naked) или как-то так.

Интересует Win32/64, и MSVC, но и про более общие решения было бы интересно узнать.

Вроде бы declspec(naked) нет в x64, не?
Асма вроде точно в x64 нет, да?


А что если тупо goto вкорячить, прокатит?
    goto some_cool_printf;


Или через какие-то setjump'ы извращаться?
Или вручную нагенерить инструкции перехода? Как это правильно сделать? Может, есть что-то подобное готовое?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.