找回密码
 注册
X系列官方授权正版
搜索
查看: 1527|回复: 13

NN 試試這個

[复制链接]
发表于 2008-6-20 13:56:20 | 显示全部楼层 |阅读模式
修改 FLHook.cpp 以下的代碼段:
  1. wchar_t wszPass[256];
  2. if(wscCmd.length() >= sizeof(wszPass)) //<<< 主要改這邊
  3. {
  4.         sc->csock.Print(L"ERR Wrong password\n");
  5.         return false;
  6. }
  7. swscanf(wscCmd.c_str(), L"pass %s", wszPass);
复制代码
改成:
  1. if(wscCmd.length()*2 >= sizeof(wszPass))
  2. {
  3.         <...>
  4. }
复制代码
或許可以解決數據溢出的問題,你試試,解決的話通知我一下,謝啦。
发表于 2008-6-20 14:27:18 | 显示全部楼层
这样就删除sock验证代码了。
回复

使用道具 举报

 楼主| 发表于 2008-6-20 15:00:46 | 显示全部楼层
原帖由 VengXCne 于 2008-6-20 14:27 发表
这样就删除sock验证代码了。


我正在問 w0dk4 這樣是否正確。

還有我按照你說的方式加入代碼,結果每次編譯都出現:

C:\MyApps\Flhook\source\HkFuncTools.cpp(86) : error C3861: 'ws2s': identifier not found, even with argument-dependent lookup

是不是你忘了給我 ws2s 這個定義?
回复

使用道具 举报

 楼主| 发表于 2008-6-20 15:13:49 | 显示全部楼层
我找到一些 ws2s 的代碼如下:
  1. #include <string>
  2. std::string ws2s(const std::wstring& ws)
  3. {
  4.     std::string curLocale = setlocale(LC_ALL, NULL);        // curLocale = "C";
  5.     setlocale(LC_ALL, "chs");
  6.     const wchar_t* _Source = ws.c_str();
  7.     size_t _Dsize = 2 * ws.size() + 1;
  8.     char *_Dest = new char[_Dsize];
  9.     memset(_Dest,0,_Dsize);
  10.     wcstombs(_Dest,_Source,_Dsize);
  11.     std::string result = _Dest;
  12.     delete []_Dest;
  13.     setlocale(LC_ALL, curLocale.c_str());
  14.     return result;
  15. }

  16. std::wstring s2ws(const std::string& s)
  17. {
  18.     setlocale(LC_ALL, "chs");
  19.     const char* _Source = s.c_str();
  20.     size_t _Dsize = s.size() + 1;
  21.     wchar_t *_Dest = new wchar_t[_Dsize];
  22.     wmemset(_Dest, 0, _Dsize);
  23.     mbstowcs(_Dest,_Source,_Dsize);
  24.     std::wstring result = _Dest;
  25.     delete []_Dest;
  26.     setlocale(LC_ALL, "C");
  27.     return result;
  28. }
复制代码
是不是這個?如果是,要加在哪邊?
回复

使用道具 举报

发表于 2008-6-20 16:08:15 | 显示全部楼层
对的,我让你找的就是那个,不需要#include <string>,代码可以随便加在#include "Hook.h"的文件里,记得在公共单元声明。
回复

使用道具 举报

 楼主| 发表于 2008-6-20 16:16:05 | 显示全部楼层
原帖由 VengXCne 于 2008-6-20 16:08 发表
对的,我让你找的就是那个,不需要#include ,代码可以随便加在#include "Hook.h"的文件里,记得在公共单元声明。


所以我只要複製:
  1. std::string ws2s(const std::wstring& ws)
  2. {
  3.     std::string curLocale = setlocale(LC_ALL, NULL);        // curLocale = "C";
  4.     setlocale(LC_ALL, "chs");
  5.     const wchar_t* _Source = ws.c_str();
  6.     size_t _Dsize = 2 * ws.size() + 1;
  7.     char *_Dest = new char[_Dsize];
  8.     memset(_Dest,0,_Dsize);
  9.     wcstombs(_Dest,_Source,_Dsize);
  10.     std::string result = _Dest;
  11.     delete []_Dest;
  12.     setlocale(LC_ALL, curLocale.c_str());
  13.     return result;
  14. }
复制代码
不行,我把上面代碼貼到 Hook.h 檔案裡就出現編譯錯誤了.................[S::L:]

在公共單元聲明是什麼意思?不好意思我是 C++ 白痴,謝謝你的指導。

[ 本帖最后由 JONG 于 2008-6-20 16:26 编辑 ]
回复

使用道具 举报

发表于 2008-6-20 16:52:36 | 显示全部楼层
先在Hook.h里面声明string ws2s(const std::wstring& ws);

然后代码可以帖到任何#include "Hook.h"的文件里。
回复

使用道具 举报

 楼主| 发表于 2008-6-20 17:15:41 | 显示全部楼层
原帖由 VengXCne 于 2008-6-20 16:52 发表
先在Hook.h里面声明string ws2s(const std::wstring& ws);

然后代码可以帖到任何#include "Hook.h"的文件里。


不斷的崩潰,你還是給我個範例吧?我都不知道怎麼聲明.....................[S::(:]

還有我上面找到的代碼是正確的嗎?

謝謝你囉。
回复

使用道具 举报

发表于 2008-6-20 17:20:44 | 显示全部楼层
原帖由 JONG 于 2008-6-20 17:15 发表


不斷的崩潰,你還是給我個範例吧?我都不知道怎麼聲明.....................[S::(:]

還有我上面找到的代碼是正確的嗎?

謝謝你囉。


晕我说错了,应该加到global.h里,#endif之前的位置就可以了。上面的代码没问题。
回复

使用道具 举报

 楼主| 发表于 2008-6-20 21:09:37 | 显示全部楼层
原帖由 VengXCne 于 2008-6-20 17:20 发表


晕我说错了,应该加到global.h里,#endif之前的位置就可以了。上面的代码没问题。


我在 global.h 檔案 #endif 之前裡加上:
  1. string ws2s(const wstring& ws);
复制代码
在 HkFuncTools.cpp 檔案裡加上:
  1. string ws2s(const wstring& ws)
  2. {
  3. string curLocale = setlocale(LC_ALL, NULL); // curLocale = "C";
  4. setlocale(LC_ALL, "chs");
  5. const wchar_t* _Source = ws.c_str();
  6. size_t _Dsize = 2 * ws.size() + 1;
  7. char *_Dest = new char[_Dsize];
  8. memset(_Dest,0,_Dsize);
  9. wcstombs(_Dest,_Source,_Dsize);
  10. string result = _Dest;
  11. delete []_Dest;
  12. setlocale(LC_ALL, curLocale.c_str());
  13. return result;
  14. }
复制代码
進入遊戲什麼都沒開始做,它就給我中斷連線,我快暈死了.......................[S::L:]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|DeepTimes.NET 太空游戏站