汇编笔记(一)——初入门认识计算机
首先要掌握以下知识,计算机的字长与微处理器的寄存器位数有关,以Intel80X86CPU为例,字长16位,那么他的寄存器位数也是16位
汇编语言最常见到的就是16进制数,所以要习惯十六进制思维,汇编语言中数字后面分别用B、H、D代表二进制,十六进制和十进制,十进制的D可以省略
8086寄存器组
在DOS操作系统和Windows操作系统中,都提供了调试工具DEBUG。DEBUG是为汇编语言设计的一种调试工具,它通过单步、设置断点等方式为程序员提供了非常有效的调试手段。利用它可以观察和修改CPU的寄存器、内存单元;可以跟踪程序的运行,发现程序的错误。
DEBUG的主要命令
• R ——查看和修改寄存器
• D ——查看内存单元
• E ——修改内存单元
• U ——反汇编,将机器指令变为汇编指令
• T /P——单步执行
• G ——连续执行程序
• A ——输入汇编指令
• Q ——退出
Windows环境下,微软键加R,进入运行界面,进入DOS界面,输入DEBUG进入,
一些简单的DOS命令
• R ——查看和修改寄存器
• D ——查看内存单元
• E ——修改内存单元
• U ——反汇编,将机器指令变为汇编指令
• T /P——单步执行
• G ——连续执行程序
• A ——输入汇编指令
• Q ——退出
注意:DEBUG和DOS命令都支持大小写
进入DEBUG后,要输入一些命令,在你输入之前有一个提示符,是小短线 - ,在其后直接输入命令。
命令详解及用法:
1. R命令—查看和修改寄存器
R命令有俩种用法:直接键入R—将显示CPU所有的寄存器和标志位
修改寄存器—在R后跟写寄存器名,回车后显示寄存器的内容,在冒号后输入新的值做修改,例图,将AX的值从0000H修改为1010H
Debug环境下,数据都是十六进制数,
再看四个段寄存器,DS,ES,SS,CS,四个值都是0AE3,这表明系统处在同一个逻辑段中,操作系统会根据内存的情况分配段地址,因此每个段地址值可能不一样。
接下来 0AE3:0100是逻辑地址,42是机器指令,INC DX是机器指令
NV……NC这一段是标志位状态,
2. D命令—查看内存单元
内存每16个字节单元为一小段,逻辑段必须从小段的首址开始。用D命令可以查看存储单元的地址和内容。
D的命令格式为
D 段地址:起始偏移地址 [结束偏移地址]
注释:偏移:多用于文件中,用于指定文件中的某个位置,例如一个文件大小为0x10,那么偏移0xB就是指文件的第11(0xB)个字节(这个地方的理解起来可能会有点难,因为他的本身含义和字面含义有很大不同)
D DS:0 //查看数据段,从0号单元开始
D ES:0 //查看附加段,从0号单元开始
D DS:100 //查看数据段,从100H号单元开始
D 0200:5 15 //查看0200H段的5号单元到15H号单元
逻辑地址 存储单元内容 ASCII码显示
中间的存储单元内容,每行为十六个字节单元,中间的小横线用于区分前八个单元与后八个单元,逻辑地址只给出第一个单元的偏移地址,其余十五个没有标出,可以推断出第一行单元的偏移地址0000H~000FH,第二行0010H~001FH,以此类推。右边显示内存单元的ASCII码表示的字符,无法显示用小点代替。
3. E命令—修改内存单元
用E命令可以修改多个储存单元的内容,命令格式为E 段地址:起始地址 修改值 修改值……
例: E DS:5 1 2 3
如下图所示,修改前为9A EE EF,修改后为01 02 03
E后直接跟偏移地址,则修改当前数据段下偏移地址所指单元值,
发现你E后面的地址回车,会直接显示地址和当前值,然后让你输入你要修改的值
还可以用E命令修改其它段的存储单元内容。就不再贴图了。
4. U命令—反汇编
我们所编写的汇编程序经过编译后生成二进制的机器指令代码,U命令可以将二进制的机器指令变为助记符形式的汇编指令,所以U指令称为反汇编
再次提示:debug指令是不关注你的大小写的,
逻辑地址 机器指令 汇编指令
注意:多次键入U,可连续显示后面的程序部分。
U后跟偏移地址,则从该地址开始反汇编。
5. A命令—输入汇编指令
在debug下,使用A指令可以输入汇编指令,系统将自动将键入的汇编指令翻译成机器代码,并按顺序存放在指定地址开始的区域中,debug环境下默认为十六进制(又说一遍),所以二进制或者十进制都需要转换,
6. T/P—单步执行命令
当汇编指令输入完成后,就需要执行,T命令可以一条一条的去执行命令,P与T相同,但是当遇到中断指令INT n和调用指令CALL时,应该用P指令,以确保程序正常运行,T进去可能无法返回,P是直接执行,并将结果带回,遇到循环指令LOOP时,P指令可以快速结束循环。
也可以多次执行
-T 3,就是连续执行三条指令
7.Q指令—退出debug
输入Q,回车,返回DOS下
原本我是拿word写的,复制粘贴过来所有图都没了,很抱歉大家,新手入门,轻喷
[课程]Android-CTF解题方法汇总!