ida pro功能菜单说明
- IDA View-A是反汇编窗口,定位要修改的代码段在哪里
- HexView-A是十六进制格式显示的窗口,用来修改我们的数据
- Imports是导入表(程序中调用到的外面的函数)
- Functions是函数表(这个程序中的函数),样本的所有函数窗口
- Structures是结构
- Enums是枚举
- Names: 函数和参数的命名列表
- Strings: 字符串显示窗口,会列出程序中的所有字符串
- Exports是导出表(这个程序中能让外面调用的函数)
汇编知识
基础知识
- EAX 是”累加器”(accumulator), 它是很多加法乘法指令的缺省寄存器。
- EBX 是”基地址”(base)寄存器, 在内存寻址时存放基地址。
- ECX 是计数器(counter), 是重复(REP)前缀指令和LOOP指令的内定计数器。
- EDX 则总是被用来放整数除法产生的余数。
- ESI/EDI 分别叫做”源/目标索引寄存器”(source/destination index),因为在很多字符串操作指令中, DS:ESI指向源串,而ES:EDI指向目标串。
- EBP 是”基址指针”(BASE POINTER), 它最经常被用作高级语言函数调用的”框架指针”(frame pointer)。
- ESP 专门用作堆栈指针,被形象地称为栈顶指针,堆栈的顶部是地址小的区域,压入堆栈的数据越多,ESP也就越来越小。在32位平台上,ESP每次减少4字节。
资料转移指令
- MOV 移动
- MOVC 程式记忆体移动
- MOVX 外部RAM和扩展I/O口与累加器A的数据传送指令
- PUSH 放入堆叠
- POP 由堆叠取回
- XCH 8位元交换
- XCHD 低4位元交换
- SWAP 高低4位元交换
算术指令
- ADD 两数相加
- ADDC 两数相加再加C
- SUBB 两数相减再减C
- INC 加一指令
- DEC 减一指令
- MUL (MUL AB乘法指令仅此一条)相乘指令,所得的16位二进制数低8位存累加器A高8位存B
- DIV (DIV AB 除法指令仅此一条)相除指令,所得商存A,余数存B
- DA (DA A 只此一条指令)调整为十进数
逻辑指令
- RL 不带进位左环移
- RLC 带进位左环移
- RR 不带进位右环移
- RRC 带进位右环移
- CPL 取反指令
- CLR 清除为0
- ANL做AND(逻辑与)运算
- ORL做OR(逻辑或)运算
- XRL (逻辑异或)运算
控制转移类指令
- JC C=1时跳
- JNC C=0时跳
- JB 位元=1时跳
- JNB 位元=0时跳
- JBC 位元=1时跳且清除此位元
- LCALL 长调用子程序
- ACALL 绝对调用子程序
- RET 由副程式返回
- RETI 由中断副程式返回
- AJMP 绝对转移
- SJMP 相对转移
- JMP @A+DPTR 散转,相对DPTR的间接转移
- JZ A=0时跳
- JNZA 0时跳
- CJNE 二数比较,不相等时跳
- DJNZ 减一,不等於0时跳
- NOP 空操作
位变量指令
- SETB 设定为1
- ORG 程序开始,规定程序的起始地址
- END 程序结束
- EQU 等值指令(先赋值后使用)例:SUM EQU 30H
- DB 定义字节指令
- DW 定义字内容
- DS 定义保留一定的存贮单元数目
- BIT 位地址符号指令 例:SAM BIT P1.0
- RET 子程序返回指令
- RETI 中断子程序返回指令
- $ 本条指令地址
参考:https://blog.csdn.net/re_psyche/article/details/78797689
https://blog.csdn.net/wang010366/article/details/52505345