gpt4 book ai didi

ios - dlsym 无法从 CoreTelephony 悄悄加载

转载 作者:太空宇宙 更新时间:2023-11-04 04:40:19 25 4
gpt4 key购买 nike

我正在尝试调用 CoreTelephony 框架中的私有(private)函数;这是我当前的代码:

double (*func)(void);

void *handle = dlopen("/System/Library/Frameworks/CoreTelephony.framework/CoreTelephony", RTLD_LAZY);

if (!handle) {
[@{@"handle": @"handle"} writeToFile:@"/var/mobile/err.plist" atomically:YES];
}

*(void **)(&func) = dlsym(handle, "CTRegistrationDataCounterGetLastResetTime");

if (dlerror() != NULL) {
[@{@"symbol": @"symbol"} writeToFile:@"/var/mobile/err.plist" atomically:YES];
}

double r = (*func)();
NSNumber *a = [NSNumber numberWithDouble:r];
[@{@"time": a} writeToFile:@"/var/mobile/err.plist" atomically:YES];
dlclose(handle);

我知道 CoreTelephony 二进制文件和 CTRegistrationDataCounterGetLastResetTime 符号都存在,因为如果我为其中任何一个插入 gobbledegook,我会立即崩溃。代码编译正常,没有出现错误。

但是,我认为该函数不会被调用,因为它总是返回 0,而它不应该返回(CTRegistrationDataCounterGetLastResetTime 函数返回上次重置蜂窝数据的日期格林威治标准时间 2001 年 1 月 1 日之后的秒数,因此它返回一个 double。NSDate 是通过 [NSDate dateWithTimeIntervalSinceReferenceDate:])

获得的

如果我不得不冒险猜测,我会说我将 dlsym 返回的 void * 转换为函数指针有问题。关于它的争论似乎多得惊人。

最佳答案

我试过像往常一样调用该方法,但实际上它返回 0,因此我尝试从 CoreTelephony 调用另一个方法。

void *handle = dlopen("/System/Library/Frameworks/CoreTelephony.framework/CoreTelephony", RTLD_NOW);
if (!handle) {
NSLog(@"Can't dlopen");
}

CFStringRef (*func)(CFAllocatorRef) = dlsym(handle, "CTRegistrationCopyLocalizedOperatorName");
if (dlerror() != NULL) {
NSLog(@"Can't find symbol");
}

CFStringRef r = func(CFAllocatorGetDefault());
dlclose(handle);

然后我得到了我的接线员姓名。所以我认为 Apple 只是删除了 CTRegistrationDataCounterGetLastResetTime 函数。 enter image description here

关于ios - dlsym 无法从 CoreTelephony 悄悄加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27152062/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com