Lldb中image list中模块基地址都不对怎么办

不知各位有没有遇到过这个现象,

(lldb) image list -o -f

[ 3] 0x0000000000cac000 /Users/qt26/Library/Developer/Xcode/iOS DeviceSupport/8.1 (12B411)/Symbols/System/Library/PrivateFrameworks/BulletinBoard.framework/BulletinBoard
[ 4] 0x0000000000cac000 /Users/qt26/Library/Developer/Xcode/iOS DeviceSupport/8.1 (12B411)/Symbols/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation
[ 5] 0x0000000000cac000 /Users/qt26/Library/Developer/Xcode/iOS DeviceSupport/8.1 (12B411)/Symbols/System/Library/Frameworks/IOKit.framework/Versions/A/IOKit
[ 6] 0x0000000000cac000 /Users/qt26/Library/Developer/Xcode/iOS DeviceSupport/8.1 (12B411)/Symbols/usr/lib/liblockdown.dylib
[ 7] 0x0000000000cac000 /Users/qt26/Library/Developer/Xcode/iOS DeviceSupport/8.1 (12B411)/Symbols/usr/lib/libmis.dylib
[ 8] 0x0000000000cac000 /Users/qt26/Library/Developer/Xcode/iOS DeviceSupport/8.1 (12B411)/Symbols/usr/lib/libtzupdate.dylib
[ 9] 0x0000000000cac000 /Users/qt26/Library/Developer/Xcode/iOS DeviceSupport/8.1 (12B411)/Symbols/usr/lib/libSystem.B.dylib

列出来的很多模多基地址都是一样的,而且也是错的。

这种情况该怎么处理,怎么去获得目标模块的正确基地址呢?

一个人都没有么?还是这个问题太傻了……

最上面那个开头的就是。或者 image list -o -f MobileMail(你要看的文件的名字)

我是用的这个方法,关键是lldb返回的基地址是不对的,加上ida里看到的函数指令偏移量后都会出错,像这样:
(lldb) br s -a 0x2677EC2C
warning: failed to set breakpoint site at 0x2677ec2c for breakpoint 1.1: error: 2 sending the breakpoint request
Breakpoint 1: address = 0x000000002677ec2c

没有遇到过这种情况,,但是lldb返回的基地址应该是没错的,你这样验证一下,找一个会调用到的类,http://bbs.iosre.com/t/lldb-oc/6711 这个帖子里看看直接对oc函数下断点。然后对比一下lldb返回的地址看看是不是真的有问题。

遇到了同样的问题,lldb没法用了,都是 显示的本机的image ,手机和电脑都重启了还不行

image list -o -f 命令列出的地址有点问题。
而换用image list就好了。
例如,某次app的进程基地址是: 0x00000001041ec000,二者区别如下:
0x00000000041ec000(image list -o-f)
0x00000001041ec000(image list)
如果用前者,那么计算地址时候直接 41ec000 :heavy_plus_sign:IDA显示的地址。
若用后者,计算地址时候用 1041ec000 + (IDA显示地址-Mach-O Header偏移量,一般为0x100000000)

没有什么理论支持,这是我试验踩出来的坑。

xia0LLDB中的info -m moduleName试试

1 个赞

-o – Display the image load address offset from the base file address