当前位置:网站首页>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 .

边栏推荐
- Download PHP source code of leaf sharing station
- MySQL事务简介、事务隔离级别
- Microsoft Office MSDT代码执行漏洞(CVE-2022-30190)漏洞复现
- Swintransformer network architecture
- 三代DRI的变化
- Use GCC's PGO (profile guided optimization) to optimize the entire system
- How to change Golan back to the English version when it becomes the Chinese version
- Implementation of asynchronous query of Flink dimension table and troubleshooting
- Compilation optimization of performance optimization
- Detailed explanation of shardingjdbc database and table
猜你喜欢

Exclusive interview with oppo find X5 Product Manager: deeply cultivate self-developed chips to create the ultimate flagship experience with the highest standards

龙芯处理器内核中断讲解

Gerrit触发Jenkins SonarQube扫描

写技术博客的意义

Microsoft Office MSDT代码执行漏洞(CVE-2022-30190)漏洞复现

LCD参数解释及计算

性能优化之编译优化

JDBC几个坑

初识GO语言

迄今微软不同时期发布的SQL Server各版本之间的大致区别,供参考查阅
随机推荐
论文《Deep Interest Evolution Network for Click-Through Rate Prediction》
Gerrit triggers Jenkins sonarqube scan
Picture online collection and delivery system source code
Go variables
(3) Golang - data type
Qiushengchang: Practice of oppo commercial data system construction
Add static route
Detailed explanation of shardingjdbc database and table
Installation and use of rolabelimg
山东大学软件学院项目实训-创新实训-山大软院网络攻防靶场实验平台(二十五)-项目个人总结
Volcano engine held a video cloud technology force summit and released a new experience oriented video cloud product matrix
多种Qt的开发方式,你选择哪种?
php 实现无限极分类树(递归及其优化)
MySQL提权总结
Microsoft Office MSDT代码执行漏洞(CVE-2022-30190)漏洞复现
使用GCC的PGO(Profile-guided Optimization)优化整个系统
R语言计算data.table在一个分组变量的值固定的情况下另外一个分组变量下指定数值变量的均值
C # final review programming question (guessed by the teacher)
rolabelImg的安装使用
406. reconstruct the queue based on height