汇编语言
小蚂蚁_CrkRes
Where there is a will, there is a way
展开
-
逆向工程-printf()函数与参数传递
#include<stdio.h>int main(){printf("a=%d; b=%d;c=%d",1,2,3);return 0;}x86传递3个参数$SG3830 DB 'a=%d;b=%d;c=%d',00h...push 3push 2push 1push OFFSET $SG3830call _printf...原创 2020-01-15 13:55:43 · 825 阅读 · 0 评论 -
逆向工程-栈
为什么栈会逆增长多数的栈是逆增长的,它会从高地址向低地址增长。历史原因。当计算机尚未小型化的时候,它还有数个房间那么大。在那个时候,内存就分为两个部分,即"堆/heap"和栈/stack。当然,在程序执行过程中,堆和栈到底会增长到什么地址并不好说,所以人们干脆把它们分开:栈的用途1)保存函数结束时的返回地址x86当程序使用call指令调用其他函数时,call指令结...原创 2020-01-15 11:11:33 · 477 阅读 · 0 评论 -
逆向工程-函数序言和函数尾声
函数序言(function prologue)是函数在启动的时候运行的一系列指令。push ebpmov ebp,espsub esp,X这些指令的功能是:在栈里保存EBP寄存器的内容、将ESP的值复制到EBP寄存器,然后修改栈的调试,以便为本函数的局部变量申请存储空间。在函数执行期间,EBP寄存器不受函数运行的影响它是函数访问局部变量和函数参数 的基准值。虽然我们也可使用...原创 2020-01-15 10:15:12 · 2190 阅读 · 2 评论 -
逆向工程-Hello World
#include<stdio.h>int main(){printf("hello,world\n");return 0;}x86使用MSVC编译程序cl 1.cpp /Fa 1.asm/Fa选项将使编译器生成汇编指令清单文件(assembly listing file),并指定汇编列表文件的文件名称是1.asm1.asm内容如下:...原创 2020-01-14 17:01:05 · 4419 阅读 · 0 评论 -
逆向工程-CPU简介及最简函数
1 CPU简介CPU是执行程序机器码的硬件单元。简要地说,其相关概念主要有以下几项1)指令码CPU受理底层命令。典型的底层命令有:将数据在寄存器间转移、操作内存、计算运算等指令。每类CPU都有自己的指令集架构(Instruction Set Architecture,ISA)。2)机器码发送给CPU的程序代码。一条指令通常被封闭为若干字节。3)汇编语言易读易记的代...原创 2020-01-14 15:45:41 · 658 阅读 · 0 评论 -
汇编-4
逻辑运算指令逻辑运算指令是另一组重要的指令,它包括:逻辑与(AND)、逻辑或(OR)、逻辑非(NOT)和异或指令(XOR),逻辑运算指令也是经常使用的指令。1、逻辑与操作指令AND指令的格式:AND Reg/Mem, Reg/Mem/Imm受影响的标志位:CF(0)、OF(0)、PF、SF和ZF(AF无定义)指令的功能是把源操作数中的每位二进制与目的操作原创 2017-06-19 21:45:13 · 270 阅读 · 0 评论 -
汇编-5
检测位指令TEST检测位指令是把二个操作数进行逻辑“与”操作,并根据运算结果设置相应的标志位,但并不保存该运算结果,所以,不会改变指令中的操作数。在该指令后,通常用JE、JNE、JZ和JNZ等条件转移指令。指令的格式:TEST Reg/Mem, Reg/Mem/Imm受影响的标志位:CF(0)、OF(0)、PF、SF和ZF(AF无定义)call X原创 2017-06-19 22:13:55 · 598 阅读 · 0 评论 -
汇编-6
1、子程序的调用和返回指令子程序的调用和返回是一对互逆操作,也是一种特殊的转移操作。一方面,之所以说是转移,是因为当调用一个子程序时,程序的执行顺序被改变,CPU将转而执行子程序中的指令序列,在这方面,调用子程序的操作含有转移指令的功能,子程序的返回指令的转移特性与此类似;另一方面,转移指令是一种“一去不复返”的操作,而当子程序完后,还要求CPU能转而执行调用指令之下的指令,它原创 2017-06-19 22:28:55 · 364 阅读 · 0 评论 -
PE Dump汇编程序
PE Dump 的实现是PE文件字码查看器,利用它可以查看和总计指定的PE文件的十六进制字节码,帮助我们更好地分析PE结构列一:是地址。地址的值是第(n*16+1)个字节在文件中的位置列二:是由空格分隔符分隔的16个字节的十六进制显示列三:这16个字节对应的ASCII码值。打开PE文件---》获取文件大小totalSize----》求循环显示16字节数据-----》显示剩余totalSize%16...原创 2018-03-30 16:43:31 · 709 阅读 · 0 评论 -
OllyDbg 快捷键
退格键 - 移除选中部分的自动分析信息。如果分析器将代码误识别为数据,这个快捷键就非常有用。请参考解码提示[decoding hints].Alt+退格键 - 撤消所选部分的修改,以备份数据的相应内容替换所选部分。仅当备份数据存在且与所选部分不同时可用。Ctrl+F1 -如果API帮助文件已经选择,将打开与首个选择行内的符号名相关联的帮助主题。F2 -在首个选择的命令上开关INT3 断点[Brea...原创 2018-03-29 14:22:21 · 975 阅读 · 0 评论 -
函数栈桢概念
stack frame 栈帧 (激活记录)1.先要保护现场2.将参数按照调用约定放在被运行栈帧上,这样这个栈帧的栈顶指针就会发生改变3.如果有必要,调用函数会配置一个栈指针,保存调用方希望保持不变的内容(寄存器值)4.被调用函数为它可能需要的任何局部变量分配空间,需要栈帧栈顶向上(-操作)开辟地方5.被调用函数返回值存放在EAX或者存放在可以立即被调用到的地方6.一旦函数完...原创 2019-08-21 15:30:25 · 338 阅读 · 0 评论 -
汇编-3
算术运算指令算术运算指令是反映CPU计算能力的一组指令,也是编程时经常使用的一组指令。它包括:加、减、乘、除及其相关的辅助指令。该组指令的操作数可以是8位、16位和32位(80386+)。当存储单元是该类指令的操作数时,该操作数的寻址方式可以是任意一种存储单元寻址方式。1、加法指令指令的格式:ADD Reg/Mem, Reg/Mem/Imm受影响的标志原创 2017-06-19 21:32:55 · 227 阅读 · 0 评论 -
汇编-2
数据传送指令**************************************************************************************************1、传送指令MOV(move)***************************************************************************原创 2017-06-18 12:47:22 · 286 阅读 · 0 评论 -
汇编-1
数据类型**************************************************************************************************十进制 二进制 十六进制 0 0000 01 0001 12 0010 2 3 0011 3 4 0100 45 0101 56 0110 67 0111原创 2017-06-18 12:47:06 · 7754 阅读 · 0 评论 -
X86汇编语言总结
AX、BX、CX、DX一般用来存放数据[BX]、[BP]、[SI]、[DI]中一般存放着某个段寄存器的偏移地址,默认情况下,[BX]中存放着数据段(DS)的偏移地址,[BP]中存放着栈段(SS)的偏移地址(功能和SP类似),其中BX只能和SI、DI组合,BP只能和SI、DI组合,SI、DI间是不能组合的Loop指令一般搭配着CX寄存器使用,每循环一次,CX寄存器中的值减转载 2015-09-30 14:28:01 · 575 阅读 · 0 评论 -
汇编中的字符串操作指令
一、字节操作指令:lodsb和stosb1. lodsd需要寄存器esi配合使用。每执行一次lodsb,就将[esi]中的一个字节复制到al寄存器中。 即:lodsd == [esi] --> al 2. stosb需要寄存器edi配合使用。每执行一次stosb,就将al中的内容复制到[edi]中。 即:stosb == al --> [edi] 3. ec转载 2016-08-30 13:59:29 · 6253 阅读 · 0 评论 -
反汇编mbr
MBR 相关的开机过程。以及我们经常用的U盘自启动 程序到底值怎么玩的。window开机流程流程加电-->BIOS--> MBR--> DPT--> pbr--> Bootmgr--> bcd--> Winload.exe---—-> 内核加载–> 整个windows7系统细节在CPU上电之后,若由硬盘启动,则BIOS将硬盘的主引导记录(位于0柱面、0磁道、1扇区)读入转载 2016-08-26 08:49:02 · 812 阅读 · 0 评论 -
主引导记录(MBR)的反汇编分析
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 主引导记录(MBR)的反汇编分析;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MBR代码分析网上早就有了,但我找到的都是针对老版MBR的分析。转载 2016-08-26 09:04:44 · 3171 阅读 · 0 评论 -
汇编指令CLI/STI
CLI禁止中断发生STI允许中断发生 这两个指令只能在内核模式下执行,不可以在用户模式下执行;而且在内核模式下执行时,应该尽可能快的恢复中断,因为CLI会禁用硬件中断,若长时间禁止中断会影响其他动作的执行(如移动鼠标等等),系统就会变得不稳定。在标志寄存器中中断标志清零的情况下,可以以“int ××”的形式调用软中断。 程序员可以改变段地址和偏移地址,但是在这...原创 2016-08-26 09:14:32 · 36557 阅读 · 4 评论 -
rep stos 指令
汇编代码: rep stos dword ptr es:[edi]在网上查了相关资料显示:/************************************************************/lea edi,[ebp-0C0h] mov ecx,30h mov eax,0CCCCCCCCh rep stos dword pt转载 2016-10-27 09:01:30 · 2346 阅读 · 0 评论 -
用汇编分析C++程序
一、 引用“引用”是C++中引入的重要概念之一。指针的不安全使人们对它诟病颇多,C++引用机制恰如其分的解决了这一问题。在C++语法上,引用和指针是不同的,但在内部实现机制上,它们是完全相同的——所以,引用和指针在机器码层次没有效率高下。 来个例子,先分析之。我们有一个Test.cpp文件如下: #include int main() {转载 2017-01-18 15:07:43 · 2368 阅读 · 0 评论 -
push、pop及函数调用约定
push:把一个32位的操作数压入堆栈中。这个操作导致esp被减4。esp被形象地称为栈顶。我们认为顶部是地址小的区域,那么,压入堆栈中数据越多,这个堆栈也就越堆越高,esp也就越来越小。在32位平台,esp每次减少4字节。pop:相反,esp被加4,一个数据出栈。pop的参数一般是一个寄存器,栈顶的数据被弹出到这个寄存器中。call 的本质相当于p原创 2017-03-24 12:42:51 · 4736 阅读 · 0 评论 -
Why does the compiler generate a MOV EDI, EDI instruction at the beginning of functions?
Why does the compiler generate a MOV EDI, EDI instruction at the beginning of functions? I’ve recently noticed that on the XPSP2 Beta that I am running the function prologs look like this:翻译 2017-04-19 10:19:45 · 477 阅读 · 0 评论 -
函数开始处的MOV EDI, EDI的作用
0:000> u TextOutA-0x0a L 10 GDI32!NtGdiTransparentBlt+0xa: 77efc43f ff12 call dword ptr [edx] 77efc441 c22c00 ret 2Ch 77efc444 90 nop 77efc445 90转载 2017-04-19 10:12:15 · 2832 阅读 · 0 评论 -
vs2010汇编开发环境搭建
1. 虽然使用MASM32也可以编译运行汇编程序,但是既然装了VS2010,它也能支持编译运行汇编吧.不然微软的开发人员难道还不用vs写汇编程序了?http://www.masm32.com/2. x64程序是大势所趋,win32(只能支持4G内存)逐渐退出舞台了,所以x64编译汇编也是必然要知道的.win32项目步骤:1.建一个空项目,必须先建空项原创 2015-10-23 11:11:12 · 2022 阅读 · 0 评论