0

我有一个功能,它惊慌失措。崩溃显示以下汇编代码。谁能解释一下如何将它翻译成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.

该函数只接受一个参数。

4

1 回答 1

2

翻译成 C 是不可能的。

但这是发生了什么:

  1. 该行将mov 0xbca741(%rip),%rax静态/全局变量读入%rax.
  2. cmpl $0x3b,0x4(%rax)将此值视为指针,并尝试访问其上的偏移量 4,并与 0x3b(十进制 59)进行比较。
  3. 读入的指针%rax显然无效,因此试图访问它会导致崩溃。

关键问题是它是哪个全局/静态变量。但是如果没有 C 源代码(或使用调试信息的反汇编),则无法找到此信息。

于 2013-08-28T07:18:07.150 回答