- Hiewplus, ссылка на hiewplus
- PyHiew, ссылка на pyhiew
Второй же служит для добавления возможности написания скриптов на Python и использовать их к открытому в Hiew файле.
About reversing engineering and software development
#include
class CMain1 {
class CAddon;
typedef std::auto_ptr< CAddon > AddonPtr_t;
public:
CMain1();
private:
AddonPtr_t m_Addon;
};
а также есть файл-реализации impl1.cpp:
#include "header1.h"
class CMain1::CAddon {
};
CMain1::CMain1()
: m_Addon(new CAddon)
{}
class UnsafeNode {
public:
UnsafeNode(UnsafeNode * next_, void * data_);
virtual ~UnsafeNode();
UnsafeNode * Next();
void * Data();
private:
UnsafeNode * m_Next;
void * m_Data;
};
template < typename T>
class SafeNode : private UnsafeNode {
public:
SafeNode(SafeNode * next_, T * data_) : UnsafeNode(next_, data_) {}
virtual ~SafeNode() { delete( (T*)Data() ); }
SafeNode * Next() { return( (SafeNode*)UnsafeNode::Next() ); }
T * Data() { return( (T *)UnsafeNode::Data()); }
};
class CUnk {
public:
void SuperMethod() { std::cout << "CUnk::SuperMethod()" << std::endl; }
};
class CUnkPointer {
public:
CUnkPointer() : m_UnkPtr(0) {}
CUnkPointer(CUnk * UnkPtr) : m_UnkPtr(UnkPtr) {}
~CUnkPointer() { if(m_UnkPtr) delete(m_UnkPtr); m_UnkPtr=0; }
operator CUnk *() { return(m_UnkPtr); }
private:
CUnk * m_UnkPtr;
};
CUnkPointer UnkPtr( new CUnk);
UnkPtr->SuperMethod(); // (Случай №1)
((CUnk*)UnkPtr)->SuperMethod(); // (Случай №2)
class CParameter {
public:
CParameter() : m_Exist(false) { }
CParameter(std::string & val, bool exist)
: m_Exist(exist), m_Value(val) {};
bool Exist() { return( m_Exist ); }
int AsInt() { return( atoi(str::Trim(m_Value).c_str()) ); }
double AsFloat() { return( atof(str::Trim(m_Value).c_str()) ); }
std::string AsString(){ return( m_Value.c_str() ); }
bool AsBool() {
std::string s(str::Trim(m_Value));
if(s.empty())
return(false);
std::transform(s.begin(),s.end(),s.begin(),tolower);
return(1 == strcmp( s.c_str(), "true"));
}
private:
std::string m_Value;
bool m_Exist;
};
class CStr {
public:
CStr(char * str) {
if(!str) {
m_Ch = new char[1];
*m_Ch = 0x0;
}
else {
m_Ch = new char[strlen(str)+1];
strcpy(m_Ch,str);
}
}
~CStr() { delete(m_Ch); }
void dump(std::ostream & strm) {
strm << "\"" << m_Ch << "\"\n";
}
private:
char * m_Ch;
};
CStr * s1 = new CStr("First String !!!");
CStr * s2 = new CStr("Second String !!!");
s1->dump(std::cout);
s2->dump(std::cout);
s2 = s1;
s1->dump(std::cout);
s2->dump(std::cout);
delete(s1);
s2->dump(std::cout);
delete(s2);