作者:佳佳的梦Aas | 来源:互联网 | 2022-10-17 09:51
1> fuz..:
该syscall
指令则会覆盖寄存器rcx
和r11
。编译器假定保留其值,从而导致无限循环。将这两个添加到问题列表以解决此问题:
#define write(RESULT, FD, BUFF, SIZE) \
asm volatile ("syscall" : \
"=a" (RESULT) : \
"D" (FD), "S" (BUFF), "d" (SIZE), "a" (1) : \
"rcx", "r11", "memory")
@fuz:这是一个示例:https://pastebin.com/D4fy0uS3。由于关闭了编译器的所有不必要的加载并在内存中进行存储,因此在优化关闭时,它会按预期运行。然后用-O3尝试。请注意,该字符串已放置在堆栈上。如果查看生成的代码,您会发现优化器从未将字符串写入堆栈,因为它不知道字符串中的数据正在使用中。它只知道指向字符串的指针被用作输入,而不知道指针指向的对象。