我有一个恐慌的功能。 崩溃显示以下汇编代码。 任何人都可以解释如何将其翻译成C,这将有助于我理解这个问题。
push %rbp
mov %rsp,%rbp
sub $0x40,%rsp
mov 0xbca741(%rip),%rax
mov %r15,-0x8(%rbp)
mov %rbx,-0x28(%rbp)
mov %rdi,%r15
mov %r12,-0x20(%rbp)
mov %r13,-0x18(%rbp)
mov %r14,-0x10(%rbp)
cmpl $0x3b,0x4(%rax) --> panicked here.
该函数只接受一个参数。
答案 0 :(得分:2)
转换为C实际上是不可能的。
但这是发生了什么:
mov 0xbca741(%rip),%rax
行将静态/全局变量读入%rax
。cmpl $0x3b,0x4(%rax)
将此值作为指针处理,并尝试访问其上的偏移量4,并与0x3b(十进制59)进行比较。%rax
的指针显然无效,因此尝试访问它会导致崩溃。关键问题是它是哪个全局/静态变量。但是,如果没有C源(或使用调试信息的反汇编),则无法找到此信息。