为什么lldb转储`___ lldb_unnamed_function1 $$ 64.out`消息,当它跳过程序集`loop`指令时

时间:2014-07-12 14:42:02

标签: assembly lldb

在我研究了汇编循环指令之后。我想测试它是否在OS X中有效。

.data
output:
    .asciz "The value is: %d\n"
.text
.globl _main
_main:
    movq    $0xffffffff, %rcx
    movq    $0, %rax
loop1:
    addq    %rcx, %rax
    loop    loop1
done:
    subq    $8, %rsp
    leaq    output(%rip), %rdi
    movq    %rax, %rsi
    call    _printf
    addq    $8, %rsp

    subq    $8, %rsp
    movq    $0, %rdi
    call    _exit

此代码段完全正常。但是当我使用lldb逐步测试它时,一些奇怪的消息被抛弃了.lldb打印了

a.out`___lldb_unnamed_function1$$a.out:
-> 0x1fa4:  addq   %rcx, %rax
    0x1fa7:  loop   0x1fa4                    ; ___lldb_unnamed_function1$$a.out

a.out`done at main_64.s:16:
   0x1fa9:  subq   $0x8, %rsp
   0x1fad:  leaq   0x6c(%rip), %rdi          ; output

它有什么问题?它不支持循环指令吗?

此外,我使用br s -a 0x1fa4 -c '$rcx==0x2'%rcx==0x2时在地址0x1fa4处设置断点,但在程序再次继续后,lldb失控。立即打印提示,cpu变高。我尝试输入p/x $rcx但没有得到任何结果。谁能告诉我发生了什么?非常感谢你!

1 个答案:

答案 0 :(得分:1)

___lldb_unnamed_function1似乎是缺少符号信息的标志。这不是错误消息。要摆脱它,尝试使用调试选项编译汇编源代码。

您设置的断点只有在RCX等于0x2时才会停止执行。你的CPU很高,因为你做了很多的减量,在RCX变为零之后,处理器继续执行下一条指令。