LLDB 符号转储
LLDB symbol dumps
我试图从 LLDB 中理解以下符号转储 shell
(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 个 "undefined" 符号,地址为 0x00
,大小为 0x00
。我的问题是这些符号是什么意思?这是否意味着它们在运行时得到解决,我真的不应该在试图理解崩溃日志中的内容时担心它们?
您的猜测是正确的,未定义符号是一个二进制文件想要从其他二进制文件使用的符号。当您的程序运行时,它们将由加载程序修复。
因此,例如,如果您编写标准 "hello world" 程序,则主二进制文件将具有 "printf" 的未定义符号。顺便说一句,这些与您在 nm
.
的输出中看到的 U
类型的符号相同
我试图从 LLDB 中理解以下符号转储 shell
(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 个 "undefined" 符号,地址为 0x00
,大小为 0x00
。我的问题是这些符号是什么意思?这是否意味着它们在运行时得到解决,我真的不应该在试图理解崩溃日志中的内容时担心它们?
您的猜测是正确的,未定义符号是一个二进制文件想要从其他二进制文件使用的符号。当您的程序运行时,它们将由加载程序修复。
因此,例如,如果您编写标准 "hello world" 程序,则主二进制文件将具有 "printf" 的未定义符号。顺便说一句,这些与您在 nm
.
U
类型的符号相同