Macos 程序集-无法设置断点lldb
我组装了这些选项Macos 程序集-无法设置断点lldb,macos,assembly,nasm,x86-64,lldb,Macos,Assembly,Nasm,X86 64,Lldb,我组装了这些选项nasm-O0-g-f macho64,但当我试图在文件中的行号处设置任何断点时,lldb抱怨“无法将断点解析到任何实际位置” 我已经开始尝试学习OS X的64位汇编,但到目前为止这是一个真正的挑战,似乎没有任何学习资源。您的汇编程序可能没有为您创建的二进制文件发出任何调试信息。您可以通过在.o文件或二进制文件的.dSYM捆绑包(如果有)上运行dwarfdump--debug line来判断 将二进制文件加载到lldb中,并运行反汇编-n function name命令。这将向您
nasm-O0-g-f macho64
,但当我试图在文件中的行号处设置任何断点时,lldb抱怨“无法将断点解析到任何实际位置”
我已经开始尝试学习OS X的64位汇编,但到目前为止这是一个真正的挑战,似乎没有任何学习资源。您的汇编程序可能没有为您创建的二进制文件发出任何调试信息。您可以通过在
.o
文件或二进制文件的.dSYM
捆绑包(如果有)上运行dwarfdump--debug line
来判断
将二进制文件加载到lldb中,并运行反汇编-n function name
命令。这将向您显示程序集-然后您可以使用断点集-地址设置断点。默认情况下,lldb将在关闭地址空间随机化(ASLR)的情况下运行二进制文件,因此每次二进制文件都将在同一地址运行,而不是在随机化地址加载程序
一个简单的例子:
% echo 'int main () { }' > a.c
% clang a.c
% lldb a.out
(lldb) target create "a.out"
Current executable set to 'a.out' (x86_64).
(lldb) disass -n main
a.out`main:
a.out[0x100000fb0] <+0>: pushq %rbp
a.out[0x100000fb1] <+1>: movq %rsp, %rbp
a.out[0x100000fb4] <+4>: xorl %eax, %eax
a.out[0x100000fb6] <+6>: popq %rbp
a.out[0x100000fb7] <+7>: retq
(lldb) br s -a 0x100000fb4
Breakpoint 1: address = 0x0000000100000fb4
(lldb) r
Process 32406 launched: '/private/tmp/a.out' (x86_64)
Process 32406 stopped
* thread #1: tid = 0x145576, 0x0000000100000fb4 a.out`main + 4, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
frame #0: 0x0000000100000fb4 a.out`main + 4
a.out`main:
-> 0x100000fb4 <+4>: xorl %eax, %eax
0x100000fb6 <+6>: popq %rbp
0x100000fb7 <+7>: retq
0x100000fb8: addl %eax, (%rax)
(lldb)
%echo'intmain(){}>a.c
%铿锵交流电
%lldb a.out
(lldb)目标创建“a.out”
当前可执行文件设置为“a.out”(x86_64)。
(lldb)disass-n main
a、 out`main:
a、 输出[0x10000FB0]:pushq%rbp
a、 输出[0x10000FB1]:movq%rsp,%rbp
a、 输出[0x100000fb4]:xorl%eax,%eax
a、 输出[0x100000fb6]:popq%rbp
a、 输出[0x10000FB7]:retq
(lldb)br s-a 0x100000fb4
断点1:地址=0x0000000100000fb4
(lldb)r
已启动进程32406:“/private/tmp/a.out”(x86_64)
进程32406已停止
*线程#1:tid=0x145576,0x0000000100000fb4 a.out`main+4,queue='com.apple.main thread',停止原因=断点1.1
帧#0:0x0000000100000fb4 a.out`main+4
a、 out`main:
->0x100000fb4:xorl%eax,%eax
0x100000fb6:popq%rbp
0x100000fb7:retq
0x100000fb8:添加%eax,(%rax)
(lldb)
以前从未这样做过,但您确定源文件已加载到LLDB中吗?您试图如何设置断点?在组装和链接之后,我只运行$lldb foo并设置断点(lldb)断点集--文件foo.asm--第12行