2

関数をスウィズルして、関数の引数を使用して元の実装を呼び出そうとしています。新しい IMP の形式は次のとおりです。

static id WrapperFunction(id self, SEL _cmd, ...) {
     va_list args;
     va_start(args, _cmd);

     originalImp(self, _cmd, args);
     ...
}

args含まれていないのに _cmd が含まれているため、これは明らかに間違って...います。

...originalImpに渡すにはどうすればよいですか?

4

1 に答える 1

0

Gcc は: http://gcc.gnu.org/onlinedocs/gcc/Constructing-Calls.html

clang には何もないので、それを行うにはアセンブルを行う必要があります (基本的に、originalImp のアドレスがわかっている場合は、それに「jmp」するだけです)。

于 2013-12-02T17:58:17.970 に答える