草庐IT

IDA反汇编

全部标签

LyScript 获取上或下一条汇编指令

LyScript插件默认并没有提供上一条与下一条汇编指令的获取功能,当然你可以使用LyScriptTools工具包直接调用内置命令得到,不过这种方式显然在效率上并不理想,我们需要在LyScript插件API基础上自己封装实现这个功能。插件地址:https://github.com/lyshark/LyScript获取下一条汇编指令:下一条汇编指令的获取需要注意如果是被命中的指令则此处应该是CC断点占用一个字节,如果不是则正常获取到当前指令即可。1.我们需要检查当前内存断点是否被命中,如果没有命中则说明此处我们需要获取到原始的汇编指令长度,然后与当前eip地址相加获得。2.如果命中了断点,则此处

逆向基础知识-汇编和PE文件

汇编基础知识1.九个寄存器(32位)寄存器编号eax:累加器(accumulator),它是很多加法乘法指令的缺省寄存器。0ecx:计数器(counter),是重复(REP)前缀指令和LOOP指令的内定计数器。1edx:总是被用来放整数除法产生的余数。2ebx:"基地址"(base)寄存器,在内存寻址时存放基地址。3esp:存储堆栈的最顶端4EBP:是"基址指针",不是必须的5esi:6edi:变址寄存器,主要用于存放存储单元在段内的偏移量,作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。它们可作一般的存储器指针使用。7eip:存储当前CPU马上要执行的指令寄存器32位可以拆分为两个1

逆向基础知识-汇编和PE文件

汇编基础知识1.九个寄存器(32位)寄存器编号eax:累加器(accumulator),它是很多加法乘法指令的缺省寄存器。0ecx:计数器(counter),是重复(REP)前缀指令和LOOP指令的内定计数器。1edx:总是被用来放整数除法产生的余数。2ebx:"基地址"(base)寄存器,在内存寻址时存放基地址。3esp:存储堆栈的最顶端4EBP:是"基址指针",不是必须的5esi:6edi:变址寄存器,主要用于存放存储单元在段内的偏移量,作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。它们可作一般的存储器指针使用。7eip:存储当前CPU马上要执行的指令寄存器32位可以拆分为两个1

汇编语言实验1—Debug基础操作

1.使用Debug,将下面的程序段写入内存,逐条执行,观察每条指令执行后CPU中相关寄存器中内容的变化。记录1:最后一条指令执行完BX=(4026)H,AL=(66)H,检验结果。 两种写入:e命令写入 A命令写入 2.将下面三条指令写入从2000:0开始的内存单元中,利用这3条指令计算2的8次方。movax,1addax,axjmp2000:0003记录1:计算2的8次方,执行完AX=(0100)H,检验结果。思考:这3条指令如何计算2的8次方呢?答:首先给ax赋值为1,add后ax=2,执行add1次2*2,执行2次就是2的3次方,那么2的8次方就是add执行7次。执行之前先将指令指向ad

汇编语言实验1—Debug基础操作

1.使用Debug,将下面的程序段写入内存,逐条执行,观察每条指令执行后CPU中相关寄存器中内容的变化。记录1:最后一条指令执行完BX=(4026)H,AL=(66)H,检验结果。 两种写入:e命令写入 A命令写入 2.将下面三条指令写入从2000:0开始的内存单元中,利用这3条指令计算2的8次方。movax,1addax,axjmp2000:0003记录1:计算2的8次方,执行完AX=(0100)H,检验结果。思考:这3条指令如何计算2的8次方呢?答:首先给ax赋值为1,add后ax=2,执行add1次2*2,执行2次就是2的3次方,那么2的8次方就是add执行7次。执行之前先将指令指向ad

汇编语言实验2—汇编程序设计入门

------------恢复内容开始------------DB\DW\DD说明:db定义字节类型变量,一个字节数据占1个字节单元,读完一个,偏移量加1;dw定义字类型变量,一个字数据占2个字节单元,读完一个,偏移量加2;dd一个双字数据占4个字节单元,读完一个,偏移量加4。汇编伪指令ORGn作用是定义程序或数据块的起始地址,指示此语句后面的程序或数据块以n为起始地址连续存放在程序存储器中。 (1)对于下面的数据定义,各条MOV指令单独执行后,有关寄存器的内容是什么?表1运算符使用说明运算符使用说明SEG返回变量/标号的段值OFFSET取变量/标号的偏移地址TYPE返回变量类型:字节=1,字=

汇编语言实验2—汇编程序设计入门

------------恢复内容开始------------DB\DW\DD说明:db定义字节类型变量,一个字节数据占1个字节单元,读完一个,偏移量加1;dw定义字类型变量,一个字数据占2个字节单元,读完一个,偏移量加2;dd一个双字数据占4个字节单元,读完一个,偏移量加4。汇编伪指令ORGn作用是定义程序或数据块的起始地址,指示此语句后面的程序或数据块以n为起始地址连续存放在程序存储器中。 (1)对于下面的数据定义,各条MOV指令单独执行后,有关寄存器的内容是什么?表1运算符使用说明运算符使用说明SEG返回变量/标号的段值OFFSET取变量/标号的偏移地址TYPE返回变量类型:字节=1,字=

自己动手从零写桌面操作系统GrapeOS系列教程——17.用汇编语言清空屏幕

学习操作系统原理最好的方法是自己写一个简单的操作系统。在QEMU中会默认输出一些字符,有时候会干扰我们自己输出的字符。一个比较好的办法是向将屏幕清空,再输出我们想要输出的字符。下面就来学习如何清空屏幕。一、清空屏幕其实清空屏幕的原理很简单,就是将屏幕写满空格就行了。下面来实战。mbr8.asm代码如下:;定义常量(作用和C语言中的#define一样)VIDEO_CHAR_MAX_COUNTequ2000;默认屏幕最多显示字符数。org0x7c00;初始化段寄存器movax,0xb800moves,ax;本程序中es专用于指向显存段;清屏callfunc_clear_screenstop:hlt

自己动手从零写桌面操作系统GrapeOS系列教程——17.用汇编语言清空屏幕

学习操作系统原理最好的方法是自己写一个简单的操作系统。在QEMU中会默认输出一些字符,有时候会干扰我们自己输出的字符。一个比较好的办法是向将屏幕清空,再输出我们想要输出的字符。下面就来学习如何清空屏幕。一、清空屏幕其实清空屏幕的原理很简单,就是将屏幕写满空格就行了。下面来实战。mbr8.asm代码如下:;定义常量(作用和C语言中的#define一样)VIDEO_CHAR_MAX_COUNTequ2000;默认屏幕最多显示字符数。org0x7c00;初始化段寄存器movax,0xb800moves,ax;本程序中es专用于指向显存段;清屏callfunc_clear_screenstop:hlt

自己动手从零写桌面操作系统GrapeOS系列教程——21.汇编语言写硬盘实战

学习操作系统原理最好的方法是自己写一个简单的操作系统。在上一讲中我们学习了用汇编语言读硬盘,本讲我们来学习用汇编语言写硬盘。同样也是设计一个简单的实验,实验内容为:在内存中准备一段有特征的512字节数据,地址为0x7e00~0x7fff,其特征是前3个字节依次为4、5、6,最后3个字节依次为6、5、4。然后将该段内存数据写入到硬盘的第2个扇区,并查看虚拟硬盘第2个扇区的数据是否与内存中0x7e00~0x7fff的数据一致,如果一致则说明写硬盘成功。本讲代码文件只有一个boot2.asm。boot2.asm代码如下:;定义常量DISK_BUFFERequ0x7e00;临时存放数据用的缓存区,放到