gpt4 book ai didi

ios - 无法在 iOS 可执行文件中获取 Mach-O 文本段大小

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:10:21 24 4
gpt4 key购买 nike

我正在尝试获取我的 iOS 应用程序的 Mach-O 可执行文件的 .text 段大小。

size_t size_of_image(struct mach_header *header) {
size_t sz = sizeof(*header); // Size of the header
sz += header->sizeofcmds; // Size of the load commands

struct load_command *lc = (struct load_command *) (header + 1);
for (uint32_t i = 0; i < header->ncmds; i++) {
if (lc->cmd == LC_SEGMENT_64) {
sz += ((struct segment_command *) lc)->vmsize; // Size of segments
}
lc = (struct load_command *) ((char *) lc + lc->cmdsize);
}
return sz;
}

我从 main 调用这个函数

int main(int argc, char * argv[]) {
const struct mach_header * header;
Dl_info dlinfo;
//
if (dladdr(main, &dlinfo) == 0 || dlinfo.dli_fbase == NULL)
return 0; // Can't find symbol for main
//
header = dlinfo.dli_fbase; // Pointer on the Mach-O header
size_of_image(header);
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}

问题是 lc->cmd 总是 0,而且我从来没有得到 LC_SEGMENT_64 命令。

我试过 LC_SEGMENT - 结果相同

在 iPhone 6 上运行 iOS 12。我需要获取可执行文件的 .text 段以实现逆向工程保护功能。

看来我的 ** mach_header *header** 是 dladdr 函数的错误字段。

知道哪里出了问题吗?

最佳答案

罪魁祸首在 struct mach_header *header 中。
将其替换为 struct mach_header_64 *header
继续为现代二进制文件使用 LC_SEGMENT_64

关于ios - 无法在 iOS 可执行文件中获取 Mach-O 文本段大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55400596/

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