如何象提取图标一样从EXE,DLL中提取字符串?

CloudWater 2004-04-14 01:01:01
如题
...全文
144 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xstring 2004-04-14
  • 打赏
  • 举报
回复
用EnumResource*这一系列的函数先枚举资源(先EnumResourceLanguages, 再EnumResourceType, 再EnumResourceNames)

找出RT_STRING这个类型的资源
之后FindResource,LoadResource, LockResource
这时候可以得到一个指针,指向字符串资源

RT_STRING这种资源是这么存的

16个连续id的字符串存成一个RT_STRING

字符串的id和RT_STRING资源的id有这样一个对应关系

string id(字符串资源的id) resource id(RT_STRING资源的id)
0x0000 ~ 0x000f 1
0x0010 ~ 0x001f 2
0x0020 ~ 0x002f 3

也就是说id 为 x 的RT_STRING资源内存放的字符串的id范围是从 x * 16 - 16 到 x * 16 - 1

RT_STRING中是16个变长结构体
struct string_block
{
unsigned short length; // sz的长度,按字符计
wchar_t sz [0]; // 不含\0字符
};

比方说
void *ptr = LockResource (); // ptr指向RT_STRING资源

string_block *pstr = (string_block *)ptr; // pstr指向RT_STRING中第一个字符串

ptr = (string_block *)(char *)ptr + sizeof (string_block) + ptr->length + sizeof (wchar_t); // 现在ptr指向RT_STRING中第二个字符串资源。
然后你这样遍历,直到扁历够16个,这个RT_STRING的所有字符串就全遍历到了。
如果ptr->length值为0表明其对应字符串ID的字符串资源不存在。



vcforever 2004-04-14
  • 打赏
  • 举报
回复
先看看PE文件结构方面的资料,只有了解了PE文件的结构才可以自己实现导出字符串!
ColderRain 2004-04-14
  • 打赏
  • 举报
回复
那你就的读PE格式的EXE文件了。
CloudWater 2004-04-14
  • 打赏
  • 举报
回复
现在不知道字符串ID的情况下全部读出来,如何做?
ColderRain 2004-04-14
  • 打赏
  • 举报
回复
int LoadString(
HINSTANCE hInstance, // handle to resource module
UINT uID, // resource identifier
LPTSTR lpBuffer, // resource buffer
int nBufferMax // size of buffer
);
rivershan 2004-04-14
  • 打赏
  • 举报
回复
读资源咯~

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧