用Hopper找BUG

最新项目有一些BUG。莫名奇怪。
网上给出的都是要DSYM文件的。我之前项目没有生成DSYM文件。

用之前的办法找了一些。对于一些古怪的BUG不清楚不好用。
我写一个崩溃的例子:

[self doesNotRecognizeSelector:@selector(xxx)];

很明显。这里会崩溃:

_CFRunLoopError_RunCalledWithInvalidMode to debug. This message will only appear once per execution.
2017-05-23 13:16:14.564712+0800 ShangXin[236:5197] UMLOG: error: session_id=2EDD98E50F32B02D719C97C632C05FD8, context=-[SXHomeViewController xxx]: unrecognized selector sent to instance 0x101528c40
(null)
((
    0   CoreFoundation                      0x0000000186026ff0 <redacted> + 148
    1   libobjc.A.dylib                     0x0000000184a88538 objc_exception_throw + 56
    2   CoreFoundation                      0x000000018602def4 <redacted> + 0
    3   ShangXin                            0x0000000100402198 -[SXHomeViewController viewDidLoad] + 84
    4   ShangXin                            0x00000001006017b8 __vcViewDidLoad + 480
    5   UIKit                               0x000000018c155f9c <redacted> + 1036
    6   UIKit                               0x000000018c20e0c4 <redacted> + 72
    7   UIKit                               0x000000018c20df9c <redacted> + 416
    8   UIKit                               0x000000018c20d2cc <redacted> + 144
    9   UIKit                               0x000000018c20cd00 <redacted> + 856
    10  UIKit                               0x000000018c20c8b4 <redacted> + 64
    11  UIKit                               0x000000018c20c818 <redacted> + 188
    12  UIKit                               0x000000018c153158 <redacted> + 1200
    13  QuartzCore                          0x0000000189343274 <redacted> + 148
    14  QuartzCore                          0x0000000189337de8 <redacted> + 292
    15  QuartzCore                          0x0000000189337ca8 <redacted> + 32
    16  QuartzCore                          0x00000001892b3360 <redacted> + 252
    17  QuartzCore                          0x00000001892da3c0 <redacted> + 504
    18  QuartzCore                          0x00000001892dae8c <redacted> + 120
    19  CoreFoundation                      0x0000000185fd49a0 <redacted> + 32
    20  CoreFoundation                      0x0000000185fd2628 <redacted> + 372
    21  CoreFoundation                      0x0000000185f02db4 CFRunLoopRunSpecific + 456
    22  UIKit                               0x000000018c1c045c <redacted> + 652
    23  UIKit                               0x000000018c1bb130 UIApplicationMain + 208
    24  ShangXin                            0x00000001004af6b8 main + 124
    25  libdyld.dylib                       0x0000000184f1159c <redacted> + 4
)

dSYM UUID: A558F24E-26FD-31B3-B23D-241289FF6D44
CPU Type: arm64
Slide Address: 0x0000000100000000
Binary Image: ShangXin
Base Address: 0x00000001000a0000
2017-05-23 13:16:14.591106+0800 ShangXin[236:5197] UMLOG: session: session_id=2EDD98E50F32B02D719C97C632C05FD8, duration=10.790535
WX20170523-132010@2x.png

上图Xcode 已经帮我定位到是-[SXHomeViewController viewDidLoad] + 84的位置。

WX20170523-132521@2x.png
(lldb) image list -o -f
[  0] 0x00000000000a0000 /Users/zhangxiaoliang/Library/Developer/Xcode/DerivedData/ShangXin-fqfhhkkpshfleqeggllubtmnpskg/Build/Products/Debug-iphoneos/ShangXin.app/ShangXin
[  1] 0x0000000101298000 /Users/zhangxiaoliang/Library/Developer/Xcode/iOS DeviceSupport/10.3 (14E277)/Symbols/usr/lib/dyld
[  2] 0x00000000049e0000 /Users/zhangxiaoliang/Library/Developer/Xcode/iOS DeviceSupport/10.3 (14E277)/Symbols/usr/lib/libc++.1.dylib
[  3] 0x0000000101320000 /Users/zhangxiaoliang/Library/Developer/Xcode/DerivedData/ShangXin-fqfhhkkpshfleqeggllubtmnpskg/Build/Products/Debug-iphoneos/ShangXin.app/Frameworks/RevealServer.framework/RevealServer
[  4] 0x00000000049e0000 /Users/zhangxiaoliang/Library/Developer/Xcode/iOS DeviceSupport/10.3 (14E277)/Symbols/usr/lib/libz.1.dylib
[  5] 0x00000000049e0000 /Users/zhangxiaoliang/Library/Developer/Xcode/iOS DeviceSupport/10.3 (14E277)/Symbols/System/Library/Frameworks/MobileCoreServices.framework/MobileCoreServices
[  6] 0x00000000049e0000 /Users/zhangxiaoliang/Library/Developer/Xcode/iOS DeviceSupport/10.3 (14E277)/Symbols/System/Library/Frameworks/AudioToolbox.framework/AudioToolbox
[  7] 0x00000000049e0000 /Users/zhangxiaoliang/Library/Developer/Xcode/iOS DeviceSupport/10.3 (14E277)/Symbols/System/Library/Frameworks/AssetsLibrary.framework/AssetsLibrary
[  8] 0x00000000049e0000 /Users/zhangxiaoliang/Library/Developer/Xcode/iOS DeviceSupport/10.3 (14E277)/Symbols/System/Library/Frameworks/AVFoundation.framework/AVFoundation
[  9] 0x00000000049e0000 /Users/zhangxiaoliang/Library/Developer/Xcode/iOS DeviceSupport/10.3 (14E277)/Symbols/System/Library/Frameworks/ImageIO.framework/ImageIO
[ 10] 0x00000000049e0000 /Users/zhangxiaoliang/Library/Developer/Xcode/iOS DeviceSupport/10.3 
此处省略N个动静态库的偏移信息

镜像地址如上:不知道为什么xcode 没给出 偏移后的地址。
其实上面的有个这样的信息:

Slide Address: 0x0000000100000000
Binary Image: ShangXin
Base Address: 0x00000001000a0000

Base Address: 0x00000001000a0000 = Slide Address: 0x0000000100000000 + 0x00000000000a0000 ;
0x00000000000a0000是随机值,每次都不一样。Slide Address 在ios 貌似永远是0x0000000100000000。和hoper 里面里面 从0x0000000100000000开始 是一样的。

上面:

 3   ShangXin                            0x0000000100402198 -[SXHomeViewController viewDidLoad] + 84 

就是崩溃点,崩溃信息 永远都是最后的APPName 地址处导致崩溃。其他都是都是苹果的动静态库,是没有错的。
上面的stack 地址 : 0x0000000100402198 = -[SXHomeViewController viewDidLoad] +84;
0x0000000100402198 - randomization地址(0x00000000000a000) = -[SXHomeViewController viewDidLoad] (hopper 里面的地址,内存中的地址是要 减去 0x00000000000a000) + 86(此处要换算为16进制);

有图有证据:

WX20170523-134749@2x.png

0000000100362144 + 0x54(86) = 0x0000000100402198 - randomization地址(0x00000000000a000);

定位到汇编的 0000000100362198 ldur x1, [x29, #0xffffffe8]
所以我们可以这样找崩溃信息,虽有一点偏差,差一行代码。

手机上的显示崩溃日志跟这个稍微不一样:

Snip20170523_2.png
Last Exception Backtrace:
0   CoreFoundation                  0x186026fd8 __exceptionPreprocess + 124
1   libobjc.A.dylib                 0x184a88538 objc_exception_throw + 56
2   CoreFoundation                  0x18602def4 -[NSObject(NSObject) doesNotRecognizeSelector:] + 140
3   ShangXin                        0x100406198 0x1000a4000 + 3547544
4   ShangXin                        0x1006057b8 0x1000a4000 + 5642168

发现此处 :

 3   ShangXin                       0x100406198 0x1000a4000 + 3547544
4   ShangXin                        0x1006057b8 0x1000a4000 + 5642168

0x100406198 = 0x1000a4000 + 0x362198 (3547544)
苹果给出 镜像 地址列表和xcode 里面不一样:
Binary Images:

0x1000a4000 - 0x100923fff ShangXin arm64  <a558f24e26fd31b3b23d241289ff6d44> /var/containers/Bundle/Application/D1A648DA-6D9F-490D-913A-ABE73433F222/ShangXin.app/ShangXin

直接给出了偏移后的地址。
xocde 里面只会给出偏移随机值;
所以要从手机上看出的日志在hopper里面找 是这样的: 0x1000a4000 - 0xa4000 + 0x362198(3547544) ;

0x1000a4000 - 0xa4000(randomization地址)+ 0x362198(3547544) = -[SXHomeViewController viewDidLoad](hopper 里面的地址0x100362144) +0x54 (86(此处要换算为16进制))

。我们来看看友盟怎么给我们传回数据呢

WX20170523-135528@2x.png

可能是我打开了生成DYSM文件吧。这个直接在hopper 搜 0x100362198 即可找到崩溃位置。但是大多时候给我的是内存地址。

最后总结下:
Base Address = Slide Address + 偏移;

stack address = 函数地址+ 代码偏移(函数内部偏移) ;
stack address = Base Address + 函数偏移(hopper中位置 - 0x100000000 (Slide Address)) +代码偏移(函数内部偏移);

xcode:
直接在xocde里面根据崩溃函数名找,或者用 stack address - app可执行文件(偏移),在hopper里面看。
手机崩溃日志:
stack address - 偏移在hopper 找,偏移 = Base Address - Slide Address, Slide Address貌似永远是0x100000000;
友盟:
直接根据 崩溃的地址找

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,542评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,596评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,021评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,682评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,792评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,985评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,107评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,845评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,299评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,612评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,747评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,441评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,072评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,828评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,069评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,545评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,658评论 2 350

推荐阅读更多精彩内容