【问题标题】:need help Trying to convert c+ to machine language [closed]需要帮助尝试将 c+ 转换为机器语言 [关闭]
【发布时间】:2014-04-30 22:31:38
【问题描述】:

这是我要转换的代码

int sum(int n) {
  if(n<=1) 
    return n;
  else
    return n+sum(n-1);
}

我需要帮助将 c+ 代码转换为机器语言

i assume you use an add 
4000000000        to initialize eax to 0 which would be n
and jump greater equal would be 
7500000001

一说到功能部分,我就迷路了:

【问题讨论】:

  • 我认为存在将 C+ 代码转换为机器代码的计算机程序。但我不确定。
  • @KerrekSB:仅当 C+ 是存在的实际事物时,据我所知并非如此。
  • 您是想弄清楚如何在汇编中实现相同的算法,还是在寻找一种方法来查看编译器为实现此功能而生成的汇编代码?
  • 编译器产生这个函数的汇编代码(我实际上需要机器码)

标签: assembly x86


【解决方案1】:

如果你编译你的 sn-p:

g++ -g -c filename.cpp

GCC 将生成一个未链接的 (-c) 目标文件,其中包含名为 filename.o 的调试信息 (-g)。如果你然后运行

objdump -d -M intel -S filename.o

它将很好地显示文件的反汇编+机器代码,如下所示:

machine-code.o:     file format elf64-x86-64


Disassembly of section .text:

0000000000000000 <_Z3sumi>:
int sum(int n) {
   0:   55                      push   rbp
   1:   48 89 e5                mov    rbp,rsp
   4:   48 83 ec 10             sub    rsp,0x10
   8:   89 7d fc                mov    DWORD PTR [rbp-0x4],edi
  if(n<=1)
   b:   83 7d fc 01             cmp    DWORD PTR [rbp-0x4],0x1
   f:   7f 05                   jg     16 <_Z3sumi+0x16>
    return n;
  11:   8b 45 fc                mov    eax,DWORD PTR [rbp-0x4]
  14:   eb 10                   jmp    26 <_Z3sumi+0x26>
  else
    return n+sum(n-1);
  16:   8b 45 fc                mov    eax,DWORD PTR [rbp-0x4]
  19:   83 e8 01                sub    eax,0x1
  1c:   89 c7                   mov    edi,eax
  1e:   e8 00 00 00 00          call   23 <_Z3sumi+0x23>
  23:   03 45 fc                add    eax,DWORD PTR [rbp-0x4]
}
  26:   c9                      leave
  27:   c3                      ret

这可能对您有用。在这种情况下,它产生的机器代码似乎是:

554889e54883ec10897dfc837dfc017f058b45fceb108b45fc83e80189c7e8000000000345fcc9c3

【讨论】:

    猜你喜欢
    • 2011-07-09
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 2015-03-27
    • 1970-01-01
    • 1970-01-01
    • 2016-02-17
    相关资源
    最近更新 更多