鸿 网 互 联 www.68idc.cn

当前位置 : 服务器租用 > 操作系统维护 > 其它 > >

零基础逆向工程13_C语言07_指针01_反汇编

来源:互联网 作者:佚名 时间:2017-09-06 09:24
1.“带*类型”的特征探测 宽度 在同一个平台下,任何指针变量的尺寸都是一样的(都等于系统字长),如在32位平台中任何类型指针宽度都是32位。 声明 1.带有* 的变量类型的标准写法: 变量类型* 变量名 2.任何类型都可以带* 加上* 以后是新的类型 3.*可以是任

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"拷贝一份到栈中,因而字符串可以被改变
网友评论
<