零基础逆向工程31_Win32_05_提取图标_修改标题

在程序中使用图标

1.加载图标

HICON hIcon;

hIcon = LoadIcon (hAppInstance, MAKEINTRESOURCE (IDI_ICON));

hAppInstance
        应用程序句柄

IDI_ICON
        图标编号
	
MAKEINTRESOURCE
        用这个宏的主要原因是有的资源是用序号定义的,而不是字符串.所以要把数字转换成字符串指针

2.设置图标

case WM_INITDIALOG :
		hIcon = LoadIcon (hAppInstance, MAKEINTRESOURCE (IDI_ICON));
		//设置图标
		SendMessage(hDlg,WM_SETICON,ICON_BIG,(DWORD)hIcon);
		SendMessage(hDlg,WM_SETICON,ICON_SMALL,(DWORD)hIcon);
		//注:WM_SETICON 是事件的类型
		return TRUE;

图标在哪里? ==> PE结构资源表

资源目录

typedef struct _IMAGE_RESOURCE_DIRECTORY {
    DWORD   Characteristics;				//资源属性  保留 0
    DWORD   TimeDateStamp;					//资源创建的时间
    WORD    MajorVersion;					//资源版本号 未使用 0
    WORD    MinorVersion;					//资源版本号 未使用 0
    WORD    NumberOfNamedEntries;			//以名称命名的资源数量
    WORD    NumberOfIdEntries;				//以ID命名的资源数量
//  IMAGE_RESOURCE_DIRECTORY_ENTRY DirectoryEntries[];
} IMAGE_RESOURCE_DIRECTORY, *PIMAGE_RESOURCE_DIRECTORY;

资源目录项

typedef struct _IMAGE_RESOURCE_DIRECTORY_ENTRY {
    union {						//目录项的名称、或者ID
        struct {
            DWORD NameOffset:31;
            DWORD NameIsString:1;
        };
        DWORD   Name;
        WORD    Id;
    };
    union {
        DWORD   OffsetToData;		//目录项指针
        struct {
            DWORD   OffsetToDirectory:31;
            DWORD   DataIsDirectory:1;
        };
    };
} IMAGE_RESOURCE_DIRECTORY_ENTRY, *PIMAGE_RESOURCE_DIRECTORY_ENTRY;

数据项

typedef struct _IMAGE_DATA_DIRECTORY {
    DWORD   VirtualAddress;
    DWORD   Size;
} IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY;

可参考1:http://blog.sina.com.cn/s/blog_99fde17c0101717f.html
可参考2:http://blog.csdn.net/obuyiseng/article/details/50260671

posted @ 2017-11-05 10:39  flatcc  阅读(267)  评论(0编辑  收藏  举报