Jest możliwość oszukania wywołania funkcji ze zmienną listą argumentów przez odpowiednie spreparowanie stosu przez wywołaniem. W skrócie chodzi o takie wpakowanie va_list oraz pozostałych argumentów na stos, aby ramka stosu wywołanej funkcji trafiła dokładnie w te dane. Najprościej wygenerować sobie przykładowe wywołanie z rzeczywistymi argumentami jako kod asemblerowy aby mieć przykład jak to działa i napisać funkcję opakowującą second, która będzie pobierała va_list, ładowała argumenty na stos np. przy pomocy wstawek asemblerowych (choć niekoniecznie), a następnie wywoływała samą oryginalną funkcję second przez zwykłe wywołanie z argumentami obowiązkowymi i bez argumentów dowolnych. Na przykład często jest tak, że umieszczenie na stosie argumentów wywołania nie różni się niczym od zdefiniowania zmiennych lokalnych (z inicjacją) w odpowiedniej kolejności, a następnie wywołania funkcji bez parametrów dowolnych. Być może da się nawet napisać to bez użycia jednej wstawki asemblerowej, ale trzeba to sprawdzić na wygenerowanym kodzie - czy będzie funkcjonalnie identyczny z "normalnym" wywołaniem. W końcu va_list, to zwykła tablica mapowana na stos reprezentowana faktycznie jako wskaźnik. Wystarczy podejrzeć sobie definicję va_list, va_start, va_end i odpowiednio spreparować wywołanie. Być może będzie to nawet w dużym stopniu przenośne. Oto stary przykład (z BC++ 4) zdefiniowania va_list, va_start i va_end:
#ifndef __VARARGS_H
#define __VARARGS_H
#ifdef __STDARG_H
#error Can't include both STDARG.H and VARARGS.H
#endif
#if !defined(___DEFS_H)
#include <_defs.h>
#endif
typedef void _FAR *va_list;
#define __size(x) ((sizeof(x)+sizeof(int)-1) & ~(sizeof(int)-1))
#define va_dcl va_list va_alist;
#define va_start(ap) ap = (va_list)&va_alist
#define va_arg(ap, type) (*(type _FAR *)(((*(char _FAR * _FAR *)&(ap))+=__size(type))-(__size(type))))
#define va_end(ap) ap = ((void _FAR *)0)
#endif /* __VARARGS_H */
Jak widać stos z argumentami jest traktowany jak zwykła tablica. Tak więc bardzo możliwe, że trzeba mu dostarczyć na stos zwykłą tablicę zainicjowaną przez serię wywołań va_arg
Tak czy inaczej trzeba sobie podejrzeć definicje z własnego varargs.h, sprawdzić jak są odczytywane argumenty z wielokropka i odpowiednio do tego zareagować.