%eax,(%rsp)和%eax,%rsp有什么区别
时间: 2023-11-06 10:38:49 浏览: 225
`%eax,(%rsp)` 和 `%eax,%rsp` 之间有很大的区别。
`%eax,(%rsp)` 是一种内存寻址方式,它将 `%eax` 寄存器的值作为地址,从内存中读取一个值。`(%rsp)` 是一个偏移量,它表示在栈指针 `%rsp` 的当前值的基础上的一个偏移量,也就是说,它将 `%rsp` 寄存器的值加上偏移量得到一个地址,从该地址处读取一个值。
`%eax,%rsp` 是一种指令,它将 `%eax` 寄存器的值存储到 `%rsp` 寄存器中。
因此,`%eax,(%rsp)` 和 `%eax,%rsp` 是完全不同的指令语句,它们的操作和结果也是不同的。
相关问题
已知rsp是整数A在内存中的位置,rsp + 4是整数B在内存中的位置。0x401649是程序爆炸的内存位置。需要猜测整数A和整数B的值,使得程序不会爆炸。 其余内存数据如下图所示: 内存地址 数据 4026E0 0x0000000A 4026E4 0x00000002 4026E8 0x0000000E 4026EC 0x00000007 4026F0 0x00000008 4026F4 0x0000000C 4026F8 0x0000000F 4026FC 0x0000000B 402700 0x00000000 402704 0x00000004 402708 0x00000001 40270C 0x0000000D 402710 0x00000003 402714 0x00000009 402718 0x00000006 40271C 0x00000005 阅读下面代码,回答以下问题: (1)整数A和整数B分别为多少,才能使炸弹不爆炸?401154: 8b 04 24 mov (%rsp),%eax 401157: 83 e0 0f and $0xf,%eax 40115a: 89 04 24 mov %eax,(%rsp) 40115d: 83 f8 0f cmp $0xf,%eax 401160: 74 2f je 401191 <phase_5+0x6d> 401162: b9 00 00 00 00 mov $0x0,%ecx 401167: ba 00 00 00 00 mov $0x0,%edx 40116c: 83 c2 01 add $0x1,%edx 401171: 8b 04 85 e0 26 40 00 mov 0x4026e0(,%rax,4),%eax 401178: 01 c1 add %eax,%ecx 40117a: 83 f8 0f cmp $0xf,%eax 40117d: 75 ed jne 40116c <phase_5+0x48> 40117f: c7 04 24 0f 00 00 00 movl $0xf,(%rsp) 401186: 83 fa 0f cmp $0xf,%edx 401189: 75 06 jne 401191 <phase_5+0x6d> 40118b: 3b 4c 24 04 cmp 0x4(%rsp),%ecx 40118f: 74 05 je 401196 <phase_5+0x72> 401191: e8 b3 04 00 00 callq 401649 <explode_bomb> 401196: 48 8b 44 24 08 mov 0x8(%rsp),%rax 40119b: 64 48 33 04 25 28 00 xor %fs:0x28,%rax 4011a2: 00 00 4011a4: 74 05 je 4011ab <phase_5+0x87> 4011a6: e8 55 f9 ff ff callq 400b00 <__stack_chk_fail@plt> 4011ab: 48 83 c4 18 add $0x18,%rsp 4011af: c3 retq
根据代码可知,程序要求A的值为0到15之间的整数,且A和B的和等于一个固定的值。由于程序要求A和B的和等于固定值,这个固定值可以算出来。固定值为0x0c,即12。因此,可以列出方程A + B = 0x0c。又因为A的值为0到15之间的整数,所以B的值也是0到15之间的整数。根据内存中的数据,可以知道0x4026f4和0x402710分别是整数A和整数B的值。因此,整数A的值为9,整数B的值为3,程序不会爆炸。
在x86-64汇编中,下面每一行汇编指令都存在若错误,请分别指出movb $oxf,(%ebx)movl %rax,(%rsp)movw(%rax), 4(%rsp)movq %rax, $0x123movl %eax, %rdx
在x86-64汇编中,下面每一行汇编指令存在如下错误:
1. 第一行指令错误,应该是movb $0xf, (%ebx)。
2. 第二行指令没有错误。
3. 第三行指令错误,应该是movw (%rax), 4(%rsp)。
4. 第四行指令错误,应该是movq %rax, 0x123。
5. 第五行指令错误,应该是movl %eax, %edx。
阅读全文