Re[3]: Как правильно перехватить аргумент элипсис?
От: pva  
Дата: 09.06.23 09:45
Оценка:
Здравствуйте, пффф, Вы писали:

П>Я читал про va_args.

П>Как оно мне поможет, если я хочу перехватить функцию с элипсисом, и при этом у оригинальной функции нет версии с va_args
Тогда прийдется похачить, наподобие
#include <windows.h>
#include <stdio.h>

unsigned char BswapData[] =
{
  0x0F, 0xC9, // bswap ecx
  0x89, 0xC8, // mov   eax, ecx
  0xC3        // ret
};

unsigned long (__fastcall *Bswap)(unsigned long) =
  (unsigned long (__fastcall *)(unsigned long)) &BswapData[0];

int main(void)
{
  DWORD dummy;
  VirtualProtect(BswapData, sizeof(BswapData), PAGE_EXECUTE_READWRITE, &dummy);
  printf("0x%lX\n", Bswap(0x10203040));
  return 0;
}


Сделать свой ручной jmp, порешать вопросы со стеком и будет тебе счастье.
newbie
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.