请教mac下hook剪切板函数会导致程序崩溃的问题


#1
大家好,我使用了mach_override的框架试图在mac下hook剪切板的CFPasteboardCopydata函数。
hook之后,可以打印hook函数日志,但在hook函数里调用原函数时出现错误,报错信息为EXC_BAD_ACCESS。如下:

_dyld_lookup_and_bind(
                      "_CFPasteboardCopyData",
                      (void**) &victim_func_ptr_copydata,
                      NULL);


victim_func_copydata = (int32_t (*)(int, int, int, int, int ))victim_func_ptr_copydata
me = mach_override_ptr(
                       victim_func_ptr_copydata,
                       (void*)&my_CFPasteboardCopydata,
                       (void**)&victim_func_copydata);

然后调用上层剪切板函数后,会执行到
int32_t my_CFPasteboardCopydata(int argv0, int argv1, int argv2, int argv3, int argv4)
{
printf(“in my_CFPasteboardCopydata %llx\n”, victim_func_copydata);
int i = (*victim_func_copydata)(argv0, argv1, argv2, argv3, argv4); //该函数报错

return i;

}
具体代码我已经上传到https://github.com/sdhzdmzzl/pastehook/blob/master,下载下来即可使用xcode编译调试。我是在10.12环境下调试的。
使用mach_override框架hook open等系统函数没有问题,但是hook cfpasteboardcopydata却出现问题,麻烦哪位大佬帮忙看看,万分感谢。

注:使用hooper反汇编CoreFoundation文件,拿到的CFPasteboardCopydata函数原型为int _CFPasteboardCopydata(int argv0, int argv1, int argv2, int argv3, int argv4)


#2

Hopper的函数原型你看个乐子就得了