从汇编(x64)转换为C.

时间:2013-08-28 06:48:57

标签: c assembly x86-64

我有一个恐慌的功能。 崩溃显示以下汇编代码。 任何人都可以解释如何将其翻译成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.

该函数只接受一个参数。

1 个答案:

答案 0 :(得分:2)

转换为C实际上是不可能的。

但这是发生了什么:

  1. mov 0xbca741(%rip),%rax行将静态/全局变量读入%rax
  2. cmpl $0x3b,0x4(%rax)将此值作为指针处理,并尝试访问其上的偏移量4,并与0x3b(十进制59)进行比较。
  3. 读入%rax的指针显然无效,因此尝试访问它会导致崩溃。
  4. 关键问题是它是哪个全局/静态变量。但是,如果没有C源(或使用调试信息的反汇编),则无法找到此信息。