首页 > 解决方案 > gcc 生成的代码中的操作码无效(异常 6)

问题描述

我正在编写自己的操作系统,它有自己的 printf 功能。在这个函数中,我成功实现了 %d、%u、%x、%c 和 %s 参数,但由于某种原因,%p 的类比(与 %d、u、x)代码导致无效的操作码异常,这意味着它要么是 gasm 错误或 UB。

这是代码:

} else if (*format == 'p') {
            format++;
            void *p = va_arg(parameters, void*);   <-- invalid opcode exception triggers in this
            long n = (long) p;                         line of code (I know from GDB)
            char buf[64] = "0x";
            itoa64(n, &buf[2], 16);
            size_t len = strlen(buf);
            tty_puts(buf);
            written += len;
} else {

这是指令,保存的指令指针指向:

0x202ee2 <printf+866>:  pxor   %xmm0,%xmm0

标签: cgccx86-64variadic-functions

解决方案


推荐阅读