鱼C论坛

 找回密码
 立即注册
查看: 1849|回复: 14

汇编代码求解-3

[复制链接]
发表于 2023-7-14 12:20:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
问题:00401041  mov eax,[esp]  为啥不是  mov eax,[esp+4]?

          00401055 mov eax,[esp+4] 为啥不是  mov eax,[esp]?

它是把argc的值和0比较,,等于0才跳转到00401055,才把【esp+4】也就是n1的值给eax,

问题是   argc?n1:n2+3   当argc==0时,表达式为假,要执行n2+3的嘛,这就对不上啊

1

1

2

2
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-14 12:20:52 | 显示全部楼层
汇编代码中的mov eax,[esp]指令是将栈顶元素的值赋给eax寄存器。而mov eax,[esp+4]指令是将栈顶下一个元素的值赋给eax寄存器。

在这段代码中,mov eax,[esp]是将argc的值加载到eax寄存器中进行比较。这里假设esp指向了存储argc的位置。然后,它会与0进行比较,如果相等,则跳转到地址00401055。

至于为什么不是mov eax,[esp+4],这涉及到栈的结构和函数调用的约定。在一些函数调用约定中,参数通过压入栈的方式传递给函数。当函数调用时,参数按照从右到左的顺序被压入栈中。所以,在这种情况下,[esp]处保存的是第一个参数argc的值,而[esp+4]处保存的是第二个参数n1的值。

综上所述,这段代码的意图是比较argc是否为0,如果是,就执行后续的操作,否则跳转到另一个地址。对于表达式n1:n2+3,当argc为0时,由于表达式的条件为假,所以不需要执行n2+3的操作,因此无需将n1的值赋给eax寄存器。

需要注意的是,汇编代码的具体含义和操作可能会根据上下文和编译器的实现而有所不同。以上只是对常见情况的一般解释,具体情况还需要根据代码的上下文进行分析。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-14 12:25:42 | 显示全部楼层
在给定的汇编代码中,我们可以观察到该程序正在使用堆栈来操纵值并进行比较。让我们分析一下你问题中提到的具体指令。

1. `mov eax, [esp]`:这条指令将堆栈顶部的值(即存储在`[esp]`处的值)复制到`eax`寄存器中。在这种情况下,它用于获取`argc`的值。

2. `mov eax, [esp+4]`:这条指令将`[esp+4]`处的值复制到`eax`寄存器中,即获取堆栈上的第二个元素。这个值对应于C++源代码中的`n1`。

关于你对`argc ? n1 : n2+3`的困惑,让我们解释一下它是如何工作的:

- `argc`表示传递给程序的命令行参数的数量。
- 如果`argc`非零(true),程序将执行语句`n1`,因为`n1`是从输入中读取的第一个值。
- 如果`argc`为零(false),程序将执行语句`n2 + 3`,因为`n2`是从输入中读取的第二个值。

因此,根据条件(`?`)和`argc`的值,程序将相应地执行`n1`或`n2+3`。

如果您对此解释有任何疑问或问题,请提供更多上下文或进一步澄清您的问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-14 12:42:13 | 显示全部楼层
陶远航 发表于 2023-7-14 12:20
汇编代码中的mov eax,[esp]指令是将栈顶元素的值赋给eax寄存器。而mov eax,[esp+4]指令是将栈顶下一个元素 ...

????3目运算,,表达式条件为假,才执行n2+3,为啥你要说为假不执行呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-14 12:45:29 | 显示全部楼层
sfqxx 发表于 2023-7-14 12:25
在给定的汇编代码中,我们可以观察到该程序正在使用堆栈来操纵值并进行比较。让我们分析一下你问题中提到的 ...

为啥esp位置存放的是argc的值,,,图上argc在esp+0c的位置,咋变成argc在esp的位置了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-14 13:15:51 | 显示全部楼层
HWitty 发表于 2023-7-14 12:45
为啥esp位置存放的是argc的值,,,图上argc在esp+0c的位置,咋变成argc在esp的位置了

对不起,我之前的回答有一个错误。根据你提供的信息,`argc`确实存储在`esp+0C`的位置,而不是直接在`esp`的位置。

所以正确的代码应该是`mov eax, [esp+0C]`,它将`[esp+0C]`处的值复制到`eax`寄存器中,这样可以获取到`argc`的值。非常抱歉给你带来的困惑。

如果你还有其他问题,请随时提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-14 16:10:24 | 显示全部楼层
sfqxx 发表于 2023-7-14 13:15
对不起,我之前的回答有一个错误。根据你提供的信息,`argc`确实存储在`esp+0C`的位置,而不是直接在`esp ...


大哥,你认真看没哦,,,
它是把[esp+0c]值和0比较,并不是要把[esp+0c]给eax,而是通过比较后标志寄存器的值,在从栈中找n1或者n2的值给eax,

我的问题是:  n1和n2在栈中的位置是不是有错误

你看你在说啥子
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-14 17:59:13 | 显示全部楼层
HWitty 发表于 2023-7-14 16:10
大哥,你认真看没哦,,,
它是把[esp+0c]值和0比较,并不是要把[esp+0c]给eax,而是通过比较后标志寄 ...

回答不符合你的要求就不回答了。

真搞笑,我第一次见回复不严谨举报的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-15 06:44:36 | 显示全部楼层
根据你提供的代码片段来看,问题的关键在于理解栈(stack)的结构和操作。
在x86汇编语言中,ESP寄存器指向栈的顶部。当函数被调用时,参数和局部变量通常会被推送到栈上。栈是一个后进先出(LIFO)的数据结构,因此最新推送的数据位于栈的顶部。
对于第一个问题:
00401041  mov eax,[esp]
这行代码将栈顶部的值(即`[esp]`)移动到`eax`寄存器。这行代码用于将`argc`的值加载到`eax`寄存器中。因此,`argc`的值应该位于栈顶。

对于第二个问题:
00401055 mov eax,[esp+4]
这行代码将栈顶部偏移4个字节处的值(即`[esp+4]`)移动到`eax`寄存器。根据你的描述,这行代码用于将`n1`的值加载到`eax`寄存器中。因此,在这个上下文中,`n1`的值应该位于栈顶的后面4个字节处。

求求给个最佳答案吧,我真的很需要,你的最佳,就是我的动力

点评

这不就是gpt吗?  发表于 2023-7-15 08:12
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-15 09:10:12 | 显示全部楼层
sfqxx 发表于 2023-7-14 17:59
回答不符合你的要求就不回答了。

真搞笑,我第一次见回复不严谨举报的

是GPT,但是不是脚本,啊算啦,分不清,不知道大众是地址GPT还是脚本
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-15 10:32:15 | 显示全部楼层
编程追风梦 发表于 2023-7-15 09:10
是GPT,但是不是脚本,啊算啦,分不清,不知道大众是地址GPT还是脚本

让这件事情越闹越大吧,我反正就是反对楼主观点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-15 19:40:20 | 显示全部楼层
sfqxx 发表于 2023-7-15 10:32
让这件事情越闹越大吧,我反正就是反对楼主观点

啊这,冷静啊兄弟,楼主还是个新鱼油吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-1 14:54:26 | 显示全部楼层
sfqxx 发表于 2023-7-14 17:59
回答不符合你的要求就不回答了。

真搞笑,我第一次见回复不严谨举报的

他把你当成这个论坛专门的回复人员了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-1 15:09:12 | 显示全部楼层
看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 12:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表