随笔分类 - 逆向基础
摘要:1.类型的转换 1)基础类型之间可以进行转换 例如:下面的代码可以通过编译 int x = 1; char y = 2; x = y; int x = 1; char y = 2; x = y; 2)基础数据和结构类型之间不能转换 无法通过编译: struct st{ int a; int b; }
阅读全文
摘要:1.带星号“*”的类型 任何一种数据类型的变量前面加上一个或多个*,将变成带*的类型; 例如:int* x; 2.声明方式 推荐的方式:可以清晰的看到是一个带星号的变量 char* x; short* y; int* z; float* f; double* d; Student* st; char
阅读全文
摘要:1.关于switch语句 如果if语句中表达式是判断是否等于一个常量时,可以用switch语句来代替 if(表达式 == 常量1) { //...代码 } else if(表达式 == 常量2) { //...代码 } else if(表达式 == 常量3) { //...代码 } else { /
阅读全文
摘要:例如: 当需要一个容器,能存储5个数据,者5个数据有1字节的,有2字节的也有4字节的时,用数组 不能满足要求了;此时需要用到结构; 1.关于结构 1)结构的定义 struct st //struct是一个关键字 st是用户自己定义的一个名字 { //可以定义多种类型 int a; char b; s
阅读全文
摘要:1.返回值的传递 各种类型返回值传出来的方式: 1、char类型的返回值 ->寄存器al 2、short 类型的返回值 ->寄存器ax 3、int 类型的返回值 ->寄存器eax 如果是long long 则将低位保存在eax,将高位保存在edx; //vc用__int64表示long long _
阅读全文
摘要:1、二维数组的初始化 int arr[3][4] = { {1,2,3,4}, {5,6,7,8}, {9,7,6,5} } int arr[3][4] = { {1,2,3,4}, {5,6,7,8}, {9,7,6,5} } 编译器如何分配空间: int arr[3*4] = {1,2,3,4,
阅读全文
摘要:1.do...while do..while语句反汇编 : DO_BEGIN地址: 影响标志位的指令 jxx DO_BEGIN DO_BEGIN地址: 影响标志位的指令 jxx DO_BEGIN 例如: 总结: 1、根据条件跳转指令所跳转到的地址,可以得到循环语句块的起始地址。 2、根据条件跳转指令
阅读全文
摘要:1.if语句的反汇编判断 if语句反汇编后的标志: 执行各类影响标志位的指令 jxx xxxx 执行各类影响标志位的指令 jxx xxxx 如果遇到上面的指令,则很可能是if语句; 例如: 1、案例一 mov eax,dword ptr [ebp+8] 分析:cmp指令 影响标志位 cmp eax,
阅读全文
摘要:1.内存区域 程序需要加载到内存才能运行; 程序运行时会把内存分为几个区域; 代码区 ->放程序代码,可读可执行; 堆栈 ->存放参数、局部变量、临时数据; 堆 ->动态申请的内存,可读可写; 全局变量区 ->存放全局变量;可读可写; 常量区 ->存放常量,只读; 2.全局变量 特点: 1、在程序编
阅读全文
摘要:1.c语言中的数据类型 数据类型的三个要素: 1】存储数据的宽度 2】存储数据的格式 3】作用范围(作用域) 2.整数类型 char 8BIT 1字节 short 16BIT 2字节 int 32BIT 4字节 long 32BIT 4字节 例如: void plus(){ char a = 0x1
阅读全文
摘要:1.裸函数 c语言的普通函数中即使什么都不写,编译器在编译时也会给它加上一些汇编代码;比如开栈、返回等; 裸函数就是编译器什么都不管,一切都需要自己来处理; 裸函数的优点是自由度高,可以应用在钩子程序等地方; 例如:一个裸函数 #include "stdio.h" void __declspec(n
阅读全文
摘要:1.vc6的相关使用 1)常用的快捷键 f7 ->编译 f5 ->运行 f9 ->断点 f10 ->单步执行 f11 ->单步执行,可进入函数 shift+f5 ->退出debug 2)两个常用的窗口 这两个窗口都需要在断点调试时才能打开; 1】寄存器窗口 可以用来查看寄存器的值; efl为标志寄存
阅读全文
摘要:1.函数 计算机的函数,是一个固定的一个程序段,或称其为一个子程序,它在可以实现固定运算功能的同时还带 有一入口和一个出口,所谓的入口,就是函数所带的各个参数,我们可以通过这个入口,把函数的参数值代入子程序, 供计算机处理,所谓出口,就是指函数的计算结果,也称为返回值,在计算机求得之后,由此口带回给
阅读全文
摘要:常用的jcc指令表 1.修改eip的指令 1)jmp 寄存器EIP的值为程序将要执行的下一条指令的地址; jcc指令本质上是修改EIP的值; 不能用mov指令直接修改eip的值,如果想修改eip的值需要用专用的指令,例如jmp; 格式:jmp r/imm 2)call 和jmp差不多,也是修改eip
阅读全文
摘要:1.关于标志寄存器 标志寄存器(EFLAGS)又称为程序状态和控制寄存器(Program Status andControl Register),主要用于记录当前的程序状态。 1)进位标志(CF ->carry flag):如果运算结果的最高位产生了进位或借位操作时标志位置 1 例:定义数值宽度为
阅读全文
摘要:暴力破解的原理: 比如说有一个门被锁了,想进去需要开锁; 一般的思路是找到钥匙,或者研究锁的原理然后想办法开锁; 暴力破解就是直接把锁砸了; 1.分析程序 有一个简单的程序,在输入框中输入正确的密码; 然后点击check按钮,如果密码正确则弹出正确框; 如果密码错误,弹错误提示; 分析: 可以从弹框
阅读全文
摘要:计算机在运行时,需要提供数据的容器; 容器由内存和cpu提供,内存提供的容器比较多;cpu提供的容器较少但其中的数据计算速度快; cpu提供的容器就是寄存器,寄存器有特定的数据宽度,决定了该寄存器存储数据的范围; 1.常用的32位寄存器 32位通用寄存器还可以拆分来使用;将低16位当做16位寄存器;
阅读全文
摘要:1.数据的宽度 计算机以二进制的形式保存数据; 在计算机中由于受到硬件的制约,所存的数据长度会有限制; 超过最大宽度的数据会被丢弃; 例如:4位宽度表示计算机最多只能存储4位二进制数; 计算机存储的相同的二进制数可以被根据需要当成有符号数和无符号数; 比如数据宽度为4时,可存储16个数; 如果把这些
阅读全文
摘要:1.进制的定义 十进制 ->由10个符号组成,分别是0123456789,逢10进1; 十六进制 ->由16个符号组成,分别是0123456789ABCDEF,逢16进1; 依此类推,n进制的定义~ 2.进制的本质 进制的本质是符号; 而符号可以自己定义,只要使用进制的双方遵守约定即可; 例如:重新
阅读全文

浙公网安备 33010602011771号