当前位置: 首页 > 知识库问答 >
问题:

将x86转换为c。简单的if/else函数

章玮
2023-03-14

我在这里挑战。

我正在参加名为Mini #2的练习:初级反编译器。在这里,我必须查看一些程序集,然后将其转换为c函数。程序集如下所示:

Assembly (x86-64)
0x00:  push   rbp
0x01:  mov    rbp,rsp
0x04:  mov    DWORD PTR [rbp-0x4],edi
0x07:  mov    DWORD PTR [rbp-0x8],esi
0x0a:  mov    eax,DWORD PTR [rbp-0x4]
0x0d:  cmp    eax,DWORD PTR [rbp-0x8]
0x10:  jl     17 <foo+0x17>
0x12:  mov    eax,DWORD PTR [rbp-0x4]
0x15:  jmp    1a <foo+0x1a>
0x17:  mov    eax,DWORD PTR [rbp-0x8]
0x1a:  pop    rbp
0x1b:  ret

因此,行:0x04:mov DWORD PTR[rbp-0x4],edi 0x07:mov DUORD PTR[rbp-x8],esi我很有把握对应于两个参数。然后是带有il的if语句,它决定函数的结束方式。我自己的翻译是这样的:

int foo(int a, int b) {
int c = a;
if (c > a){
    c = a;
} else {
    c = b;
}
return c;
}

因为在我看来,函数所做的一切都是比较两个输入,然后返回较大的输入,将较大的输入存储在eax中。

在线代码检查器告诉我我错了。我可能哪里出错了?

共有1个答案

朱昊乾
2023-03-14

我不知道你的checker有多挑剔,但是rbp下面的存储是针对局部变量的,所以它是把形参复制到局部变量内存中。

此外,您正在将第一个参数值与其本身进行比较,因此执行

此外,你是对的,这个关系应该被否定,才能把它带到C,但是相反

 类似资料:
  • 本文向大家介绍C# if, if...else, if... else if ,包括了C# if, if...else, if... else if 的使用技巧和注意事项,需要的朋友参考一下 示例 该if语句用于控制程序的流程。一条if语句根据Boolean表达式的值标识要运行的语句。 对于单个语句,braces{}是可选的,但建议使用。 该if还可以有一个else条款,将在案件条件的计算结果来执

  • 这里我的代码检测< code>mimeType是否等于某个MIME类型,如果是,它将进行某种转换 我把代码缩短了,因为它有很多else if语句,什么设计模式适合去掉很多if和else或者else if语句?

  • 我正在尝试理解一个java程序,它使用lambda将对象返回到接口的引用变量中。我想将lambda转换为简单的java函数,但不知道如何做到。 程序如下:- 界面如下:- 如何将此程序转换为简单的java程序,而不使用lambda进行学习。请帮忙。

  • 问题内容: 伙计们,我有几个问题: 语句和an 之间在JavaScript中是否存在性能差异? 如果可以,为什么? 是的行为和跨浏览器的不同?(FireFox,IE,Chrome,Opera,Safari) 提出这个问题的原因是,在Firefox中大约有1000多个案例的情况下,我似乎获得了更好的性能。 编辑 Unfortuantly这不是我的代码JavaScript是正在生产服务器端从编译的库,

  • 本文向大家介绍对vue v-if v-else-if v-else 的简单使用详解,包括了对vue v-if v-else-if v-else 的简单使用详解的使用技巧和注意事项,需要的朋友参考一下 首先vue.js请注意 2.1.0版本以上方可使用v-else-if 页面展示如下: vue.js下载:https://github.com/vuejs/vue 以上这篇对vue v-if v-els

  • 我有一个if else语句,它可能会在不久的将来增长。 因为,这看起来已经很乱了,我想如果我能在这里应用任何设计模式会更好。我研究了战略模式,但我不确定这是否会降低其他条件。有什么建议吗?