零基础逆向工程13_C语言07_指针01_反汇编
1.“带*类型”的特征探测
宽度
在同一个平台下,任何指针变量的尺寸都是一样的(都等于系统字长),如在32位平台中任何类型指针宽度都是32位。
声明
1.带有* 的变量类型的标准写法:变量类型* 变量名
2.任何类型都可以带* 加上* 以后是新的类型
3.*可以是任意多个
赋值:相同类型赋值
范例:int* a = (int*)666;
++ -- 或 加上/减去 一个整数
规则:以指针指向的变量为步长,进行步长倍数的加减操作
求差值
规则:作差后除以步长
两个类型相同的一级指针相减,会自动转换为int型(证明方法:相见赋给int型变量编译不会有warning)
比较
指针变量可以进行大小的比较
2.模拟实现CE的数据搜索功能(内存遍历)
数字的搜索
#include <stdio.h>
char data[50] =
{
0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x10,
0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x20,
0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x30,
0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x40,
0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x50,
};
void find_byte()
{
int i;
char* p = NULL; //一个字节
p = data;
for(i = 0; i < 50; i++) //一个字节,即为50
printf("%x ", *(p+i) );
}
void find_word()
{
int i;
short* p = NULL;
p = (short*)data;
for(i = 0; i < 25; i++)
printf("%x ", *(p+i) );
}
void find_dword()
{
int i;
int* p = NULL;
p = (int*)data;
for(i = 0; i < 12; i++)
printf("%x ", *(p+i) );
}
int main()
{
find_byte();
printf("下面宽度是word型\n");
find_word();
printf("下面宽度是dword型:\n");
find_dword();
return 0;
}
//为了在内存中能够实现完全搜索,因而指针应该每次移动一个字节,来实现完全搜索内存
void find_dword()
{
int i;
int* p = (int*)data;
int* temp_p = NULL;
for(i = 0; i < 45; i++)
{
temp_p=(int*)((char *)p)+i; //为了将指针以字节移动,从而强制转换
printf("%x ", *(temp_p));
//printf("%x ",*((int*)(((char *)p)+i)));
}
}
字符串搜索
从反汇编角度的代码分析:
char* x = "china"; //"china"放在常量区,把"china"首地址赋给x,x变量是可以被改变的,字符串不可被更改
char y[] = "china"; //"china"放在常量区,但会把常量区的"china"拷贝一份到栈中,因而字符串可以被改变
零基础逆向工程13_C语言07_指针01_反汇编的更多相关文章
- 零基础逆向工程14_C语言08_指针02_反汇编
1.指针数组 5: char* keyword[] = {"if", "for", "while", "switch"} ...
- 零基础逆向工程16_C语言10_宏定义_头文件_内存分配_文件读写
#define 无参数的宏定义的一般形式为:#define 标识符 字符序列 如:#define TRUE 1 注意事项: 1.之作字符序列的替换工作,不作任何语法的检查 2.如果宏定义不当,错误要到 ...
- 零基础逆向工程15_C语言09_位运算
1.汇编中的移位指令 算数移位指令 指令格式:SAL/SAR Reg/Mem, CL/Imm SAL(Shift Arithmetic Left):算数左移 SAR(Shift Arithmetic ...
- 零基础逆向工程12_C语言06_switch语句反汇编
12_C语言06_switch语句反汇编 switch语句反汇编 测试环境:VC++6.0 分支少于4的时候没有意义,编译器会生成类似if...else之类的反汇编,不超过三个分支,不会生成索引表. ...
- 零基础逆向工程23_PE结构07_重定位表_IAT表(待补充)
重定位表 待补充 IAT表 待补充
- 零基础逆向工程11_C语言05_结构体
结构体小结 结构体是按照分配的大小,局部变量会自动数据对齐 1字节对齐,省空间,但cpu查找效率低 4字节对齐,不省空间,但cpu查找效率高 VC6默认的结构对齐大小 项目右键-> settin ...
- 狗屁不通的“视频专辑:零基础学习C语言(小甲鱼版)”(2)
前文链接:狗屁不通的“视频专辑:零基础学习C语言(小甲鱼版)”(1) 小甲鱼在很多情况下是跟着谭浩强鹦鹉学舌,所以谭浩强书中的很多错误他又重复了一次.这样,加上他自己的错误,错谬之处难以胜数. 由于拙 ...
- 零基础逆向工程20_PE结构04_任意节空白区_新增节_扩大节添加代码
向代码节添加代码实现 作者经过一周不断的失败,再思考以及无数次调试终于实现. 思路:八个步骤 1. 文件拷到文件缓冲区(FileBuffer) //图示见(零基础逆向工程18之PE加载过程) 2. 文 ...
- 零基础学习C语言入门必备知识
今天跟大家一起从零学C语言: 1. C语言简介 1.1 C语言发展史 C语言是一种广泛使用的面向过程的计算机程序设计语言,既适合于系统程序设计,又适合于应用程序设计.C语言的发展历程大致如图1-1所示 ...
随机推荐
- xml解析中的sax解析
title: xml解析中的sax解析 tags: grammar_cjkRuby: true --- SAXPasser 类: parser(File file, DefaultHandler ha ...
- zk 05之:ZooKeeper的配置
ZooKeeper 的功能特性通过 ZooKeeper 配置文件来进行控制管理( zoo.cfg 配置文件). ZooKeeper 这样的设计其实是有它自身的原因的.通过前面对 ZooKeeper 的 ...
- sublime text3设置
我的sublime的设置,ps:这个博文只是为了我自己的一个记录 { "color_scheme": "Packages/Theme - Solarized Flat/S ...
- UGUI笔记
Text中的可以单独指定某些文字的颜色,只需将想要变色的文本放在<color=**></color>之间即可,如“吃<color=#ff7a38>橙色物品</ ...
- starUML建立时序图
对于经常看项目代码或者写项目的人.时序图可以帮助理解.记录项目.设计项目等用途. 1.starUml下载安装比较简单,这里不再赘述.打开starUml 2. 在Model Explorer 中,在Un ...
- Python开发【第四篇】:运算符
1. 算术运算符 算术运算符包括+.-.*./.%.//.**,即加减乘除,取余,取商(地板除法)以及幂运算. >>> 5 + 2 7 >>> 5 - 2 ...
- hdu1166(线段树单点更新&区间求和模板)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1166 题意:中文题诶- 思路:线段树单点更新,区间求和模板 代码: #include <iost ...
- IT兄弟连 JavaWeb教程 过滤器3
过滤器案例:字符编码过滤器 在JavaWeb程序开发中,由于Web容器内部所使用编码格式并不支持中文字符集,所以,处理浏览器请求中的中文数据就会出现乱码现象. 图3 无字符编码过滤器 从上图可以看出 ...
- 36小时极客嘉年华!FISCO BCOS黑客马拉松报名启动
FISCO BCOS是完全开源的联盟区块链底层技术平台,由金融区块链合作联盟(深圳)(简称金链盟)成立开源工作组通力打造.开源工作组成员包括博彦科技.华为.深证通.神州数码.四方精创.腾讯.微众银行. ...
- pycharm安装教程,汉化教程,以及正版激活码---
密钥在下面 安装过程 PyCharm2019本地下载: http://www.100c1.com/upload/default/20190420/1c08a3209029093a8b34df941f1 ...