如题

解决方案 »

  1.   

    int LoadString(
      HINSTANCE hInstance,  // handle to resource module
      UINT uID,             // resource identifier
      LPTSTR lpBuffer,      // resource buffer
      int nBufferMax        // size of buffer
    );
      

  2.   

    那你就的读PE格式的EXE文件了。
      

  3.   

    先看看PE文件结构方面的资料,只有了解了PE文件的结构才可以自己实现导出字符串!
      

  4.   

    用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 - 1RT_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的字符串资源不存在。