看起来the suggested way to set a register to 0是:
xor %eax, %eax # like mov $0, %eax but sets FLAGS
将寄存器设置为1的相应首选方法是什么?我想到的一些是:
mov $1, %eax
or $1, %eax # as discussed in comments, doesn't work for most EAX inputs
另外,在gdb
或其他地方是否有办法快速查看带有所有操作数的指令的字节大小?除非我的计算错误(并且我很不擅长以十六进制计数),否则它的大小如下所示(来自gdb):
>>> x/7i $rip
=> 0x400078 <_start>: xor %eax,%eax # 2 bytes
0x40007a <_start+2>: xor %rax,%rax # 3 bytes
0x40007d <_start+5>: or $0x1,%rax # 4 bytes
0x400081 <_start+9>: or $0x1,%eax # 3 bytes
0x400084 <_start+12>: mov $0x1,%eax # 5 bytes
0x400089 <_start+17>: mov $0x1,%rax # 7 bytes
0x400090 <_start+24>: