app退出时,[SBMainWorkspace applicationProcessDidExit:withContext:]是由谁调用的?


#1

在lldb中断到[SBMainWorkspace applicationProcessDidExit:withContext:]
调用栈是下面这样

  • frame #0: 0x00000001000997c0 SpringBoard_mh_execute_header + 300992 frame #1: 0x00000001879f5200 libdispatch.dylib_dispatch_call_block_and_release + 24
    frame #2: 0x00000001879f51c0 libdispatch.dylib_dispatch_client_callout + 16 frame #3: 0x0000000187a03444 libdispatch.dylib_dispatch_queue_serial_drain + 928
    frame #4: 0x00000001879f89a8 libdispatch.dylib_dispatch_queue_invoke + 652 frame #5: 0x0000000187a0538c libdispatch.dylib_dispatch_root_queue_drain + 572
    frame #6: 0x0000000187a050ec libdispatch.dylib_dispatch_worker_thread3 + 124 frame #7: 0x0000000187bfe2b8 libsystem_pthread.dylib_pthread_wqthread + 1288
    frame #8: 0x0000000187bfdda4 libsystem_pthread.dylib`start_wqthread + 4

没有看到直接调用applicationProcessDidExit的地方


#2
void __cdecl -[FBApplicationProcess _queue_callExitObservers](FBApplicationProcess *self, SEL a2)
{
  FBApplicationProcess *v2; // x19
  FBApplicationProcess *v3; // [xsp+8h] [xbp-48h]
  __objc2_class *v4; // [xsp+10h] [xbp-40h]
  void *v5; // [xsp+18h] [xbp-38h]
  int v6; // [xsp+20h] [xbp-30h]
  int v7; // [xsp+24h] [xbp-2Ch]
  void *(__fastcall *v8)(__int64, void *); // [xsp+28h] [xbp-28h]
  void *v9; // [xsp+30h] [xbp-20h]
  FBApplicationProcess *v10; // [xsp+38h] [xbp-18h]

  v2 = self;
  v5 = _NSConcreteStackBlock_ptr_329;
  v6 = -1040187392;
  v7 = 0;
  v8 = __48__FBApplicationProcess__queue_callExitObservers__block_invoke;
  v9 = &__block_descriptor_tmp_80_177;
  v10 = self;
  j__objc_msgSend_799(self, selRef__queue_enumerateApplicationObserversWithBlock_[0], &v5);
  v3 = v2;
  v4 = classRef_FBApplicationProcess_0[0];
  j__objc_msgSendSuper2_713(&v3, selRef__queue_callExitObservers[0]);
}

应该是这


#3

谢谢,确实是这里
顺便问一下,用什么方法能够定位到这样的调用
ida的交叉引用和lldb的调用栈都看不到的时候


#4

dyld cache


#5

这个知道,我直接用ida打开的,但是不能够直接看到,对字符串的交叉引用全部都是没有的
F5看到的都是类似这样
j__objc_msgSend_69(a2, (const char *)off_1C6A07198, selRef_DropTransferDataWithRecordID_);


#6


#7

你是不是修正过ida里面指向字符串的偏移,或者其他处理?
如果cache拖进去不做其他处理是不能像你这样看到的


#8

没有修正过, 就是直接拖进来


#9

我直接拖进去,分析单独模块和依赖模块,是这个样子


#10

那就分析整个


#11

是IDA7 加 ios 10的cache吗?


#12

是的


#13

我的ida 加载了complete ,然后一开始解析oc就崩溃


#14

你是IDA7吗, 是不是内存不够


#15

是ida 7 ,只要开始分析oc就会崩溃
内存应该不会出现不够吧,毕竟是64位的机器,虚拟内存空间一定够用
物理内存16G的



#16

16G勉勉强强吧, 开多两个东西就不够了