x86 毫无意义的一段小代码还是?
x86 pointless piece of small code or?
我在学校有一个项目作业是臭名昭著的 x86 炸弹。在代码的某一点,编译器执行了这条指令:
mov 0x1c(%esp),%eax
其次是
and [=11=]xf,%eax
然后将 %eax 放回原来的位置:
mov %eax,0x1c(%esp)
您认为这是编译器自动完成的,还是指导员所做的只是让我感到困惑,让我更难弄清楚发生了什么?因为据我了解,这部分代码完全没有任何作用。从堆栈中取出一个 4 字节的字,使用二进制数“1111”对其最后 4 位进行指令,然后将其放回堆栈中的同一位置。这对我来说似乎毫无意义。我错过了什么吗?
对@lurker 和@RossRidge 的支持,说明;
and [=10=]xf, %eax
用于屏蔽除 %eax 内容的最后 4 位之外的所有内容。
我在学校有一个项目作业是臭名昭著的 x86 炸弹。在代码的某一点,编译器执行了这条指令:
mov 0x1c(%esp),%eax
其次是
and [=11=]xf,%eax
然后将 %eax 放回原来的位置:
mov %eax,0x1c(%esp)
您认为这是编译器自动完成的,还是指导员所做的只是让我感到困惑,让我更难弄清楚发生了什么?因为据我了解,这部分代码完全没有任何作用。从堆栈中取出一个 4 字节的字,使用二进制数“1111”对其最后 4 位进行指令,然后将其放回堆栈中的同一位置。这对我来说似乎毫无意义。我错过了什么吗?
对@lurker 和@RossRidge 的支持,说明;
and [=10=]xf, %eax
用于屏蔽除 %eax 内容的最后 4 位之外的所有内容。