常见的汇编指令:
stack(栈)是由于函数运行而临时占用的内存区域。
push指令用于将运算放入stack(栈)中
call指令用来调用函数
mov指令用于将一个值写入某个寄存器(把后面值写到前面)
add指令用于将两个运算子相加,并将结果写入第一个运算子
pop指令用于取出stack最近写入的值,并将这个值写入运算子指定的位置
ret指令用于终止当前函数的执行,将运行权交换给上层函数
jmp指令无条件转移
test测试,互相做与运算,仅修改标志位,不回送结果
lea装入有效地址
1、32位程序提供汇编转C语言伪代码功能,64位程序提供64位汇编解析功能。
2、打开动态库(DLL,SO)、exe、静态库(.lib后缀.a后缀)、中间文件(.obj后缀.o后缀)、APK等二进制文件。
3、New是反汇编一个新的文件,Go是不打开任何文件,现在正在执行的程序进行实时调试,Previous调试上次打开的文件,下面是历史任务,下面的勾不勾的话就是默认进入Go,勾上可以自己进行选择。
4、打开IDA导入文件会有一些选项,分别是:作为一个可移植的执行在80386上的程序,MS-DOS的可执行程序,二进制解析。
5、关闭IDA,也有三个选项(因为分析程序后会自动生产一些文件)分别是:不打包、打包删除、打包不删除,下面两个是清理垃圾文件、不保存操作。
6、文件菜单如何做快照,会生成一个新的数据库文件
7、编辑里面export data
8、按空格切换文本和图示模式
9、导航条不同颜色代表不同的块,蓝色:代码段,红色:内核,棕色:数据段
10、不同窗口类型
11、程序执行其实就是硬编码执行的过程,硬编码也就是编译后的CPU指令,
在options-general-disassembly里number of opcode bytes可以设置硬编码显示长度,最多16字节,因为一行硬编码最多16个字节。
12、EXE程序在指令部分就是由硬编码组成,IDA替我们把硬编码转换位汇编代码。
13、shift+f12可以打开string窗口,一键找出所有的字符串,右击setup,还能对窗口的属性进行设置。
14、ACDU指令:A是指令显示成字符串、C是指令显示成代码、D是指令显示成数据、U不去定义以原始字节显示。(90其实就是nub,在函数和函数之间为了字节对其会进行填充)
15、跳转指令G(go)
16、搜索指令ALT+T,case sensitive区分大小写、regular expression正则表达式、identifier标识符,find all occurences是把搜索到的结果列表出来。
17、F5,将汇编翻译成C语言,不过不建议这么做,因为识别不准确,代码会有残缺,可读性很差。
18、改名指令N,分析清楚一个函数就改一个名字,本地名称、名称列表(全局名称(不能重名))、公用名称(不能重名)、自动生成的名称、弱名称、无论如何都创建这个名称(不符合命名规则可以强制创建)
19、创建结构体,点structure窗口左上角edit-add进行添加,新增成员点D添加,成员名字按N改,类型按D切换db、dw、dd,如果是数组类型右键选择array修改长度即可,如果类型是结构体那么ALT+Q可以选择当前识别的结构体。
20、源代码里面引用结构体,有两种情况。一种是全局变量,双击后跳转到IDA识别全局变量的类型,ALT+Q即可修改,名字按N修改。(找MOV后面带全局变量的)
还有一种是局部变量,按T可以引用结构体。
21、注释有三种方式,一是按分号键,任何跳进来的人都会显示副本;
二是按shift+分号,就不会有副本;
三是函数注释,选择函数按分号,可以注释函数返回类型函数名参数等,会在函数上方显示
22、交叉引用,函数或者全局变量被其他哪里引用了,view-open subviews-cross references,或者按X可以列出所有
23、ALT+A打开ASCII string style窗口,点击set default encodings 在弹出框中选择8-bit的change 选择utf-8后点击ok回到c语言界面按f5刷新一下界面,乱码问题解决
24、c语言切换数据显示格式,H可以将其他格式转换回数字,R将常量转型为‘A’格式