我在使用

gcc编写用C语言编写的信号处理程序时遇到错误,在出现Segmentation fault之后显示转储的寄存器值.当我尝试使用代码访问它时:

void print_registers(FILE *fd, ucontext_t *ctx, bool fpu = false)

{

const char *flags_str[] = {

"CF", 0, "PF", 0, "AF", 0, "ZF", "SF", "TP", "IF", "DF",

"OF", 0, 0, "NT", 0, "RF", "VM", "AC", "VIF", "VIP", "ID"

};

greg_t *regs = ctx->uc_mcontext.gregs;

void *eip[1] = { (void*)regs[REG_EIP] };

char **symbol = backtrace_symbols(eip, 1);

fprintf(fd, "Registers:\neip is at ");

backtrace_symbols_fd(eip, 1, fd->_fileno);

size_type flags = regs[REG_EFL];

fprintf(fd, "eflags: %x [ ", flags);

for (size_type i = 0; i < sizeof(flags_str) / sizeof(flags_str[0]); ++i) {

if (!flags_str[i]) continue;

if (flags & (1 << i)) fprintf(fd, "%s ", flags_str[i]);

}

size_type iopl = (flags & 0x3000) >> 12;

fprintf(fd, "] iopl: %i\n"

"eax: %08x\tebx: %08x\tecx: %08x\tedx: %08x\n"

"esi: %08x\tedi: %08x\tebp: %08x\tesp: %08x\n"

"cs: %04x\tgs: %04x\tfs: %04x\n"

"ds: %04x\tes: %04x\tss: %04x\n",

iopl,

regs[REG_EAX], regs[REG_EBX], regs[REG_ECX], regs[REG_EDX],

regs[REG_ESI], regs[REG_EDI], regs[REG_EBP], regs[REG_ESP],

regs[REG_CS], regs[REG_GS], regs[REG_FS],

regs[REG_DS], regs[REG_ES], regs[REG_SS]);

}

}

我通过添加尝试了代码

#include

以及

#define _GNU_SOURCE

#ifndef REG_EIP

#define REG_EIP 0x23b46F

#endif

但是,出现的错误是:

‘REG_EIP’ undeclared (first use in this function)

(Each undeclared identifier is reported only once for each function it appears in.)

并且所有寄存器都出现错误

我尝试了很多文件……但无法得到解决方案.

任何人都可以共享解决此错误的详细信息.

感谢所有的回复者

在包含< ucontext.h之前尝试定义__USE_GNU:

#define __USE_GNU

#include

您不需要包含< sys / ucontext.h>显式,< ucontext.h>会这样做的.

linux错误说未声明,如何在Linux 32位计算机上解决REG_EIP未声明(在此函数中首次使用)错误?...相关推荐

  1. function在mysql里总是出错_如何在MySQL函数中引发错误

    如何在MySQL函数中引发错误 我创建了一个MySQL函数,如果传递给参数的值无效,则想引发一个错误. 在MySQL函数中引发错误我有哪些选择? 6个解决方案 69 votes MySQL 5.5引入 ...

  2. 错误0xC004F069在运行Microsoft Windows 非核心版本的计算机上,运行slui.exe

    前言 今天笔记本一打开,提示 错误0xC004F069在运行Microsoft Windows 非核心版本的计算机上,运行slui.exe 问题 笔记本开机提示,我们Windows系统过期,我之前买了 ...

  3. linux禁止ssh传输文件,如何在Linux下使用scp命令通过ssh安全传输文件

    原标题:如何在Linux下使用scp命令通过ssh安全传输文件 在Unix或Linux操作系统上,scp实用程序(secure copy)与更著名的命令cp类似,但用于在安全加密的网络上在主机之间传输 ...

  4. 检测linux服务器的使用情况,如何在Linux服务器中检查内存使用情况

    我们在排除服务器系统或应用程序速度减慢或行为不正常的问题时,首先要检查的是系统内存使用情况. 本文介绍了如何在Linux系统服务器中使用几个不同的命令来检查RAM的使用情况. 1.free命令 fre ...

  5. linux如何运行windows游戏,如何在Linux上运行Windows应用程序和游戏 互联网技术圈 互联网技术圈...

    在本教程中,我将向您介绍如何在Linux中运行Windows应用程序和游戏.您可能知道,Microsoft Windows使用DirectX来运行游戏.因此,在Windows平台上玩一些需要Direc ...

  6. 我的linux系统怎么输入pv,如何在Linux系统中使用pv命令

    本文介绍了如何在Linux系统中使用pv命令.内容很详细.有兴趣的朋友可以参考一下,希望对大家有帮助. PV 命令 PV由Andrew Wood开发,是Pipe Viewer的简称,意思是通过管道显示 ...

  7. linux查询当前目录剩余空间,如何在linux下查看目录的剩余空间大小

    df命令是linux系统以磁盘分区为单位查看文件系统,可以加上参数查看磁盘剩余空间信息,命令格式: df -hl 显示格式为: 文件系统 容量 已用 可用 已用% 挂载点 Filesystem Siz ...

  8. linux 怎么不检查gpg,如何在Linux上使用GPG加密和解密文件 | MOS86

    如何在Linux上使用GPG加密和解密文件... GnuPrivacy Guard (GPG) allows you to securely encrypt files so that only th ...

  9. linux 显示目录文件数,如何在Linux系统上显示当前及子目录中的文件数量

    在本指南中,我们将介绍如何在 Linux 系统上显示当前工作目录或任何目录及其子目录中的文件数量. 我们将使用 find 命令,它用于搜索目录层次结构中的文件,以及 wc 命令,它会打印每个文件或来自 ...

最新文章

  1. 图神经网络方法总结(Graph Neural Network)
  2. TCP滑动窗口(Sliding Window)原理
  3. javascript中创建对象的几种方式
  4. 公文字体字号标准2020_党政机关公文格式典型错误20例,引起重视!
  5. ECMAScript6入门简介篇
  6. Day1 安装虚拟机和centos7系统
  7. 2018.12.27|区块链技术头条
  8. ATmega328p使用硬件SPI与模拟SPI驱动74HC595,protues仿真
  9. WPS技巧之稻壳模板掌握结构全面信息
  10. 怎么防治计算机病毒,计算机病毒怎么防治
  11. 计讯物联防潮产品,无惧恶劣环境
  12. Java时间戳与时间互相转换(含毫秒及秒转换方式)
  13. OpenCV实践之路——人脸识别之一数据收集和预处理
  14. 大数数字读法 unsigned long long
  15. 看各路单词APP不顺手 索性自己写一个背单词系统
  16. vue3 + vite + ts + setup , 第七练 TSX的使用
  17. QtMetaObjectsysmtem详解之三:QMetaObject接口实现
  18. java 读取串口数据
  19. homeassistant搭建_梅林搭建home-assistant
  20. 3.1 mxc_v4l2_capture.c分析---probe函数分析

热门文章

  1. smartdraw 2008 成功安装
  2. 重置linux内核,Linux Kernel 驱动非授权重置统计漏洞
  3. python运行时修改代码会怎样_python运行时修改代码的方法——monkey patch
  4. resnet50网络结构_Resnet50详解与实践(基于mindspore)
  5. 【题解】JSOIWC2019 Round4
  6. Django restful framework之 rest接口设计规范
  7. SpringBoot入门教程(十)应用监控Actuator
  8. Javascript之 对象和原型
  9. 第二章:2.6 使用 runserver 命令把项目运行起来
  10. UVa 10082 - WERTYU 解题报告 - C语言