在我研究了汇编循环指令之后。我想测试它是否在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
但没有得到任何结果。谁能告诉我发生了什么?非常感谢你!
答案 0 :(得分:1)
___lldb_unnamed_function1
似乎是缺少符号信息的标志。这不是错误消息。要摆脱它,尝试使用调试选项编译汇编源代码。
您设置的断点只有在RCX
等于0x2
时才会停止执行。你的CPU很高,因为你做了很多的减量,在RCX
变为零之后,处理器继续执行下一条指令。