CN116599815A - Arm架构pon网关手动输出用户层程序调用栈的实现方法 - Google Patents

Arm架构pon网关手动输出用户层程序调用栈的实现方法 Download PDF

Info

Publication number
CN116599815A
CN116599815A CN202310511794.7A CN202310511794A CN116599815A CN 116599815 A CN116599815 A CN 116599815A CN 202310511794 A CN202310511794 A CN 202310511794A CN 116599815 A CN116599815 A CN 116599815A
Authority
CN
China
Prior art keywords
stack
address
interrupt
call stack
function
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202310511794.7A
Other languages
English (en)
Inventor
查云
熊猛
刘邵海
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sichuan Tianyi Comheart Telecom Co Ltd
Original Assignee
Sichuan Tianyi Comheart Telecom Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Sichuan Tianyi Comheart Telecom Co Ltd filed Critical Sichuan Tianyi Comheart Telecom Co Ltd
Priority to CN202310511794.7A priority Critical patent/CN116599815A/zh
Publication of CN116599815A publication Critical patent/CN116599815A/zh
Pending legal-status Critical Current

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L41/00Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
    • H04L41/20Network management software packages
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04QSELECTING
    • H04Q11/00Selecting arrangements for multiplex systems
    • H04Q11/0001Selecting arrangements for multiplex systems using optical switching
    • H04Q11/0062Network aspects
    • H04Q11/0067Provisions for optical access or distribution networks, e.g. Gigabit Ethernet Passive Optical Network (GE-PON), ATM-based Passive Optical Network (A-PON), PON-Ring
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04QSELECTING
    • H04Q11/00Selecting arrangements for multiplex systems
    • H04Q11/0001Selecting arrangements for multiplex systems using optical switching
    • H04Q11/0062Network aspects
    • H04Q2011/0079Operation or maintenance aspects
    • H04Q2011/0083Testing; Monitoring
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

本发明涉及ARM架构PON网关手动输出用户层程序调用栈的实现方法,属于电数字数据处理技术领域,包括以下步骤:当硬件检测到一个中断事件时,向处理器发送一个中断请求信号,处理器停止当前正在执行的指令,并跳转到中断处理程序;在ARM处理器中,中断处理程序的入口地址存储在中断向量表中;其中,当ARM处理器接收到一个中断请求时,保存当前程序状态;使用kill命令向进程发送信号,内核根据信号类型和目标进程的状态来决定如何处理这个信号等。介绍了一个不用修改任何用户层程序代码,即可输出任一用户层程序用户态调用栈的方法,它可以帮助光猫开发、维护人员快速可定位进程卡死类问题,并进行相应的调整和修复,特别是概率性出现的问题。

Description

ARM架构PON网关手动输出用户层程序调用栈的实现方法
技术领域
本发明属于电数字数据处理技术领域,具体涉及ARM架构PON网关手动输出用户层程序调用栈的实现方法。
背景技术
在PON光猫产品开发或现网维护过程中,经常会遇到进程跑飞的现象(即预期以外的情况),需要查看进程当前正在执行到哪里。然而,Linux只能通过sysrq-trigger查看进程内核态栈情况,而没有手段可以查看用户层进程的栈情况。
参照APCS(ARM Procedure Call Standard)规范,可以回溯出用户层程序的调用栈,但是网上找的资料都是在用户层实现的,这种需要提前修改对应用户层进程的源代码,需要在进程内部实现,不能做到一次修改对所有进程生效。
因此,现阶段需设计ARM架构PON网关手动输出用户层程序调用栈的实现方法,来解决以上问题。
发明内容
本发明目的在于提供ARM架构PON网关手动输出用户层程序调用栈的实现方法,用于解决上述现有技术中存在的技术问题,可以帮助开发人员或维护人员快速定位问题,并进行相应的调整和修复。
为实现上述目的,本发明的技术方案是:
ARM架构PON网关手动输出用户层程序调用栈的实现方法,包括以下步骤:
S1、当硬件检测到一个中断事件时,向处理器发送一个中断请求信号,处理器停止当前正在执行的指令,并跳转到中断处理程序;在ARM处理器中,中断处理程序的入口地址存储在中断向量表中;其中,当ARM处理器接收到一个中断请求时,保存当前程序状态,即CPSR、SPSR、R0~R12、LR、PC;
S2、使用kill命令向进程发送信号,内核根据信号类型和目标进程的状态来决定如何处理这个信号;内核信号处理函数收到前面中断处理程序保存的进程现场信息;
S3、在Linux内核的信号处理函数中,读取并记录中断保存的寄存器信息,同时根据读取到的sp寄存器的信息,获取进程当前用户态栈信息,用户层地址通过copy_from_user()拷贝到内核空间;
S4、参照APCS规范,在函数的入口处,会首先将fp、sp、lr寄存器存入栈内,fp和sp寄存器分别指向函数栈的栈底和栈顶,lr则指向返回地址;
S5、通过current->mm->mmap遍历进程的地址空间链表vm_area_struct,找到第3步中获取到的每步调用栈地址所在的vm_area_struct区间,然后换算出该步调用栈地址相对于vm_area_struct区间起始地址的偏移量,即可得到每步调用栈地址所在的二进制ELF文件及其在文件中的偏移量;
S6、根据得到的调用栈地址信息,可直接手动使用addr2line或其他方法换算成C语言的代码行以及函数名。
进一步的,步骤S1中,CPSR和SPSR是状态寄存器,用于保存处理器的状态信息;R0~R12是通用寄存器,用于保存程序运行时的临时数据;LR是链接寄存器,用于保存函数调用时的返回地址;PC是程序计数器,用于保存下一条指令的地址。
进一步的,步骤S4中,通过fp寄存器,可找到保存在函数栈的中lr寄存器的值,即当前函数的返回地址;
同时也可找到保存在函数栈的上一级函数栈的fp寄存器的值,即上一级函数的栈底,同样又可找到上一级函数栈中的lr寄存器的值;如此递归就可找到整个调用栈的lr地址信息,这些lr寄存器的值就组成一个初步的调用栈地址信息。
进一步的,步骤S2中,kill命令可替换为自定义的软中断或硬中断命令。
与现有技术相比,本发明所具有的有益效果为:
本发明介绍了一个不用修改任何用户层程序代码,即可输出任一用户层程序用户态调用栈的方法,它可以帮助光猫开发、维护人员快速可定位进程卡死类问题,并进行相应的调整和修复,特别是概率性出现的问题。使用中断的方式在内核中获取用户层现场信息(寄存器和栈),并在内核中计算出进程的用户层调用栈,这样可以做到不用修改任何用户层程序代码,即可输出任一用户层程序的用户态调用栈。
附图说明
图1为本方案实施方式的步骤流程示意图。
具体实施方式
为了使本发明的目的,技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明,即所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。
因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。需要说明的是,术语“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。
而且,术语“包括”,“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程,方法,物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程,方法,物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程,方法,物品或者设备中还存在另外的相同要素。
如图1所示,提出ARM架构PON网关手动输出用户层程序调用栈的实现方法。
当硬件检测到一个中断事件时,它会向处理器发送一个中断请求信号,处理器会停止当前正在执行的指令,并跳转到中断处理程序。在ARM处理器中,中断处理程序的入口地址存储在中断向量表中。当ARM处理器接收到一个中断请求时,它可以保存当前程序状态,CPSR、SPSR、R0~R12、LR、PC等。其中,CPSR和SPSR是状态寄存器,用于保存处理器的状态信息;R0~R12是通用寄存器,用于保存程序运行时的临时数据;LR是链接寄存器,用于保存函数调用时的返回地址;PC是程序计数器,用于保存下一条指令的地址。
Kill命令是最常用的触发软中断的方式之一,kill命令是用来向进程发送信号的。当我们使用kill命令向进程发送信号时,内核会根据信号类型和目标进程的状态来决定如何处理这个信号。内核信号处理函数中,会收到前面中断处理程序保存的进程现场信息。这里使用kill只是为了发信号,而不是真正的杀进程,所以当进程没有注册SIGUSR1或SIGUSR2时,可以选用SIGUSR1或SIGUSR2。其中,kill命令可替换为自定义的软中断或硬中断命令。使用kill只是触发中断的方式之一;这里也可以使用其他中断方式,如自定义的软中断或硬中断。只要能触发中断即可。
在Linux内核的信号处理函数中,读取并记录中断保存的寄存器信息,同时根据读取到的sp寄存器的信息,获取进程当前用户态栈信息,内核一般无法直接访问用户层地址,但是可以通过copy_from_user()将其拷贝到内核空间。
参照APCS(ARM Procedure Call Standard)规范,在函数的入口处,会首先将fp,sp,lr寄存器存入栈内,fp和sp寄存器分别指向函数栈的栈底和栈顶,lr则指向返回地址(函数返回后下一条指令的地址)。
通过fp寄存器,可以找到保存在函数栈的中lr寄存器的值,即当前函数的返回地址。
同时也可以找到保存在函数栈的上一级函数栈的fp寄存器的值,即上一级函数的栈底,同样又可以找到上一级函数栈中的lr寄存器的值。如此递归就可以找到整个调用栈的lr地址信息,这些lr寄存器的值就组成了一个初步的调用栈地址信息。
通过(struct task_struct)current->mm->mmap遍历进程的地址空间链表vm_area_struct,找到第3步中获取到的每步调用栈地址所在的vm_area_struct区间,然后换算出该步调用栈地址相对于vm_area_struct区间起始地址的偏移量,即可得到每步调用栈地址所在的二进制ELF文件及其在文件中的偏移量。
得到的调用栈地址信息,可以直接手动使用addr2line或其他方法换算成C语言的代码行以及函数名。
以上是本发明的较佳实施例,凡依本发明技术方案所作的改变,所产生的功能作用未超出本发明技术方案的范围时,均属于本发明的保护范围。

Claims (4)

1.ARM架构PON网关手动输出用户层程序调用栈的实现方法,其特征在于,包括以下步骤:
S1、当硬件检测到一个中断事件时,向处理器发送一个中断请求信号,处理器停止当前正在执行的指令,并跳转到中断处理程序;在ARM处理器中,中断处理程序的入口地址存储在中断向量表中;其中,当ARM处理器接收到一个中断请求时,保存当前程序状态,即CPSR、SPSR、R0~R12、LR、PC;
S2、使用kill命令向进程发送信号,内核根据信号类型和目标进程的状态来决定如何处理这个信号;内核信号处理函数收到前面中断处理程序保存的进程现场信息;
S3、在Linux内核的信号处理函数中,读取并记录中断保存的寄存器信息,同时根据读取到的sp寄存器的信息,获取进程当前用户态栈信息,用户层地址通过copy_from_user()拷贝到内核空间;
S4、参照APCS规范,在函数的入口处,会首先将fp、sp、lr寄存器存入栈内,fp和sp寄存器分别指向函数栈的栈底和栈顶,lr则指向返回地址;
S5、通过current->mm->mmap遍历进程的地址空间链表vm_area_struct,找到第3步中获取到的每步调用栈地址所在的vm_area_struct区间,然后换算出该步调用栈地址相对于vm_area_struct区间起始地址的偏移量,即可得到每步调用栈地址所在的二进制ELF文件及其在文件中的偏移量;
S6、根据得到的调用栈地址信息,可直接手动使用addr2line或其他方法换算成C语言的代码行以及函数名。
2.根据权利要求1所述的ARM架构PON网关手动输出用户层程序调用栈的实现方法,其特征在于,步骤S1中,CPSR和SPSR是状态寄存器,用于保存处理器的状态信息;R0~R12是通用寄存器,用于保存程序运行时的临时数据;LR是链接寄存器,用于保存函数调用时的返回地址;PC是程序计数器,用于保存下一条指令的地址。
3.根据权利要求2所述的ARM架构PON网关手动输出用户层程序调用栈的实现方法,其特征在于,步骤S4中,通过fp寄存器,可找到保存在函数栈的中lr寄存器的值,即当前函数的返回地址;
同时也可找到保存在函数栈的上一级函数栈的fp寄存器的值,即上一级函数的栈底,同样又可找到上一级函数栈中的lr寄存器的值;如此递归就可找到整个调用栈的lr地址信息,这些lr寄存器的值就组成一个初步的调用栈地址信息。
4.根据权利要求1所述的ARM架构PON网关手动输出用户层程序调用栈的实现方法,其特征在于,步骤S2中,kill命令可替换为自定义的软中断或硬中断命令。
CN202310511794.7A 2023-05-08 2023-05-08 Arm架构pon网关手动输出用户层程序调用栈的实现方法 Pending CN116599815A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310511794.7A CN116599815A (zh) 2023-05-08 2023-05-08 Arm架构pon网关手动输出用户层程序调用栈的实现方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310511794.7A CN116599815A (zh) 2023-05-08 2023-05-08 Arm架构pon网关手动输出用户层程序调用栈的实现方法

Publications (1)

Publication Number Publication Date
CN116599815A true CN116599815A (zh) 2023-08-15

Family

ID=87598411

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310511794.7A Pending CN116599815A (zh) 2023-05-08 2023-05-08 Arm架构pon网关手动输出用户层程序调用栈的实现方法

Country Status (1)

Country Link
CN (1) CN116599815A (zh)

Similar Documents

Publication Publication Date Title
US7389500B2 (en) Selective pre-compilation of virtual code to enhance boot time emulator performance
CN108427733B (zh) 审核规则的设置方法、装置和系统、设备、存储介质
US10565371B2 (en) Malware detection method and malware detection apparatus
CN110196861A (zh) 一种数据脱敏方法和装置
WO2008086093A2 (en) Method, system and computer program product for enforcing privacy policies
ATE232998T1 (de) Rechnerarchitektur zur aufschiebung von exceptions statischer spekulativer befehle
KR890702137A (ko) 펜디드 버스에서의 인터럽트 수행노드
US11922168B2 (en) Stack traces using shadow stack
US20050114578A1 (en) Secure software SMI dispatching using caller address
US20220237057A1 (en) Code consolidation system
US5978587A (en) Method for propagating source code locations into objects in a compiler
US7926048B2 (en) Efficient call sequence restoration method
CN116599815A (zh) Arm架构pon网关手动输出用户层程序调用栈的实现方法
KR20110037969A (ko) 모니터링 시스템에서의 메시지의 타겟화된 사용자 통지
US10795650B2 (en) Code lineage tool
CN112559344A (zh) 远程mock测试方法及系统
CA2501928C (en) Method, system and software for journaling system objects
CN112817663B (zh) 一种应用程序的seccomp规则获取方法和装置
CN115576858B (zh) 针对低代码前端应用的业务动作执行系统及可读存储介质
CN114553930B (zh) 一种系统集成方法、装置、计算机设备及存储介质
DE69219538T2 (de) Verbessertes system und verfahren zum feststellen von kreuzweisen rufbefehlen und speicherdaten, insbesondere zur code-schnittstellen-ausführung im mehrfachen code-ausführungs- und fehlersuchsystem einer mehrrechnerarchitektur
JP3463925B2 (ja) 計算機システム
CN110837425A (zh) 一种基于适配器的身份信息获取方法、装置及系统
JPH04294443A (ja) 分散処理世代制御方式
KR100302473B1 (ko) 교환 시스템의 칠 프로그램 개발 및 운영방법

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination