能力值:
( LV2,RANK:10 )
|
-
-
2 楼
lanbda都用上了 先进啊
已star 有空玩玩
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
https://github.com/QingYun/tracer/blob/master/tracer/hook_impl.cpp#L23
这里进程就没必要比较了吧
其实如果是hook第三方进程,挂起所有线程出问题的概率比全部不挂起还要高,感脚怎么着都不完美,真是一种蛋蛋的忧伤啊 原来有一丝心痛叫做无奈
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
还有,我看你的代码,是每hook一处地方就提交一次
https://github.com/QingYun/tracer/blob/master/tracer/trace.hpp#L105
这样的话,挂起线程安装钩子那出问题的几率又增加了很多啊,而且性能还稍有影响
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
boost和c++11用得很熟练啊,膜拜一下
|
能力值:
( LV3,RANK:20 )
|
-
-
6 楼
没考虑性能, 因为这个库没打算用在发布版本中
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
原来有一丝心.. 感觉好熟悉
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
Singleton:
#ifndef __UTILITY_SINGLETON_HPP__
#define __UTILITY_SINGLETON_HPP__
#include <boost/scoped_ptr.hpp>
#include <boost/thread/once.hpp>
#include <boost/noncopyable.hpp>
namespace core {
template <class T>
class Singleton : private boost::noncopyable
{
public:
static T& GetInstance()
{
boost::call_once(init, flag_);
return *t_;
}
static void init() // never throws
{
static delete_helper<T> helper;
helper.ptr = t_ = new T();
}
static T* GetInstancePtr()
{
boost::call_once(init, flag_);
return t_;
};
protected:
~Singleton() {}
Singleton() {}
private:
template<class M>
struct delete_helper
{
delete_helper()
{
ptr = NULL;
}
~delete_helper()
{
delete ptr;
}
M* ptr;
};
static T* t_;
static boost::once_flag flag_;
};
template<class T> T * Singleton<T>::t_ = NULL;
template<class T> boost::once_flag Singleton<T>::flag_ = BOOST_ONCE_INIT;
}// namespace core
#endif//__UTILITY_SINGLETON_HPP__
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
感觉有点复杂。这是俺的实现。
boost::function<BOOL(HANDLE, LPVOID, DWORD, LPDWORD, LPOVERLAPPED> ReadFileAPI =
sCoreHook.HookAPI<BOOL(HANDLE, LPVOID, DWORD, LPDWORD, LPOVERLAPPED)>("Kernel32.dll", "ReadFile", boost::bind(&Handler::ReadFileHandler, this, _1, _2, _3, _4, _5));
|
能力值:
( LV3,RANK:20 )
|
-
-
10 楼
呵呵 我那个复杂的是库里的类型推导, 用户实际用的接口上是不用自己手敲一遍函数签名的
|
|
|