用Hopper找BUG

最新項(xiàng)目有一些BUG。莫名奇怪。
網(wǎng)上給出的都是要DSYM文件的。我之前項(xiàng)目沒(méi)有生成DSYM文件。

用之前的辦法找了一些。對(duì)于一些古怪的BUG不清楚不好用。
我寫(xiě)一個(gè)崩潰的例子:

[self doesNotRecognizeSelector:@selector(xxx)];

很明顯。這里會(huì)崩潰:

_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 已經(jīng)幫我定位到是-[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個(gè)動(dòng)靜態(tài)庫(kù)的偏移信息

鏡像地址如上:不知道為什么xcode 沒(méi)給出 偏移后的地址。
其實(shí)上面的有個(gè)這樣的信息:

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

Base Address: 0x00000001000a0000 = Slide Address: 0x0000000100000000 + 0x00000000000a0000 ;
0x00000000000a0000是隨機(jī)值,每次都不一樣。Slide Address 在ios 貌似永遠(yuǎn)是0x0000000100000000。和hoper 里面里面 從0x0000000100000000開(kāi)始 是一樣的。

上面:

 3   ShangXin                            0x0000000100402198 -[SXHomeViewController viewDidLoad] + 84 

就是崩潰點(diǎn),崩潰信息 永遠(yuǎn)都是最后的APPName 地址處導(dǎo)致崩潰。其他都是都是蘋(píng)果的動(dòng)靜態(tài)庫(kù),是沒(méi)有錯(cuò)的。
上面的stack 地址 : 0x0000000100402198 = -[SXHomeViewController viewDidLoad] +84;
0x0000000100402198 - randomization地址(0x00000000000a000) = -[SXHomeViewController viewDidLoad] (hopper 里面的地址,內(nèi)存中的地址是要 減去 0x00000000000a000) + 86(此處要換算為16進(jìn)制);

有圖有證據(jù):

WX20170523-134749@2x.png

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

定位到匯編的 0000000100362198 ldur x1, [x29, #0xffffffe8]
所以我們可以這樣找崩潰信息,雖有一點(diǎn)偏差,差一行代碼。

手機(jī)上的顯示崩潰日志跟這個(gè)稍微不一樣:

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

發(fā)現(xiàn)此處 :

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

0x100406198 = 0x1000a4000 + 0x362198 (3547544)
蘋(píng)果給出 鏡像 地址列表和xcode 里面不一樣:
Binary Images:

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

直接給出了偏移后的地址。
xocde 里面只會(huì)給出偏移隨機(jī)值;
所以要從手機(jī)上看出的日志在hopper里面找 是這樣的: 0x1000a4000 - 0xa4000 + 0x362198(3547544) ;

0x1000a4000 - 0xa4000(randomization地址)+ 0x362198(3547544) = -[SXHomeViewController viewDidLoad](hopper 里面的地址0x100362144) +0x54 (86(此處要換算為16進(jìn)制))

。我們來(lái)看看友盟怎么給我們傳回?cái)?shù)據(jù)呢

WX20170523-135528@2x.png

可能是我打開(kāi)了生成DYSM文件吧。這個(gè)直接在hopper 搜 0x100362198 即可找到崩潰位置。但是大多時(shí)候給我的是內(nèi)存地址。

最后總結(jié)下:
Base Address = Slide Address + 偏移;

stack address = 函數(shù)地址+ 代碼偏移(函數(shù)內(nèi)部偏移) ;
stack address = Base Address + 函數(shù)偏移(hopper中位置 - 0x100000000 (Slide Address)) +代碼偏移(函數(shù)內(nèi)部偏移);

xcode:
直接在xocde里面根據(jù)崩潰函數(shù)名找,或者用 stack address - app可執(zhí)行文件(偏移),在hopper里面看。
手機(jī)崩潰日志:
stack address - 偏移在hopper 找,偏移 = Base Address - Slide Address, Slide Address貌似永遠(yuǎn)是0x100000000;
友盟:
直接根據(jù) 崩潰的地址找

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,622評(píng)論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,716評(píng)論 3 429
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事?!?“怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 178,746評(píng)論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 63,991評(píng)論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,706評(píng)論 6 413
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 56,036評(píng)論 1 329
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,029評(píng)論 3 450
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 43,203評(píng)論 0 290
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,725評(píng)論 1 336
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,451評(píng)論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,677評(píng)論 1 374
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,161評(píng)論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,857評(píng)論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 35,266評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 36,606評(píng)論 1 295
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,407評(píng)論 3 400
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,643評(píng)論 2 380

推薦閱讀更多精彩內(nèi)容

  • 關(guān)鍵時(shí)刻,第一時(shí)間送達(dá)! 問(wèn)題種類(lèi) 時(shí)間復(fù)雜度 在集合里數(shù)據(jù)量小的情況下時(shí)間復(fù)雜度對(duì)于性能的影響看起來(lái)微乎其微。但...
    C9090閱讀 903評(píng)論 0 1
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,180評(píng)論 4 61
  • Swift版本點(diǎn)擊這里歡迎加入QQ群交流: 594119878最新更新日期:18-09-17 About A cu...
    ylgwhyh閱讀 25,508評(píng)論 7 249
  • WebSocket-Swift Starscream的使用 WebSocket 是 HTML5 一種新的協(xié)議。它實(shí)...
    香橙柚子閱讀 24,023評(píng)論 8 183
  • 中午,沒(méi)能和兒子去用餐,周四嘛,是出了名的忙。員工11點(diǎn)用餐,11:30,就上班了。 想了想給兒子點(diǎn)了外賣(mài),電話(huà)通...
    巧玲瓏678閱讀 474評(píng)論 0 0