さまざまな理由から、これらの関数をフックする必要があります。特にopen
. だから私はテストするためにtheosでこのコードを書いた:
#import <CoreFoundation/CoreFoundation.h>
#include <substrate.h>
static int (*orig_open)(const char * pathname,int oflag,...);
int new_open(const char * pathname,int oflag,...)
{
printf("-------------------I have success hook the C function open");
//static int crashed = 0;
va_list va;
mode_t mode = 0;
va_start(va, oflag);
if (oflag & O_CREAT) mode = va_arg(va, int);
va_end(va);
int ret = orig_open(pathname, oflag, mode);
if (strcmp(pathname, "/dev/dlci.spi-baseband.sms") == 0)
{
printf("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!@@@@@@@@@@@@@@@@@@@@~~~~~~~~~~~~~~~~~~~~~");
}
else
{
printf("~~%%");
}
return ret;
}
%ctor
{
NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init];
MSHookFunction((void *)open, (void *)new_open, (void **)&orig_open);
[pool drain];
}
しかし、何も起こらなかったようです。それで、私のコードに何か問題がありますか?