当前位置:网站首页>Arm64 Stack backtrack
Arm64 Stack backtrack
2022-06-12 17:30:00 【Programmeur amateur plus】
1.AArch64La structure de la pile
Arm64Oui.4Pile de graines,Piles vides, respectivement(Empty Ascendant Stack,EA)、Pile vide(Empty Descendant Stack,ED)、Pleine pile(Full Ascendant Stack,FA)、Pile complète moins pile(Full Descendant Stack,FD).Les piles complètes et décroissantes sont couramment utilisées,LinuxLe noyau utilise également la pile complète moins.
L'image ci - dessous est un schéma d'une pile complète moins,Haut de la pile,L'adresse basse est la pile basse,La pile pousse vers la basse adresse,Comme indiqué par la flèche à droite.Pointeur de pileSPPointer vers le bas de la pile(La pile basse contient des données).Chaque fois qu'un appel de fonction est généré,Un cadre de pile se forme dans la pile,Au total, la pile a été sauvegardée4Cadres de pile(Stack Frame),Chaque cadre de pile est composé deFP、LREt les paramètres de pile(Paramètre de fonction、Fonctions variables locales, etc)Composition.Vous pouvez considérer tous les cadres de pile dans la pile comme une seule table de collier,Le cadre de pile à la position la plus basse de la pile est l'en - tête de chaîne,Le cadre de la pile à la position la plus élevée de la pile est la queue de la liste,Toute la liste est utiliséeFPIndex.Quand la pile remonte manuellement,Peut être basé surFPIndexer tous les cadres de pile.

2.AArch64Règles d'utilisation des registres dans les critères d'appel de procédure
En bas.Arm64 Méthode d'utilisation du registre général spécifiée dans la norme d'appel de programme .
- Registre des paramètres(X0-X7)
Nombre d'arguments de fonction inférieur ou égal à 8Heures,UtiliserX0-X7Passer,Plus grand que8Heures, Utilisation redondante du transfert de pile , La valeur de retour est sauvegardée lorsque la fonction retourne X0Moyenne. - Registre temporaire enregistré par l'appelant (X9-X15)
Si l'appelant l'utilise X9-X15Registres, Avant d'appeler une sous - fonction ,Il fautX9-X15 Enregistrer sur sa propre pile , Les sous - fonctions n'ont pas besoin d'enregistrer et de récupérer lorsqu'elles utilisent ces registres . - Registre enregistré par l'appelant(X19-X29)
Si l'appelant utilise ces registres , Vous devez l'enregistrer sur votre propre pile , Récupérer de la pile à son retour . - Registres à usage spécial
- X8Est le registre des résultats indirects. Emplacement de l'adresse utilisée pour transmettre les résultats indirects ,Par exemple, La fonction renvoie une grande structure .
- X16-X17 Registre d'étape des appels en cours de procédure ..
- X18 Registre de la plateforme .
- X29 Est un cadre de pile (FP)Registres. Adresse du cadre de pile sauvegardée pour la fonction d'appel .
- X30 Adresse de retour enregistrée (LR). La fonction retourne et saute à l'adresse pour l'exécuter .

3.Exemple
Voici le noyau Oops Informations imprimées à . La première image est l'information du Registre ,pcRegistres etsp Les registres jouent un rôle important dans le traçage des piles . La deuxième image est le thread du noyau irq/231-dwc3 Dump binaire des données de pile , Le traçage de pile est de trouver des cadres de pile dans ces données binaires , Pour trouver l'adresse de la fonction appelée .


La figure suivante montre les résultats du traçage de la pile du noyau , L'adresse de la fonction d'exception est enregistrée dans la pile d'exception , Pas dans le thread du noyau irq/231-dwc3Dans la pile.

La fonction qui a causé l'exception peut être basée sur pc Le Registre a , Cette fonction est la première fonction de traçage de pile .sp Le registre pointe vers le FP1Registres,C'est - à - dire:0xffffffc0ee823b80Adresse,FP1 Offset to high address 8 Byte obtient LR1Registres,C'est - à - dire:0xffffff80087369e4Adresse, L'adresse se trouve à dwc3_ep0_stall_and_restartEn fonction, Cette fonction est la deuxième fonction de traçage de pile .FP1 Pointant vers le deuxième cadre de pile FP2, Trouvé à partir du cadre de pile LR2,Par analogie. Tous les cadres de pile sont finalement montrés dans la figure suivante ,Total trouvé7Cadres de pile,Donc,irq/231-dwc3 Total des exceptions au thread du noyau 8Appels de fonctions, Correspond à la relation d'appel de fonction de la sortie du noyau .Il est important de noter que, Cette fonction est appelée dans le Code , Mais aucun symbole n'a été trouvé dans le traçage de la pile , Ça doit être l'optimisation du compilateur , La fonction a été incrustée , L'inline peut être confirmée par démontage .

边栏推荐
- R language arma-garch-copula model and financial time series case
- Crazy temporary products: super low price, big scuffle and new hope
- 使用GCC的PGO(Profile-guided Optimization)优化整个系统
- Fiddler抓包几种常用功能介绍(停止抓包、清空会话窗内容、过滤请求、解码、设置断点......)
- 406. reconstruct the queue based on height
- bug记录:更新数据库时报错:Data truncation: Incorrect datetime value:
- (6) Control statement if/else switch
- The R language uses the pyramid function of epidisplay package to visualize the pyramid graph and the pyramid graph based on the existing summary data (table data)
- Where is it safer to open an account for thermal coal futures? How much is the thermal coal futures deposit?
- 有趣的 LD_PRELOAD
猜你喜欢

Atlas conflict Remote Code Execution Vulnerability (cve-2022-26134) vulnerability recurrence

First acquaintance with go language

1723. minimum time to complete all work

Fiddler抓包几种常用功能介绍(停止抓包、清空会话窗内容、过滤请求、解码、设置断点......)

Download PHP source code of leaf sharing station

TensorFlow求梯度时提示TypeError: unsupported operand type(s) for *: ‘float‘ and ‘NoneType‘

Learn the mitmproxy packet capturing tool from scratch

Saturated! Can't future programmers work anymore?

Interesting LD_ PRELOAD

Use GCC's PGO (profile guided optimization) to optimize the entire system
随机推荐
I heard that distributed IDS cannot be incremented globally?
WinForm, crystal report making
Lambda - 1
(6) Control statement if/else switch
Add static route
Sizepolicy policy in layout management
[BSP video tutorial] stm32h7 video tutorial Issue 8: the last issue of the MDK theme, the new generation of debugging technologies event recorder and RTT, and using stm32cubemx to generate project tem
大端模式和小端模式的區別
R语言使用pdf函数将可视化图像结果保存到pdf文件中、使用pdf函数打开图像设备、使用dev.off函数关闭图像设备、自定义width参数和height参数指定图像的宽度和高度
(8) Goto keyword
TensorFlow从网络读取数据
The R language uses the PDF function to save the visual image results to the PDF file, uses the PDF function to open the image device, uses the dev.off function to close the image device, and customiz
Application case of smart micro 32-bit MCU for server application cooling control
Concurrent trichromatic marking
Schrodinger's Japanese learning applet source code
Microsoft Office MSDT代码执行漏洞(CVE-2022-30190)漏洞复现
Memory control of node
Gerrit触发Jenkins SonarQube扫描
AlibabaProtect.exe如何删除、卸载
Compilation optimization of performance optimization