关于课程《ARM系统深度调试与逆向》

从深度嵌入式,到桌面,再到云,ARM不断攻城略地,正在成为主流。本培训着眼于ARM系统的关键原理,按历史顺序从ARM三大系列的M系列讲起,过渡到M系列必须的外部调试技术,再进入到当前正在大行其道的A系列,再深入解析A系列的调试设施,包括这些设施的原理和应用。本培训由《软件调试》作者张银奎主讲,深处着眼,浅出讲起,上调试器,看活代码,通过大量动手实验引领大家一起进入到ARM的世界中。


本培训包含大量动手试验和实战内容,参加本培训的每一位学员,都将获得:

-    一套基于ARM M核的GDK3开发套件

-    一套基于ARM A核的幽兰代码本

-    一套挥码枪硬件调试器

 

上课形式:每周六晚上8:30 – 9:30直播授课(共15节),讲解、演示和讲师引领的动手实验

培训对象:软件工程师、信息安全领域的工程师和研究者


通过本培训,学习者可以在如下多个方面进阶获益:

-    深刻理解ARM架构的技术精髓,包括三大系列,四大特权模式,安全/非安全两大阵营,以及ATF,TrustZone,CoreSight等关键技术

-    全面认识ARM平台的调试设施,包括自称载的本机调试和基于硬件调试器的外部调试

-    熟练使用GDB、NDB(挥码枪)两大调试器和很多其它软件工具(strace, dtc, readelf)

-    熟悉ARM生态中的常用固件和系统软件,包括ATF、U-BOOT、WoA和Linux等


整个培训分为三篇,15讲。目录如下:

序:

第一讲:准备上手和以物为师

要点:ARM的三大系列,M系列代表之GDK3,A系列代表之RK3588,内部调试器之GDB和NDB(Nano code Debugger),外部调试器之挥码枪,ARM文档大观之ARM和TRM,上调试器和以物为师


上篇:M核精华

第二讲:M核精华之中央处理器

要点:ARM简史,ARM指令集,THUMB指令,通用寄存器,Banked寄存器,特殊寄存器,常用指令,谓词执行,访问内存的指令,ARM反汇编,观看函数,在NDB中理解ARM的应用层指令和寄存器

 

第三讲:M核精华之存储与外设

要点:片上内存,片上闪存,地址空间,哈佛架构,中断向量表,复位后的第一条指令,M核固件概述,使用GNU工具链构建固件,使用挥码枪烧录固件

第四讲:M核精华之RTOS

要点:M核的软件栈,HAL,驱动,RTOS背景,CMSIS,RTX,线程创建和管理,多线程同步,在调试器下观察线程

 

第五讲:M核精华之外部调试器

要点:ARM架构手册定义的调试架构(Debug Architecture),自承载调试(Self-hosted Debug),外部调试,CoreSight,调试事件,面向调试器编程 

“虽然ARM主推的SWD通信方式只有三根很普通的线:时钟、数据、地,但是它工作的非常稳定。能用低廉的硬件把硬件调试实现的如此稳定,其中的一个主要原因是协议定义的优秀,包括400多页的调试接口协议(ADI),访问内部资源的CoreSight技术,以及散布在整个ARM架构中的调试支持。”

 

“三线”代表ARM硬件调试器常用的三根线。撸豹模仿“撸猫”之语。ARM能用三根线把芯片硬件调试实现的如此精湛,举重若轻,把凶猛的CPU控制的服服贴贴,“撸豹”如同“撸猫”一样,真是让人赞叹,神乎其技!。

——张银奎 《三线撸豹,神乎其技!》


中篇:A核精华

第六讲:A核精华之V8传奇

要点:ARMv8新境界,AA64,A64指令集,四大特权级别,安全与非安全(NS),TrustZone,通用寄存器,系统寄存器,访问系统寄存器,使用NDB读写系统寄存器


第七讲:A核精华之可信固件

要点:上电过程,M核护驾,ATF(ARM Trusted Firmware)代码,分阶段初始化,从BL0到BL3,Power State Coordination Interface (PSCI),调用ATF的服务,TEE OS,与TEE OS交互,使用NDB观察TEE核PSCI行为


第八讲:A核精华之U-Boot

要点:ARM生态中成长起来的U-BOOT,代码结构,两大阶段,U-BOOT搬家,使用U-BOOT的命令行,使用挥码枪调试U-BOOT,神奇的x18寄存器,修改U-BOOT代码,定制启动流程


第九讲:A核精华之设备树(DTS)

要点:五花八门的ARM硬件,林纳斯发怒,x86和PC的先进经验,设备树描述,DTS,DTB,编译方法,传递内核命令行,Linux中解析设备树的代码,根据设备树加载驱动的过程,使用DTC工具逆向设备树


下篇:融会贯通

第十讲:函数调用和栈

要点:分支指令,调用子函数,栈,LR寄存器,栈指针寄存器,压栈指令,栈帧,栈上的数据组织,栈回溯,栈回溯的原理,栈溢出,返回到libc,栈保护,在NDB下认识栈上的数据

 

第十一讲:页表和虚拟内存

要点:地址翻译,页表,页表格式,MMU,ARM的TTBR寄存器,地址翻译过程,页属性,访问权限,TLB,进程切换,缺页异常,观察页表,手工翻译内存地址


第十二讲:异常和中断处理

要点:CPU异常,同步异常,异步异常,ESR寄存器,异常进入,异常退出,中断处理,GIC,GIC的结构,GIC的配置,GIC的初始化,Linux内核中的中断处理代码

 

第十三讲:自承载调试和调试异常

要点:self-hosted debug,端点指令和软件端点,硬件断点寄存器,监视点寄存器和监视点,向量捕捉(Vector Catch),单步跟踪,大范围内存监视,使用NDB的硬件断点和监视点功能

 

第十四讲:实战之NT内核和WOA

要点:WoA的背景和未来,二进制翻译和兼容x86程序,NT架构,KD引擎,调试符号服务器,使用挥码枪调试NT内核,NT内核的关键数据结构

 

第十五讲:实战之Linux系统与根件

要点:so和用户空间注入,基于LD_PRELOAD的注入,strace和系统调用,内核根件之Reptile,LKM,构建和加载,隐藏文件,隐藏进程,反调试原理和化解

 

讲师介绍:张银奎

格蠹科技创始人,微软全球最有价值技术专家(MVP),同济大学电子与信息工程学院特邀讲师,前英特尔亚太研发有限公司软件架构师。《软件调试》、《格蠹汇编》的作者,新版《十万个为什么》电子分册撰稿人之一,《程序员》杂志调试之剑栏目作者 。1996年毕业于上海交通大学信息与控制工程系,在软件产业工作20年,在多家跨国公司历任开发工程师、软件架构师、开发经理、项目经理等职务,对 IA-32 架构、操作系统内核、驱动程序、虚拟化技术、云计算、软件调优、尤其是软件调试有较深入研究。

从2005年开始公开讲授“Windows内核及高级调试”课程,曾在微软的Webcast和各种技术会议上做过《Windows Vista内核演进》、《调试之剑》(全球软件战役研究峰会)、《感受和思考调试器的威力》(CSDN SD2.0大会)、《Windows启动过程》、《如何诊断和调试蓝屏错误》、《Windows体系结构——从操作系统的角度》(以上三个讲座都是微软“深入研究Windows内部原理系列”的一部分)等。翻译(合译)作品有《现代x86汇编语言编程》、《21世纪机器人》、《观止——微软创建NT和未来的夺命狂奔》、《数据挖掘原理》、《机器学习》、《人工智能:复杂问题求解的结构和策略》等。

学习器材:

挥码枪硬件调试器

幽兰代码本

GDK3 开发套件