@讲师 张银奎
高速的发展,搞得如今得猿们没有方向感了;
1.基础
- 进程空间
- WinDBG —window平台
- GDB —Linux平台
三个层次(每一个方向最起码懂得一种)
- CPU层面:X86,ARM
- 操作系统:window,android,ios
- 编程语言
C/C++ 底层
java 应用层
调试日程:
《软件调试》—原理
《格蠹汇编》—实践
2.根本概念
1.地址空间
- 8位16进制(0x00000000)相当于32位二进制
- 0 — 0000
- 1 — 0001
- …
- F — 1111
- Page Faults 缺页异常
- PF pageFiles缩写,页面文件,就是虚拟内存,系统在硬盘上开辟一块空间当作内存用
- 访问时不在物理内存。CPU触发一个缺页异常,内核中的内存管理器分配一个物理页。
- new之后内容未确定,只是返回一个起始地址,写的时候触发一个PageFault,产生一个物理页
- new出一个实际大小的内存空间,不用的时候,会被踢出到磁盘中,访问时触发PageFault访问
- window工具领先
- 内存分配,用户态可以分配5~8个字节,内核态里有内存管理器,有一个最小粒度,最少分配一个页的大小
- 1个页 = 4K
- 1个十六进制数 = 4个二进制数
- 1个字节 = 2个十六进制数 = 8个比特 = 8个二进制数
- 解析10000,标记为10|000
- 因为address+1,F+1为10,所以前面为16,后面三个000,因为是十六进制,12个二进制数,即为4K,16*4K = 64K。
- 技巧:000 = 4K
- 解析1000000,标记为10|00000
- 后面5个0相当于1M
- 16M的大小
2.堆
- 一个堆里面有很多个段,Segment00只是其中之一
- nt为内核,ntdll比较纯正
3.Linux下的调试
1.使用命令
- ps -A 列出所有进程
- top
- 一切皆文件
- cd /proc
- ls