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:任何指向类似于教科书的清晰定义的链接将不胜感激。