zoukankan      html  css  js  c++  java
  • 零基础逆向工程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型
    ");
    	find_word();
    	printf("下面宽度是dword型:
    ");
    	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"拷贝一份到栈中,因而字符串可以被改变
    
  • 相关阅读:
    Python之面向对象知识整理
    python2与python3的区别
    Gitlab 删除仓库文件夹
    Git撤销本地commit(未push)
    js库
    HTML | 打开网址后3秒跳转外链
    Vue CLI | 安装
    npm | npm淘宝镜像和查看镜像设置
    swiper | 过渡效果 effect: 'fade' 导致文字重叠
    CSS改变背景 | pattern.css
  • 原文地址:https://www.cnblogs.com/flatcc/p/7482602.html
Copyright © 2011-2022 走看看