a: 转成ASCII
d: 转成数据, 按一次是db,两次dw,三次dd
c: 转成代码
u: 编程未定义

G: 跳转指令, 跳转到指定地址
ALT+T: 搜索指令,搜索关键字
F5: 把汇编编程C语言, 想回到汇编直接选IDA View即可
N: 按下某个名字并且修改名字,全局有效

ESC: 返回上一个页面

F12: 显示代码的流程图

Shift+F2: IDC脚本窗口

Shift+F3: 弹出Functions窗口

Shift+F9: 弹出Struct窗口

Shift+- 是把IDA代码中的十六进制与十进制互换

Q: 显示操作步长, 比如movsx edx, [esp + 18h]就会变成movsx edx, dword ptr [esp + 18h]

K: 隐藏操作步长

Ctrl+K: 查看当前函数的栈

汇编LDA是什么指令_交叉引用

 按下Ctrl+K即可

汇编LDA是什么指令_汇编LDA是什么指令_02

进入在Structures栏里, 点击Edit选择添加结构体即可添加结构体
选择结构体名后按d后即可添加成员,再次按d几次与上面d操作一样
选择某一成员,按alt+q可以把该成员变成IDA内所有可识别的其他类型结构体, 这种方法在IDA View窗口内也可以使用
双击结构体名称即可 将其收缩成一行,点击改行选择Ctrl和+(小键盘)即可拓展开

按;可以写入注释, 但是这样会让其他地方跳转到此位置也会显式该注释
Shift+; 则没有上面那种困扰,仅仅是单纯的本行注释
选择函数名按;可以添加函数注释

交叉引用(即所有引用该函数的列表)

如果目标函数不在当前模块,如何找到该函数在哪里调用?

汇编LDA是什么指令_IDA_03

如果有多个对话框调用了多个OnInitDialog, 即可使用交叉引用获取调用该函数的列表:

汇编LDA是什么指令_IDA_04

选中函数名,View+Open subviews+Cross references, 或者右键选中List cross references to..

又或者直接Ctrl+X即可

汇编LDA是什么指令_汇编LDA是什么指令_05

IDC语法:

配置IDA默认编辑器: Options->General->Misc->Editor

汇编LDA是什么指令_加载_06

Message输出函数(类似printf), Warning以及Fatal

变量: 全部auto类型(类似js里的var), 变量声明与复制必须在不同语句进行

语句: IDC不支持switch语句

如果反汇编窗口或者其他窗口不见了怎么调出来:

汇编LDA是什么指令_加载_07

 让IDA显示机器码的方法:

汇编LDA是什么指令_搜索_08

 这样的效果如下图:

汇编LDA是什么指令_加载_09

 如果想要IDA自动注释:

汇编LDA是什么指令_搜索_10

 想要重置IDA的GUI界面元素到其原来位置

汇编LDA是什么指令_搜索_11

 想跳转到对应的文件偏移:

汇编LDA是什么指令_汇编LDA是什么指令_12

 搜索功能:

1. Search->Next Code 移动光标到包含你所指定指令的下一个位置

2. Search->Text 在反汇编窗口中搜索一个指定字符串

3. Search->Sequence of Bytes 在16进制视图窗口中对特定字节序进行二进制搜索

 需要查看某个函数的所有交叉引用, 对数据也同样有效:

点击函数名后按下'X'键:

汇编LDA是什么指令_交叉引用_13

 函数无法识别的情况,按'P'键创建函数。

如果函数不是基于EBP的栈帧,这可能不是很容易理解。可以按下Alt+P。选择BP Based Frame然后指定4 Bytes for saved registers

工具栏可以显示高级模式,即有更多选项:

汇编LDA是什么指令_搜索_14

 

汇编LDA是什么指令_交叉引用_15

 结果入上,这里主要关注红框框出的交叉引用:

第一个选项会出现当前函数的流程图, 快捷键F12:

汇编LDA是什么指令_交叉引用_16

 第二个获取整个程序的调用图, 数量多的情况下有点凌乱:

汇编LDA是什么指令_交叉引用_17

 第三个显示当前函数被哪里调用了

汇编LDA是什么指令_交叉引用_18

 讲一个不易于理解的常量转换成易于理解的常量:

汇编LDA是什么指令_交叉引用_19

 

汇编LDA是什么指令_交叉引用_20

 如果有下面几条机器码:

mov eax, loc_410000
add ebx, eax 
mul ebx

 其中loc_410000被交叉引用。但实际上这只是一个数字罢了。可以点击它然后按下'O'键即可取消

如果某个标准的符号常量不显示。可能是符号表未加载。需要手动加载导入库:

汇编LDA是什么指令_加载_21

一般mssdk和vc6win会被加载

 

汇编LDA是什么指令_IDA_22

设置数组结构:

在对应需要设置数据结构的函数内按下Ctrl+K就能查看该函数的所有堆栈元素。

汇编LDA是什么指令_交叉引用_23

 现在要把Buffer开始的512字节设置成一个数组。在起始地右击后选中Array

 

汇编LDA是什么指令_加载_24

 将其数组大小设置成512个字节

汇编LDA是什么指令_汇编LDA是什么指令_25

 这样就成功设置了

汇编LDA是什么指令_交叉引用_26

IDA调试DLL时,如何手动确定载入起始位置,而非依靠ImageBase决定。

选中如下复选框代表手动载入。

汇编LDA是什么指令_加载_27

 设定你要载入的位置后按下OK即可。
查找特定字符串:

如果我要查找一种简单xor加密,可是代码量太大该怎么办,可以直接利文本搜索来实现:

汇编LDA是什么指令_交叉引用_28

 查找所有xor出现过的地方, 很容易就发现一处可能的xor加密位置:

汇编LDA是什么指令_IDA_29

修改函数定义:

举一个例子, 我想修改这个函数的定义如何修改

汇编LDA是什么指令_交叉引用_30

 选中函数后按'Y'即可

汇编LDA是什么指令_汇编LDA是什么指令_31

选择入口点:

可能有一些程序有反调试功能,设立了tls回调, 普通的入口点无法查询

汇编LDA是什么指令_加载_32

 按下Ctrl+E,选择对应的入口点即可

汇编LDA是什么指令_IDA_33

查找一个函数所有的call:

汇编LDA是什么指令_加载_34

重新设定模块加载地址:

汇编LDA是什么指令_交叉引用_35

 

汇编LDA是什么指令_加载_36

 

(完)