Свалки символов LLDB

Я пытаюсь понять следующий дамп символа из оболочки LLDB

(lldb) target create --no-dependents '9.0/Symbols/Library/Application Support/WatchKit/WK'
Current executable set to '9.0/Symbols/Library/Application Support/WatchKit/WK' (armv7k).
(lldb) image list
[  0] 675ED1EB-BAA0-3453-B7B1-3E69310F40FD 0x00004000 9.0/Symbols/Library/Application Support/WatchKit/WK
(lldb) image dump symtab
Dumping symbol table for 1 modules.
Symtab, file = 9.0/Symbols/Library/Application Support/WatchKit/WK, num_symbols = 6:
               Debug symbol
               |Synthetic symbol
               ||Externally Visible
               |||
Index   UserID DSX Type            File Address/Value Load Address       Size               Flags      Name
------- ------ --- --------------- ------------------ ------------------ ------------------ ---------- ----------------------------------
[    0]      0     Code            0x0000000000007fcc                    0x0000000000000030 0x001e0000  stub helpers
[    1]      1   X Data            0x0000000000004000                    0x0000000000003fcc 0x000f0010 _mh_execute_header
[    2]      2   X ReExported                                                               0x000b0000 main -> /System/Library/PrivateFrameworks/SockPuppetGizmo.framework/SockPuppetGizmo`_SPApplicationMain
[    3]      3   X Undefined       0x0000000000000000                    0x0000000000000000 0x00010100 _SPApplicationMain
[    4]      4   X Undefined       0x0000000000000000                    0x0000000000000000 0x00010500 dyld_stub_binder
[    5]      5  S  Trampoline      0x0000000000007ffc                    0x0000000000000004 0x00000000 main

Большую часть этого я могу понять, потому что с символом связаны адреса и размеры, но некоторые из них я не понимаю. В этом случае есть 2 "неопределенных" символа с 0x00 для адреса и 0x00 для размера. Мой вопрос: что означают эти символы? Означает ли это, что они разрешаются во время выполнения, и я действительно не должен беспокоиться о них при попытке разобраться в событиях в журналах сбоев?

1 ответ

Решение

Ваше предположение верно, неопределенные символы - это символы, которые один двоичный файл хочет использовать из другого двоичного файла. Они будут исправлены загрузчиком при запуске вашей программы.

Так, например, если вы напишите стандартную программу "hello world", основной двоичный файл будет иметь неопределенный символ "printf". Кстати, они такие же, как символы типа U что вы видите на выходе nm,

Другие вопросы по тегам