断点以后,拿到的函数不一致,求教各位大神

使用image list -o -f获取基地址以后,加上偏移地址 00000000014cc3e4,用br s -a 打断点,报错
warning: failed to set breakpoint site at 0x14cc35 for breakpoint 1.1: error: 0 sending the breakpoint request
图片

然后我修改成image list获取基地址以后,加上偏移地址能成功打断点,但是我打的断点不是我要找的那个函数方法,我用
di --start-address 获取函数去对比,不是一个方法,求教一下,谢谢

mach-o header
图片

你反编译的是动态库还是静态库。别把地址给放错了。

是一个framework

file 命令看一下framework里的macho,应该是个动态库,也就是个shared object。
image list -o -f的时候,找到动态库的加载地址(而不是主二进制的)下断点

1 个赞

谢谢,我试试

确实

还有一个问题请教一下,我写tweak如何获取这个动态库的地址了,用dlopen去加载这个动态库?

这个动态库被主二进制加载了吧? 要是OC函数直接用runtime符号去hook就好了,不需要拿地址吧。如果真的要拿地址用dyld_xxx的api,遍历一下,就能拿到了吧。

不用遍历,每次加载的序号是固定的,直接按index取,节能减排 :smirk:

:+1: 这也可以 哇

我现在用代码获取的基地址,跟实际的lldb获取的基地址不一致,这是为什么

还有一个问题,我这个动态库不是第一时间加载进来的,我用
unsigned long _sub_ACF0 = _dyld_get_image_vmaddr_slide(i);
pszModName = _dyld_get_image_name(i);//名称
现在是没有我想要的那个动态库的,它会过一会才会加载这个动态库,这个怎么拿这个动态库的地址了

_dyld_register_func_for_add_image() ?

楼上正解,还有你图里那个写法,你不加函数地址吗?

2015232 == 0x1ec000.
你去补补基础好不好?

1 个赞

好骂 我就喜欢看这些

1 个赞

我现在用图1的路径,能获取基地址g_slide = slide;,但是拿不到动态库的基地址,图2是动态库的路径,怎么能获取到动态库的基地址了,现在这个动态库还没有加载,我用_dyld_get_image_vmaddr_slide还拿不到,谢谢

???

没加载哪来的基地址?

:sweat_smile: