主页
1.1.
前言
1.2.
Unicorn概览
1.3.
初始化
1.3.1.
下载安装
1.3.2.
运行测试代码
1.4.
如何使用
1.4.1.
概述Unicorn核心思路
1.4.2.
背景知识
1.4.2.1.
程序运行的本质
1.4.2.1.1.
CPU的核心逻辑
1.4.2.1.2.
什么是指令
1.4.2.2.
内存布局
1.4.2.2.1.
什么是内存布局
1.4.2.2.2.
内存地址空间范围
1.4.2.2.3.
典型的内存布局
1.4.2.3.
字节序endian
1.4.3.
运行前
1.4.3.1.
设置代码
1.4.3.2.
设置其他
1.4.3.2.1.
函数参数
1.4.3.2.2.
相关数据
1.4.3.2.3.
Stack栈
1.4.3.2.4.
Heap堆
1.4.4.
运行中
1.4.4.1.
开始运行
1.4.4.2.
调试逻辑
1.4.4.2.1.
hook
1.4.4.2.1.1.
hook代码
1.4.4.2.1.1.1.
hook指令
1.4.4.2.1.2.
hook内存
1.4.4.2.1.3.
hook异常
1.4.4.2.2.
打印日志
1.4.4.2.2.1.
优化日志输出
1.4.4.2.3.
查看当前指令
1.4.5.
运行后
1.4.5.1.
停止运行
1.4.5.2.
获取结果
1.5.
经验和心得
1.5.1.
常见错误
1.5.1.1.
UC_ERR_MAP
1.5.1.1.1.
批量解决UC_ERR_MAP
1.5.1.2.
UC_ERR_WRITE_UNMAPPED
1.5.2.
手动修改指令
1.5.3.
数值转换
1.5.4.
ARM64和arm64e
1.5.5.
调用其他子函数
1.5.5.1.
模拟函数实现
1.5.6.
用到Unicorn的
1.6.
实例
1.6.1.
模拟akd函数symbol2575
1.6.2.
其他示例代码
1.7.
附录
1.7.1.
Unicorn文档和资料
1.7.2.
Unicorn部分核心代码
1.7.3.
参考资料
本书使用 HonKit 发布
调试逻辑
调试逻辑
为了用Unicorn模拟代码运行,调试出我们希望搞懂的函数的逻辑,往往期间需要很多额外的调试内容。
其中主要就是:
hook
hook代码
hook特定指令
hook内存
hook异常
打印日志
其他常见需求
比如
查看当前运行的是什么指令
下面分别详细介绍。
results matching "
"
No results matching "
"