K

S の mallocは適当なレジスタにでも書き込ませればいいとして何とかなりそうだが、型が困った。
最終的には、
#define K (k)
#define S (s)
として、
K K (10) (20) (30);
みたいなのを動かすのが目標ですよ。

k(void* v)
{
    unsigned char *func = (char*)malloc(6);
    func[0]=0xB8;*(void**)(func+1)=(void*)v;func[5]=0xC3;
    return func;
}

さて、何型を返そうか。
typedef void* (*f1) (void*);
typedef f1 (*f2) (void*);
の f2 みたいなのにすると、K (20) (30) になったときに K が (void*) されているために動かないんですねえ。
ようするにC言語の void* に引数が与えられたときに黙って飛んでくれないのが悪い(死)のだが。
十分ネストさせておいて、足りなくなったら書き直すとか。
operator とか template とか甘美な言葉が聞こえそうだけど、だって、そんなことしたら上でやったこと無駄じゃん。速くてメモリがじゃじゃ漏れな所を除いて、爆。