zoukankan      html  css  js  c++  java
  • 利用WinHex查看并修改进程内存中的整形数据

    示例程序:

    #include "stdafx.h"
    
    #include <stdlib.h>
    
     
    
    int _tmain(int argc, _TCHAR* argv[])
    
    {
    
    int num = 2;
    
    printf("现在num的值是%d,num的地址是%p\n", num, &num);
    
    system("pause");
    
     
    
    num +=5;
    
    printf("现在num的值是%d,num的地址是%p\n", num, &num);
    
    getchar();  //getchar() 等同于system("pause"); getchar()兼容性更好
    
     
    
    //此时通过WinHex修改num的大小
    
    printf("现在num的值是%d,num的地址是%p\n", num, &num);
    
    system("pause");
    
    return 0;
    
    }

    整形变量num的初始值是2,它在虚拟内存中的地址可以通过printf函数输出。

    打开WinHex,用它的“打开RAM”功能,找到此程序,并选择查看主要内存(Primary Memory)。

    主要内存的意思就是主程序的内存区块,不包括支持这个主程序的dll文件的内存区块。如果选择整个内存,则会发现可见内存范围会扩大至0001 0000 - 7FFE 0FFF,也就是4GB虚拟内存中除系统预留的区域以外的所有可用区域。

    根据命令行输出的num的地址,可以通过“转到偏移地址”功能来到num所在的内存。

    图中所示从0046 FA28到0046 FA2B的4字节内存区块,就是num所在的地址。数值2在此以小尾方式储存。

    按任意键程序继续运行,num的值自加5,变为7。

    在WinHex中刷新内存后(鼠标滚轮上下滚动一次即可),此处数值也发生了对应的改变。

    可以通过在WinHex中直接修改内存来改变程序中num的值。十进制999的十六进制形式为0000 03e7,以小尾形式存放在num的内存区块内。WinHex对内存的修改即时生效(修改后,滚动一次鼠标滚轮)。

    按任意键程序继续运行,此时num变为了999,而不是程序原定的7。

  • 相关阅读:
    php类型转换
    PHP标记
    使用PHP从web访问mysql数据库
    javascript string对象的属性与方法
    linux vim 常用命令
    添加事件监听兼容IE6-8
    js-jQuery对象与dom对象相互转换
    js 数组
    js正则表达式
    选择排序
  • 原文地址:https://www.cnblogs.com/zhugehq/p/5917674.html
Copyright © 2011-2022 走看看