c - 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
解决方案
推荐阅读
- python - 在 Microsoft 远程桌面服务(RDS 环境)中的非持久虚拟机上为 PyCharm 创建默认的 Python 解释器设置
- google-cloud-platform - 如何在使用 Data Loss Prevention 取消识别的文本内容中保留换行符?
- python - 反向函数也改变了原始列表
- sql - 一张表中有 2 个不同条件的 2 列
- c# - 从 .txt 文件填充和二维数组
- android - IndexOutOfBoundsException Editor.java 行 2182 仅适用于三星 Android 10
- laravel - 访问laravel中的入口页面
- python - 在 IPython 小部件中动态添加和删除列表项
- c# - 如何将选择查询放在 C# 中的列表中?我收到一个错误
- reactjs - react-slick carousel CSS,“编译失败”错误