工具 IDA Pro

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Rozol/article/details/79816847

工具 IDA Pro


本文由 Luzhuo 编写,转发请保留该信息.
原文: https://blog.csdn.net/Rozol/article/details/79816847


界面

指令

ARM寻址指令

  • ADD R0, R1, R2
    • R0 <- R1 + R2
    • 寄存器直接寻址
  • MOV R1,#1
    • R1 <- 1
    • 立即数寻址, 操作数包含在指令中
  • MOV R0, R0,LSR#16
    • R0 <- R0<<16
    • 寄存器偏移寻址, R0的值左移16位, 赋给R0
  • LDR R0, [R1]
    • R0 <- [R1]
    • 寄存器间接寻址, 把寄存器里的值作为地址, 去找操作数
  • LDR R0, [R1,#4]
    • R0 <- [R1 + 4]
    • 寄存器变址寻址
  • LDMIA R0, {R1, R2, R3, R4}
    • R1 <- [R0], R2 <- [R0 + 4], R3 <- [R0 + 8], R4 <- [R0 + 12]
    • 多寄存器寻址, 一次完成多个寄存器值的传递
  • STMFD SP!, {R1 - R7,LR}
    • 将 R1 - R7,LR 入栈
    • 堆栈寻址
  • LDMED SP!, {R1 - R7,LR}
    • 将栈中数据取回 R1 - R7,LR 寄存器, 出栈
    • 堆栈寻址

ARM寄存器

  • R0 - R3: 函数参数, 返回值
  • R4 - R6, R8, R10 - R11: 普通寄存器
  • R7: 栈帧指针
  • R9: 系统保留
  • R12: IP, 子程序间的scratch寄存器
  • R13: SP, 数据栈指针, 用于保存栈顶指针
  • R14: LR, 连接寄存器, 用于保存函数返回地址
  • R15: PC, 程序计数器, 可知当前指令地址

其他指令

  • push ebp: 入栈
  • move ebp, esp: ebp <- esp
  • sub esp, 8: 减指令
  • add esp, 0FFFFFFF0h: 加指令
  • call _alloca: 调用栈帧
  • str: 把寄存器内容存到栈
  • ldr: 把栈内容存入寄存器
  • add esp,0Fh 移动栈指针(出栈)
  • cmp R0, R1: 比较两操作数的大小
  • cbz: 比较指令
  • bl: 调用函数
  • blx: 调用函数

IDA标记

  • sub_xxx: 子程序
  • loc_xxx: 地址簇
  • byte_xxx: 8位数据
  • word_xxx: 16位数据
  • dword_xxx: 32位数据
  • unk_xxx: 未知

IDA数据标记

  • db: 1字节
  • dw: 2字节
  • dd: 4字节
  • 修改数据类型: Alt+D

快捷键

  • G: 跳到指定地址
    • 内存地址 = 基址 + 偏移地址
  • F5 / Tab: 查看C伪代码, 推荐使用 Tab 键
    • 查看C伪代码
  • F9: 运行
  • ; / :: 注释, 区别是;会出现在所有交叉参考处
  • Alt + T: 搜索字符串
  • Y: 设置类型
    • 还原JNI函数名 (修改类型为: JNIEnv*)
  • Ctrl + S: 查看段(Segement)信息
    • 内存地址
  • P: 创建函数
    • 将 DCB数据 转为 函数编码
  • F8: 单步调试
  • F7: 单步进入调试
  • F2: 打断点, 或者点击左边小蓝点

猜你喜欢

转载自blog.csdn.net/Rozol/article/details/79816847