Свалки символов 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
,