【系统】Windows窗口数据管理和PE菜单资源分析
来源:互联网 发布:云上贵州数据交换平台 编辑:程序博客网 时间:2024/05/17 22:27
一、窗口分析
CreateWindow创建一个窗口对象时,Windows为创建的窗口对象分配私有数据存储区,其中存储有窗口的实例句柄、父窗口句柄、窗口函数的地址和其它Windows用于管理窗口对象的数据。
获取这些私有数据用GetWindowWord/GetWindowLong等函数。还有RegisterWindowClass()。
二、菜单分析
1、菜单遍历
其基本结构如下:
实际的存储时,数据块1的子指针指向2、数据块2的兄弟指针指向指向数据块3、3的兄弟指针指向4、数据块2的子指针指向5。对于菜单而言,1是弹出式菜单,2、3、4也是弹出式菜单,叶子节点5、6、7、8、9是普通菜单。
//弹出式菜单typedef struct{WORD fItemFlag; //菜单项标志WCHAR[] szItemText;//菜单名}PopupMenuItem;//普通菜单typedef struct{WORD fItemFlag; //菜单项标志WORD wMenuID; //菜单IDWCHAR[] szItemText;//菜单名,是一个指针}NormalMenuItem;
读取分析:数据指针定位到菜单数据,如何整个菜单读取结束,可设置level标记,将其改变,新的和原来的进行比较,即可判断是否读取完毕。
#define MF_END 0x00000080L //说明该菜单项是结束标记#define MF_ENABLED 0x00000000L //说明是普通菜单//菜单遍历分析void PEResourse::GetMenu(PBYTE *begin,int level){ WORD fItemFlag = **(WORD **)begin;//int endlevel = level; if (level < 0) return; if (fItemFlag & 0x10)//弹出菜单项 { GetPopMenuItem(begin); ++ level; } else GetNormalMenuItem(begin);//普通菜单项 if (fItemFlag & 0x80) -- level;// //if(endlevel = level),说明该层菜单已经读取完毕 GetMenu(begin,level);}//读取一个菜单的子菜单设计GetSubMenus(PBYTE* begin , int level){ int endlevel = level; WORD fItemFlag; while(endlevel ! = level ){ fItemFlag = **(WORD **)begin; if(fItemFlag & 0x10)//是否是弹出式菜单 { m_menu_str.push_back(begin+字符数据偏移);//弹出菜单名 level++; GetMenu(begin,&level);//让begin指针指向本级下一个菜单项 } else m_menu_str.push_back(begin+字符数据偏移);//普通菜单名} }
参考:1、WINDOWS应用程序组织及实例
2、PE文件中菜单资源的格式分析
3、三维游戏场景的组织和绘制
- 【系统】Windows窗口数据管理和PE菜单资源分析
- PE资源分析
- PE重装windows系统
- 分析pe文件资源(学习)
- PE 逆向分析基础资源
- Excel -- 3. 数据管理和分析
- Windows资源(一)菜单
- windows PE Image 文件分析
- Windows可执行文件PE格式分析
- PE修复Windows系统密码
- windows窗口添加资源
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台(C#开发)-系统需求分析
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台(C#开发)-系统需求分析
- 《Windows程序设计》读书笔十 菜单和其他资源
- 数据管理系统
- Gallery数据管理和数据加载分析
- Windows PE资源表编程(枚举资源树)
- 菜单和弹出窗口
- C# 从服务器下载文件代码
- 双边滤波matlab代码
- 行为模式(类图)
- Java读取中文文件出现乱码解决过程
- linux下如何使用sftp命令
- 【系统】Windows窗口数据管理和PE菜单资源分析
- opengl绘制花环(点的个数可以手动输入) 源代码
- android USB绑定(待补充)
- Linux操作系统PS命令详细解析(转)
- this class is not key value coding-compliant for the key uiWebView
- 一次失败的开发体验
- 数组中只出现1次的两个数字
- 使用代码建立布局
- 基于zookeeper实现的分布式锁