大家好,我使用了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)