gpt4 book ai didi

ios - 在 Objective C 中保存 char* 和 intptr_t

转载 作者:行者123 更新时间:2023-11-29 01:19:26 24 4
gpt4 key购买 nike

我想保存一个 const char* 和一个 const intptr_t 以便我可以保存动态库加载。我目前正在使用以下代码来记录动态库加载:

+ (void)startRecording {
// NSArray *oldLibs = [NSKeyedUnarchiver unarchiveObjectWithFile:[self returnFilePathWithName:@"dynamic_libraries"]];
// NSLog(@"start recording");
// NSLog(@"oldLibs: %@", oldLibs);
_dyld_register_func_for_add_image(&image_added);
_dyld_register_func_for_remove_image(&image_removed);
}

static void image_added(const struct mach_header *mh, intptr_t slide)
{
_print_image(mh, true);
}

static void image_removed(const struct mach_header *mh, intptr_t slide)
{
_print_image(mh, false);
}

static void _print_image(const struct mach_header *mh, bool added)
{
Dl_info image_info;
int result = dladdr(mh, &image_info);

if (result == 0) {
printf("Could not print info for mach_header: %p\n\n", mh);
return;
}

const char *image_name = image_info.dli_fname;
const intptr_t image_base_address = (intptr_t)image_info.dli_fbase;

const char *log = added ? "Added" : "Removed";
printf("%s: 0x%02lx %s\n\n", log, image_base_address, image_name);

// NSString *imageName = [NSString stringWithUTF8String:image_name];
// NSNumber *baseAddress = [NSNumber numberWithInteger:image_base_address];
}

我知道我可以将 image_nameimage_base_address 转换为 Objective-C 对象,但是我应该在哪里/何时保存它们?

最佳答案

每次程序运行时,指针通常会有不同的值,试图保存和恢复它们通常会导致彻底的灾难。

如果您想保存和恢复 _dyld_register_func_for_add_image 的结果,那就更糟了,因为您需要调用该函数。它做事。它不只是返回一个指针。如果没有调用,该指针将完全无用。

关于ios - 在 Objective C 中保存 char* 和 intptr_t,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34782619/

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