【linux学习指南】Linux进程信号产生(三) 硬件异常&&除零出错?&&野指针异常?&&core文件

?前言

硬件异常被硬件以某种⽅式被硬件检测到并通知内核,然后内核向当前进程发送适当的信号。例如当前进程执⾏了除以0的指令,cpu的运算单元会产⽣异常,内核将这个异常解释为sigfpe信号发送给进程。再⽐如当前进程访问了⾮法内存地址,mmu会产⽣异常,内核将这个异常解释为sigsegv信号发送给进程。

?模拟除0

【linux学习指南】Linux进程信号产生(三) 硬件异常&&除零出错?&&野指针异常?&&core文件

代码语言:javascript代码运行次数:0运行复制

#include #include #include #include #include int main(){    if(fork() == 0)    {        sleep(1);        int a = 10;        a /= 0;        exit(0);    }    int status = 0;    waitpid(-1, &status, 0);    printf("exit sinal: %d, core dump: %dn", status&0x7F,(status>>7)&1);        return 0;}
【linux学习指南】Linux进程信号产生(三) 硬件异常&&除零出错?&&野指针异常?&&core文件
【linux学习指南】Linux进程信号产生(三) 硬件异常&&除零出错?&&野指针异常?&&core文件

?除0出错?

【linux学习指南】Linux进程信号产生(三) 硬件异常&&除零出错?&&野指针异常?&&core文件

操作系统如何检测进程内部错误 当进程执行指令时,CPU 硬件会在执行某些操作(如除法运算)的过程中检查操作数是否合法。以整数除法为例,CPU 的算术逻辑单元(ALU)在执行除法操作时,会检查除数是否为零。如果除数为零,这是一种非法的算术操作,硬件会自动触发一个异常条件。

整个程序的执行流程是:

首先,在地址内存空间中加载好了代码和数据,开始:通过地址寄存器eax进行存储操作,存储10,存储时将寄存器ebx的值设为0CPU中存在一个状态寄存器,称为eFlags寄存器。

CPU的算术逻辑单元(ALU)在执行操作时,会检查除数是否为0。如果除数为0,这是一种非法操作,会触发异常条件。此时,硬件会将状态eFlags寄存器中的溢出标志位置为1

OS系统要不要知道CPU(硬件)内部出错了? 操作系统需要知道CPU内部出现了错误。它可以通过找到引发异常的进程,然后向该进程发送信号来终止该进程。但即使进程被杀死,其他进程仍需要进行调度和上下文切换等操作。

OS会说:谁把我的CPU搞坏了,接下来就要通过信号杀掉进程!,那OS怎么知道是哪个信号?此时进程中,我们把8号信号补捉了,但是我们进程没有立刻退出,立刻被杀掉!因为进程还需要进行被OS调度:切换(保存上下文数据),进行(比如后续的代码操作)等等

当这个异常进程被杀死前,OS需要保存上下文数据,保证下次再调用时恢复。因此,在上下文切换时,需要保存eax,ebx,ecx,eFlags等一系列寄存器的值。当保存好后,OS调度下一个进程,CPU寄存器只有一套,把上下文数据恢复进来,这时,Efalgs标志位被恢复,溢出标志位一直都是1~这个时候,这个进程又开始死循环异常。

总结: 无论OS需要等待该死循环进程结束后,进程假如后面还有代码,没有退出,再进行后面代码处理,Efalgs标志位,溢出标志位一直都是1~,一样死循环。当重新进来下一个进程,恢复执行时,上下文数据,Efalgs标志位被恢复,溢出标志位一直都是1,会再次触发异常,陷入死循环。

巧文书 巧文书

巧文书是一款AI写标书、AI写方案的产品。通过自研的先进AI大模型,精准解析招标文件,智能生成投标内容。

巧文书 61 查看详情 巧文书

总的来说,这段描述了CPU发生除零错误时的异常处理流程,包括硬件触发异常、OS发现错误、终止异常进程,以及进程切换时上下文保存等步骤。整个过程涉及CPU硬件和操作系统的协作。

?野指针异常?

【linux学习指南】Linux进程信号产生(三) 硬件异常&&除零出错?&&野指针异常?&&core文件

首先数据和代码在磁盘中,然后磁盘的随物理地址加载到物理内存中,物理内存中也有地址,这个地址为虚拟地址,页表右边是虚拟地址,左边是物理地址。pc存放的下一条执行指令的虚拟,经过pc指令传递给MMU硬件和CR3命令的处理,虚拟地址就可以找到页表的右边的物理地址,当除0这个指令传递给MMU去查页表时,访问0号地址,但是零号地址是无法访问的,这个时候MMU开始出错,一出错,找到这个进程,处理这个进程,进程还不能退出,后续代码也许需要执行,OS需要对进程进行调度,切换,执行,而MMU也有一套寄存器,当这个寄存器除以0出错之后,然后寄存器喵喵也会进行上下文的数据保存。保存之后,他就即使OS调度下一个进程,或者切换这个状态,寄存器状态一直同样也为一,MMU会一直报错,然后就会进程异常终止,但一直没退出。

总结: 由此可以确认,我们在C/C++当中除零,内存越界等异常,在系统层⾯上,是被当成信号处理的。

注意: 通过上⾯的实验,我们可能发现: 发现⼀直有8号信号产⽣被我们捕获,这是为什么呢?上⾯我们只提到CPU运算异常后,如何处理后续的流程,实际上OS会检查应⽤程序的异常情况,其实在CPU中有⼀些控制和状态寄存器,主要⽤于控制处理器的操作,通常由操作系统代码使⽤。状态寄存器可以简单理解 为⼀个位图,对应着⼀些状态标记位、溢出标记位。OS会检测是否存在异常状态,有异常存在就会调⽤对应的异常处理⽅法。

除零异常后,我们并没有清理内存,关闭进程打开的⽂件,切换进程等操作,所以CPU中还保留上下⽂数据以及寄存器内容,除零异常会⼀直存在,就有了我们看到的⼀直发出异常信号的现象。访问⾮法内存其实也是如此,⼤家可以⾃⾏实验。

?⼦进程退出coredump

【linux学习指南】Linux进程信号产生(三) 硬件异常&&除零出错?&&野指针异常?&&core文件

代码语言:javascript代码运行次数:0运行复制

int main(){    if(fork() == 0)    {        sleep(1);        int a = 10;        a /= 0;        exit(0);    }    int status = 0;    waitpid(-1, &status, 0);    printf("exit sinal: %d, core dump: %dn", status&0x7F,(status>>7)&1);    return 0;}

指令:wks@hcss-ecs-ab43:~/code/signal24$ man 7 signal

代码语言:javascript代码运行次数:0运行复制

   Standard signals       Linux supports the standard signals listed  be‐       low.   The second column of the table indicates       which standard (if any) specified  the  signal:       "P1990"  indicates that the signal is described       in the original POSIX.1-1990 standard;  "P2001"       indicates  that  the  signal was added in SUSv2       and POSIX.1-2001.       "P1990"  indicates that the signal is described       in the original POSIX.1-1990 standard;  "P2001"       indicates  that  the  signal was added in SUSv2       and POSIX.1-2001.       Signal      Standard   Action   Comment       ────────────────────────────────────────────────────────────────────────       SIGABRT      P1990      Core    Abort signal from abort(3)       SIGALRM      P1990      Term    Timer signal from alarm(2)       SIGBUS       P2001      Core    Bus error (bad memory access)       SIGCHLD      P1990      Ign     Child stopped or terminated       SIGCLD         -        Ign     A synonym for SIGCHLD       SIGCONT      P1990      Cont    Continue if stopped       SIGEMT         -        Term    Emulator trap       SIGFPE       P1990      Core    Floating-point exception       SIGHUP       P1990      Term    Hangup detected on controlling terminal                                       or death of controlling process       SIGILL       P1990      Core    Illegal Instruction       SIGINFO        -                A synonym for SIGPWR       SIGINT       P1990      Term    Interrupt from keyboard       SIGIO          -        Term    I/O now possible (4.2BSD)       SIGIOT         -        Core    IOT trap. A synonym for SIGABRT       SIGKILL      P1990      Term    Kill signal       SIGLOST        -        Term    File lock lost (unused)       SIGPIPE      P1990      Term    Broken pipe: write to pipe with no                                       readers; see pipe(7)       SIGPOLL      P2001      Term    Pollable event (Sys V);                                       synonym for SIGIO       SIGPROF      P2001      Term    Profiling timer expired       SIGPWR         -        Term    Power failure (System V)       SIGQUIT      P1990      Core    Quit from keyboard       SIGSEGV      P1990      Core    Invalid memory reference       SIGSTKFLT      -        Term    Stack fault on coprocessor (unused)       SIGSTOP      P1990      Stop    Stop process       SIGTSTP      P1990      Stop    Stop typed at terminal       SIGSYS       P2001      Core    Bad system call (SVr4);                                       see also seccomp(2)       SIGTERM      P1990      Term    Termination signal       SIGTRAP      P2001      Core    Trace/breakpoint trap       SIGTTIN      P1990      Stop    Terminal input for background process       SIGTTOU      P1990      Stop    Terminal output for background process       SIGUNUSED      -        Core    Synonymous with SIGSYS       SIGURG       P2001      Ign     Urgent condition on socket (4.2BSD)       SIGUSR1      P1990      Term    User-defined signal 1       SIGUSR2      P1990      Term    User-defined signal 2       SIGVTALRM    P2001      Term    Virtual alarm clock (4.2BSD)       SIGXCPU      P2001      Core    CPU time limit exceeded (4.2BSD);                                       see setrlimit(2)       SIGXFSZ      P2001      Core    File size limit exceeded (4.2BSD);                                       see setrlimit(2)       SIGWINCH       -        Ign     Window resize signal (4.3BSD, Sun)       The  signals  SIGKILL  and  SIGSTOP  cannot  be       caught, blocked, or ignored.
【linux学习指南】Linux进程信号产生(三) 硬件异常&&除零出错?&&野指针异常?&&core文件

?Core Dump

【linux学习指南】Linux进程信号产生(三) 硬件异常&&除零出错?&&野指针异常?&&core文件

SIGINT的默认处理动作是终止进程,SIGQUIT的默认处理动作是终止进程并且Core Dump,现在我们来验证一下。⾸先解释什么是CoreDump。当⼀个进程要异常终⽌时,可以选择把进程的⽤⼾空间内存数据全部保存到磁盘上,⽂件名通常是core,这叫做CoreDump。进程异常终⽌通常是因为有Bug,⽐如⾮法内存访问导致段错误,事后可以⽤调试器检查core⽂件以查清错误原因,这叫做Post-mortem Debug (事后调试)。一个进程允许产生多大的core文件取决于进程的Resource Limit(这个信息保存在PCB中)。默认是不允许产生core文件的,因为core文件中可能包含用户密码等敏感信息,不安全。在开发调试阶段可以用ulimit命令改变这个限制,允许产生core文件。首先用ulimit|命令改变shell进程的Resource Limit ,如允许core|文件最大为1024K: $ ulimit -c1024

【linux学习指南】Linux进程信号产生(三) 硬件异常&&除零出错?&&野指针异常?&&core文件

core-file core :事后调试

?总结

【linux学习指南】Linux进程信号产生(三) 硬件异常&&除零出错?&&野指针异常?&&core文件

以上就是【linux学习指南】Linux进程信号产生(三) 硬件异常&&除零出错?&&野指针异常?&&core文件的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/431570.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月7日 14:12:40
下一篇 2025年11月7日 14:14:02

相关推荐

  • 以太坊免费下载安装 以太坊官网版

    获取以太坊(ETH)的主流平台包括币安、欧易、火币和Gate.io。1. 币安提供多种支付方式购买ETH,并具备强大的生态系统支持;2. 欧易以衍生品交易和内置Web3账户著称,适合探索DeFi和NFT;3. 火币运营稳定,界面简洁,适合寻求可靠交易环境的用户;4. Gate.io币种丰富,适合希望…

    2025年12月8日
    000
  • ETH交易平台如何注册?官方App三步快速完成

    开始进行以太坊(eth)交易,通常需要在一家加密货币交易平台拥有一个账户。选择一个合适的平台并完成注册是第一步。许多交易平台都提供了便捷的手机官方app,让注册过程变得更加简单。本文将介绍如何通过官方app快速完成eth交易平台的注册。 准备开始:选择与下载交易平台官方App 1. 选择一个信誉良好…

    2025年12月8日
    000
  • 以太坊交易所App卡顿怎么办?官网下载最新稳定版

    使用以太坊交易所app进行交易时,遇到卡顿是许多用户可能经历的问题。交易app的响应速度直接影响到操作的流畅性和时机的把握。了解造成卡顿的原因并掌握相应的解决办法,对于提升使用体验非常重要。 分析App卡顿的常见原因 1、网络连接不稳定或信号弱。 加密货币交易App需要实时数据传输,如果网络环境不佳…

    2025年12月8日
    000
  • Webus国际、Ripple策略控股与XRP支付:纽约瞬间看交易

    webus international 与 ripple strategy holdings 达成潜在 1 亿美元合作,加速 xrp 支付及区块链忠诚度工具布局:深度解析 Webus International、Ripple Strategy Holdings 与 XRP 支付:这项合作的简要剖析 …

    2025年12月8日
    000
  • 迷因币还能出现万倍币吗 曾经出现的万倍币有哪些

    迷因币的万倍神话由社区驱动、叙事力量和低市值共同铸就。1.社区驱动是核心,通过社交媒体传播形成声浪,实现低成本高效营销;2.叙事力量提供文化粘性,以简单有趣的故事引发情感共鸣,赋予代币身份认同;3.极低初始市值构成数学基础,少量资金即可引发价格剧烈波动,便于早期参与者获取高回报;4.KOL“喊单”效…

    2025年12月8日
    000
  • 2025年稳定币有哪些_2025年稳定币列表

    一键直达|2025主流加密资产交易所平台 Binance币安 Huobi火币 欧易OKX 2025年主流稳定币列表,稳定币作为数字货币生态中的重要组成部分,为加密资产交易和支付提供了价格稳定的锚定资产。以下是2025年广泛应用且具备较高市场认可度的稳定币名单。 1. Tether(USDT) 发行机…

    2025年12月8日
    000
  • 稳定币是什么类型币种_一文了解稳定币是什么

    一键直达|2025主流加密资产交易所平台 Binance币安 Huobi火币 欧易OKX 稳定币是什么类型币种?稳定币是一种特殊类型的加密货币,设计目的是将币值稳定在某一固定资产上,通常是法定货币,如美元,来减少价格波动,为数字货币市场提供“锚定”作用。 稳定币的定义与特点 价值锚定:稳定币的价格通…

    2025年12月8日
    000
  • 稳定币在哪里可以交易_交易稳定币的平台有哪些

    一键直达|2025主流加密资产交易所平台 Binance币安 Huobi火币 欧易OKX 稳定币在哪里可以交易?稳定币因其价格相对稳定,广泛应用于数字资产交易和支付,几乎所有主流加密货币交易平台均支持稳定币交易。 主流稳定币交易平台推荐 币安(Binance):全球最大加密货币交易所,支持多种稳定币…

    2025年12月8日
    000
  • 稳定币排行榜_七月最新稳定币排行

    一键直达|2025主流加密资产交易所平台 Binance币安 Huobi火币 欧易OKX 2025年七月最新稳定币排行榜,稳定币在加密市场中扮演着关键角色,以下是当前市值与流通量排名靠前的稳定币,供您参考选择。 1. Tether (USDT) 市值领先:全球最大稳定币,市值超过700亿美元。多链发…

    2025年12月8日
    000
  • 2025年最受欢迎的稳定币是哪些_2025稳定币热门排行榜

    一键直达|2025主流加密资产交易所平台 Binance币安 Huobi火币 欧易OKX 2025年最受欢迎的稳定币有哪些?稳定币作为加密市场的重要组成部分,因其价格稳定、交易便捷,受到广大用户和机构青睐。以下是2025年最热门的稳定币排行榜,展现其市场份额和应用场景。 1. Tether (USD…

    2025年12月8日
    000
  • ETH最多持有人是谁_ETH最大钱 包是谁拥有

    一键直达|2025主流加密资产交易所平台 Binance币安 Huobi火币 欧易OKX ETH最多持有人是谁?截至2025年7月,以太坊(ETH)最大持有人并非某个个人,而是网络中的重要合约地址。 ETH最大钱 包持有者排名 1. 以太坊2.0质押合约(Beacon Deposit Contrac…

    2025年12月8日
    000
  • 2025年山寨币埋伏指南:10个百倍潜力币名单泄露

    2025年,加密货币市场仿佛一块等待开肯的沃土,充满了无限的可能性。每一位探索者都在寻找那颗能带来丰厚回报的种子。这不仅仅是关于数字资产的波动,更是一场对前沿科技、社区共识和未来金融范式的深刻理解。当全球经济的脉搏与区块链的律动交织,新的机遇便会悄然浮现。我们所谈论的,并非一夜暴富的神话,而是基于对…

    2025年12月8日
    000
  • ​​AI+区块链爆发前夜!这3个代币或将颠覆行业​​​​

    AI与区块链的融合正在催生全新的智能生态系统。1. 区块链为AI提供安全透明的数据基础,确保训练数据可信;2. AI提升区块链效率与智能化水平,优化网络性能;3. 二者共同驱动去中心化智能应用发展,如AI模型交易平台。三类关键数字资产在其中发挥核心作用:1. 激励型数据资产鼓励用户分享高质量数据;2…

    2025年12月8日
    000
  • 全球十大支持NFT交易的加密货币平台地址汇总(2025最新排名)

    以下是全球支持NFT交易且具备一定影响力的加密货币平台排名及特点:1.Binance,作为全球领先平台,提供广泛NFT市场,支持多链,界面友好、交易量庞大,玩法多样;2.OKX,支持多种区块链网络的NFT,提供丰富交易工具和优质项目;3.gate.io,支持新兴项目,费用低,NFT种类多样;4.Hu…

    2025年12月8日 好文分享
    000
  • 欧易(OKX)国际版下载教程

    如何下载欧易应用?1.访问OKX官方网站;2.点击首页“下载应用”按钮;3.根据手机系统选择iOS或Android下载链接;4.iOS用户前往App Store搜索“OKX”并点击“获取”,Android用户前往Google Play Store搜索“OKX”并点击“安装”;5.下载完成后按照设备提…

    2025年12月8日
    000
  • 2025年哪些虚拟币值得买?十大潜力币排名榜单

    在瞬息万变的加密货币市场,寻找有潜力的虚拟币,如同大海捞针。2025年,哪些虚拟币有望崭露头角,实现价值腾飞?这不仅仅是技术进步的较量,更是生态建设、社区活跃度、市场应用等多维度的综合考量。本文将深入剖析当前市场格局,为您揭示备受瞩目的十大潜力币,并提供详细的购买指引,助您把握投资先机。 2025年…

    2025年12月8日 好文分享
    000
  • ​​山寨币季节预警!如何提前布局下一波爆发币种?

    随着比特币价格趋于稳定,市场资金开始寻找新的增长点,这往往是“山寨币季节”来临的前兆。本文将为你梳理出提前布局下一波潜在爆发币种的有效策略,帮助你抓住市场轮动的机遇。最后,市场永远充满不确定性,最重要的原则是“做好你自己的研究”(DYOR)。保持学习,保持耐心,当机会来临时,你才能从容应对。 一、什…

    2025年12月8日
    000
  • 币库交易所官网地址 coinbase交易所平台地址

    欢迎来到币库交易所(coinbase)。 coinbase 是美国最大的加密货币交易所之一,主要面向全球用户提供比特币(btc)、以太坊(eth)等数字货币的交易服务。作为一个全球知名的数字资产交易平台,coinbase为用户提供安全、便捷的加密货币交易和存储服务。本教程旨在详细指导您完成币库交易所…

    2025年12月8日
    000
  • 以太坊NFT如何运作?为什么这么火?

    非同质化代币(nft)是构建在区块链技术上的一种独特数字资产形式。它们与比特币或以太币等可替代的加密货币不同,每一个nft都具有唯一的标识符和价值。以太坊是当前承载绝大多数nft项目和交易量的主要区块链平台。其智能合约功能是nft得以存在和运作的基础。 以太坊NFT的工作原理 1. NFT是通过智能…

    2025年12月8日
    000
  • 可靠的虚拟币交易平台

    在币圈,选择一个可靠的虚拟币交易平台至关重要。以下是2025年最新排行的十大虚拟币交易所和相应的APP平台排名。我们将从第一名开始,逐一介绍这些平台的特点和优势。 1. OKX OKX 是全球领先的虚拟币交易平台之一,以其高效的交易系统和丰富的币种选择而闻名。OKX的APP界面简洁明了,用户体验极佳…

    2025年12月8日 好文分享
    000

发表回复

登录后才能评论
关注微信