si_user_byuid / getpwuid中的内存泄漏源自iOS中的CPSharedResourcesDirectory

时间:2012-06-22 16:18:43

标签: objective-c ios memory-leaks arm getpwuid

我正处于一个产品的优化/分析阶段,该产品将在几周内上线,我很惊讶地发现一些泄漏(我相信)来自我的代码。其中一个是iOS 5.1.1中存在的strdup / malloc泄漏,除了等待更新之外我什么也做不了。 然而今天我发现了一个新的,我正在试图找出泄漏的位置和方式。 仪器报告:

     Bytes Used         # Leaks Symbol Name
     16 Bytes  100.0%   1       start
     16 Bytes  100.0%   1        main
     16 Bytes  100.0%   1         UIApplicationMain
     16 Bytes  100.0%   1          -[UIApplication _run]
     16 Bytes  100.0%   1           _UIAccessibilityInitialize
     16 Bytes  100.0%   1            -[UIApplication(UIKitApplicationAccessibility) _accessibilityInit]
     16 Bytes  100.0%   1             -[UIApplication(UIKitApplicationAccessibility) _updateAccessibilitySettingsLoader]
     16 Bytes  100.0%   1              _AXSAccessibilityEnabled
     16 Bytes  100.0%   1               _getBooleanPreference
     16 Bytes  100.0%   1                CPCopySharedResourcesPreferencesDomainForDomain
     16 Bytes  100.0%   1                 CPSharedResourcesDirectory
     16 Bytes  100.0%   1                  getpwuid
     16 Bytes  100.0%   1                   si_user_byuid
     16 Bytes  100.0%   1                    search_item_bynumber
     16 Bytes  100.0%   1                     si_user_byuid
     16 Bytes  100.0%   1                      _fsi_get_user
     16 Bytes  100.0%   1                       0x119048
     16 Bytes  100.0%   1                        0x1180e4
     16 Bytes  100.0%   1                         malloc

从我做过的一点挖掘中,我发现getpwuid是由<pwd.h>导入的unix / linux函数。 双击Instruments中的si_user_byuid会出现“无源”符号,双击getpwuid会出现arm7程序集(我很抱歉通知您我不熟悉):

+0x0    push                           {r4, r5, r7, lr}
+0x2    add                            r7, sp, #8
+0x4    movw.w                         r5, #18506  ; 0x484a
+0x8    movt.w                         r5, #3265  ; 0xcc1
+0xc    mov                            r4, r0
+0xe    add                            r5, r15
+0x10   ldr                            r0, [r5]
+0x12   cbnz                           getpwuid
+0x14   movw.w                         r0, #47748  ; 0xba84
+0x18   movt.w                         r0, #1  ; 0x1
+0x1c   add                            r0, r15
+0x1e   bl.w                           getpwuid
+0x22   str                            r0, [r5]
+0x24   mov                            r1, r4
+0x26   bl.w                           getpwuid
+0x2a   mov                            r4, r0
+0x2c   movs                           r0, #201  ; 0xc9
+0x2e   mov                            r1, r4
+0x30   bl.w                           getpwuid
+0x34   movs                           r0, #0  ; 0x0
+0x36   cmp                            r4, #0  ; 0x0
+0x38   it                             ne
+0x3a   addne.w                        r0, r4, #28  ; 0x1c
+0x3e   pop                            {r4, r5, r7, pc}

所以:

  • 有没有人见过这个?
  • 这可能是假阳性吗?
  • 是否仅限于iOS 5.1.1?

1 个答案:

答案 0 :(得分:2)

以下是从getpwuid开始的the whole thing的来源。从快速看,似乎有一些缓存正在进行,所以除非漏洞很大,否则我不会太担心。