本文链接:https://blog.csdn.net/pl20140910/article/details/78227133说明符号 说明r 通用寄存器m 代表内存imm 代表立即数r8 代表8位通用寄存器m8 代表8位内存imm8 代表8位立即数一.MOV语法操作码 目标操作数 源操作数MOV r/m8 r8MOV r/m16 r16MOV r/m32 r32MOV r8 r/m8MOV r16 r/m16MOV r32 r/m32MOV r8 imm8MOV r16 imm16MOV r32…
20145314郑凯杰<信息安全系统设计基础>GDB调试32位汇编堆栈分析 本篇博客将对第五周博客中的GDB调试32位汇编堆栈进行分析 首先放上以前环境配置的图: 图1: 测试代码: #include <stdio.h> int g(int x){ return x+5; } int f(int x){ return g(x)+3; } int main(ing argv,char *argc[]){ return f(7)+14; } 汇编堆栈分析过程: 预热 首先,进行最简单的…
32位汇编第四讲,干货分享,汇编注入的实现,以及快速定位调用API的数量(OD查看) 昨天,大家可能都看了代码了,不知道昨天有没有在汇编代码的基础上,实现注入计算器. 如果没有,今天则会讲解,不过建议把昨天代码熟悉一遍(课程是紧跟着来的,请不要拉下任何一天,因为今天的知识, 可能就和昨天的知识挂钩,昨天的知识,和前天的挂钩.....,当然你如你懂汇编,不是新手,那么则可以直接往下看) 一丶远程线程注入,和汇编远程注入的区别 昨天的代码,大家可能看了(没看也没有关系,就是远程线程注入的代码,开发角…
GDB调试32位汇编堆栈分析 测试源代码 #include <stdio.h> int g(int x){ return x+5; } int f(int x){ return g(x)+3; } int main(ing argv,char *argc[]){ return f(7)+19; } main函数汇编代码 g函数汇编代码 f函数汇编代码 调试过程 在汇编调试中单步执行使用si,而display /i $pc该语句可以使得我们每一次单步执行时输出正在执行的语句,i r $xxx则可…
32位汇编第一讲x86和8086的区别,以及OllyDbg调试器的使用 一丶32位(x86也称为80386)与8086(16位)汇编的区别 1.寄存器的改变 AX 变为 EAX  可以这样想,16位通用寄存器前边都加个E开头 例如: EAX EBX ECX EDX ESI EDI ESP EDP ;八位寄存器 EIP EFLAGES ;特殊寄存器CS ES SS DS GS FS ;其中GS FS是新增加的寄存器,这些段寄存器,并不是4个字节(32位的)还是以前16位的 注意在32位下没有分段的…
32位汇编第二讲,编写窗口程序,加载资源,响应消息,以及调用C库函数 (如果想看所有代码,请下载课堂资料,里面有所有代码,这里会讲解怎么生成一个窗口程序) 一丶32位汇编编写Windows窗口程序 首先我们知道32位汇编是可以调用Windows API的,那么今天我们就调用windowsAPI来写一个窗口程序 如果你有windows开发知识,那么就很理解了,如果没有,那么跟着我写,跟着步骤去写,那么也可以写出来 首先我们要编写一个窗口程序(使用SDKAPI编写)有几个步骤 1.设计窗口类 2.注…
32位汇编第三讲,RadAsm,IDE的配置和使用,以及汇编代码注入方式 一丶RadAsm的配置和使用 用了怎么长时间的命令行方式,我们发现了几个问题 1.没有代码提醒功能 2.编写代码很慢,记不住各种声明 那么现在有大神,已经帮我们做了一个IDE环境,就是RadAsm,首先简单介绍一下界面 (对于这个IDE(最新版是3.0)我已经打包好了,有中文版本,和英文版本) 我们需要配置一下环境 1.配置编译环境,配置lib文件库,配置Debug调试器 打开后会弹出 首先这里我们注意下面的几个选项 1.…
由于使用as和ld来编译链接汇编程序,在使用C库的时候比较麻烦,需要输入比较多的指令,所以使用gcc进行编译链接.由于书中内容是32位汇编程序,但是机器使用的是64位操作系统,自带的gcc也是64位的,导致编译生成的程序,一运行就会Segment Fault.经过查询之后,发现是调用printf函数的时候,总是报错,查询之后发现是32位汇编和64位汇编在调用C库的时候,32位使用pushl指令来压栈传递参数,而64位汇编是使用通用寄存器来传递参数的. 32汇编的代码是: .code32 .sec…
32位汇编第六讲,OllyDbg逆向植物大战僵尸,快速定位阳光基址 一丶基址,随机基址的理解 首先,全局变量的地址,我们都知道是固定的,是在PE文件中有保存的 但是高版本有了随机基址,那么要怎么解决这个问题,不解决这个问题,那么如果以后逆向分析的时候,找不到基址,那么就不能进行下一层的操作 首先看下固定基址,和随机基址 ①丶新建工程 (这里使用VS2013 ,VC++6.0不支持随机基址) 自己新建一个程序,添加个CPP文件 编写如下代码 #include <stdio.h> #include…
汇编语言在32位和64位下有区别    32位的汇编在代码前增加.code32    as可以通过--32指定生成32位汇编 在64位系统下ld链接生成32位程序:    ld: i386 architecture of input file `xxx.o' is incompatible with i386:x86-64 output(1)使用--oformat elf32-i386(2)若(1)无效,可以使用-m elf_i386…