利用汇编语言计算机和人类链接更为便捷如下图所示:
寄存器:
简单讲就是CPU可以存储数据的器件,一个CPU可以有多个寄存器。AX、BX是两个不同的寄存器。
16位处理器有14个寄存器:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW。
32位处理器有16个寄存器:EAX、EBX、ECX、EDX、ESI、EDI、EBP、ESP、EIP、ES、CS、SS、DS、FS、GS、EFLAGS。
64位处理器有15个寄存器:RAX、RBX、RCX、RDX、RSI、RDI、RBP、RSP、R8、R9、R10、R11、R12、R13、R14、R15
寄存器的作用
- 可以用来读写数据到电脑的周边设备
- 可将寄存器内的数据执行算术及逻辑运算
- 存于寄存器内的地址可用来指向内存的某个位置,即寻址
数学运算的汇编指令 mov、add、sub、xor
汇编指令 | 控制CPU完成的操作 | 用高级语言的语法描述 |
---|---|---|
mov ax ,18 | 将18送入寄存器AX | AX=18 |
mov ah ,78 | 将18送入寄存器AH | AH=78 |
mov ax ,bx | 将寄存器BX中的数据送入寄存器AX | AX=BX+18 |
add ax ,8 | 将寄存器AX中的数值加上8 | AX=AX+8 |
sub ax ,18 | 将寄存器AX中的数值减去18 | AX=AX-18 |
xor ax ,18 | 将寄存器AX中的数值与18异或 | AX=AX^18 |
函数跳转指令
- 无条件转移指令 (长转移)
JMP-- 无条件转移指令
CALL-- 过程调用
RET/RETF-- 过程返回. - 条件转移指令-- (短转移,-128到+127的距离内)( 当且仅当(SF XOR OF)=1时,OP1<OP2 )
JA/JNBE – 不小于或不等于时转移.
JAE/JNB – 大于或等于转移.
JB/JNAE – 小于转移.
JBE/JNA – 小于或等于转移.
以上四条,测试无符号整数运算的结果(标志C和Z).
JG/JNLE --大于转移.
JGE/JNL --大于或等于转移.
JL/JNGE --小于转移.
JLE/JNG – 小于或等于转移.
以上四条,测试带符号整数运算的结果(标志S,O和Z).
JE/JZ --等于转移.
JNE/JNZ – 不等于时转移.
JC – 有进位时转移.
JNC – 无进位时转移.
JNO – 不溢出时转移.
JNP/JPO – 奇偶性为奇数时转移.
JNS --符号位为 “0” 时转移.
JO – 溢出转移.
JP/JPE – 奇偶性为偶数时转移.
JS – 符号位为 “1” 时转移. - 循环控制指令(短转移)
LOOP – CX不为零时循环.
LOOPE/LOOPZ – CX不为零且标志Z=1时循环.
LOOPNE/LOOPNZ – CX不为零且标志Z=0时循环.
JCXZ – CX为零时转移.
JECXZ – ECX为零时转移. - 中断指令
INT – 中断指令
INTO – 溢出中断
IRET – 中断返回 - 处理器控制指令
HLT — 处理器暂停, 直到出现中断或复位信号才继续.
WAIT --当芯片引线TEST为高电平时使CPU进入等待状态.
ESC – 转换到外处理器.
LOCK — 封锁总线.
NOP – 空操作.
STC --置进位标志位.
CLC --清进位标志位.
CMC – 进位标志取反.
STD --置方向标志位.
CLD – 清方向标志位.
STI --置中断允许位.
CLI --清中断允许位.
IDA安装问题解决汇总:
1、打开的时候出现:Oops! internal error 40343 occured.
Further work is not possible and IDA will close.
Would you like to create a crash dump for a bug report?
仔细检查一下安装路径,必要要求:安装路径下不能出现汉字。重装一下即可
2、另一个是按F5查看代码的时候总是出现错误或者不能使用的: 仔细看下文件,好多文件需要32位的IDA打开才能正常使用,可以用kali 输入命令file + 文件名查看文件位数。
但有的不是这种问题,可以试一下如下解决方法:
圈着的Stack pointer 前边勾选即可。