汇编指令mov和add

时间:2018-10-10 17:49:50

标签: assembly system disassembly att

0000000000400ee0 <phase_1>:
  400ee0:   48 83 ec 08             sub    $0x8,%rsp
  400ee4:   be 00 24 40 00          mov    $0x402400,%esi
  400ee9:   e8 4a 04 00 00          callq  401338 <strings_not_equal>
  400eee:   85 c0                   test   %eax,%eax
  400ef0:   74 05                   je     400ef7 <phase_1+0x17>
  400ef2:   e8 43 05 00 00          callq  40143a <explode_bomb>
  400ef7:   48 83 c4 08             add    $0x8,%rsp
  400efb:   c3                      retq   

上面是函数的汇编代码,该函数将用户的输入字符串与程序给出的固定字符串进行比较。

我的问题是,在mov $0x402400,%esi中,为什么指令没有存储类似十进制的值,即4 * 16 ^ 5 + 2 * 16 ^ 3 + 4 * 16 ^ 1到{{1} }。相反,它实际要做的是将此地址%esi存储到$0x402400中。因此,%esi是一个不可取消引用或无法检查内存内容的整数值)还是我们可以检查该内容(取消引用)的地址?

为什么在该指令$0x402400中,add $0x8,%rsp是要存储在寄存器中的整数值$0x8?为什么在这种情况下我们不能取消引用?

PS:任何指向类似于教科书的清晰定义的链接将不胜感激。

0 个答案:

没有答案