update to ida 7.6, add builds
This commit is contained in:
94
idasdk76/module/java/resword.cpp
Normal file
94
idasdk76/module/java/resword.cpp
Normal file
@@ -0,0 +1,94 @@
|
||||
#include "java.hpp"
|
||||
#include "npooluti.hpp"
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
// as procedupre for converter only
|
||||
void java_t::ResW_init(void)
|
||||
{
|
||||
static char const *const jasRW[] =
|
||||
{
|
||||
#include "jas_rw.cc"
|
||||
};
|
||||
|
||||
for ( uint i = 0; i < j_lastnorm; i++ )
|
||||
ResW.insert(Instructions[i].name);
|
||||
ResW.insert(jasRW, jasRW+qnumber(jasRW));
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
// as procedure for rw-changed
|
||||
void java_t::ResW_validate(uint32 *Flags, const ushort *pend)
|
||||
{
|
||||
ushort *pi = tsPtr;
|
||||
uchar *p = (uchar *)pi;
|
||||
do
|
||||
{
|
||||
if ( *pi >= CHP_MAX )
|
||||
return;
|
||||
*p++ = (uchar)*pi++;
|
||||
}
|
||||
while ( pi < pend );
|
||||
*p = '\0';
|
||||
if ( ResW.find((const char *)tsPtr) != ResW.end() )
|
||||
*Flags |= _OP_JSMRES_;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
// visible for converter only
|
||||
uint32 java_t::upgrade_ResW(uint32 opstr)
|
||||
{
|
||||
if ( !(opstr & (_OP_NOWORD << 16)) ) // check for upg12
|
||||
{
|
||||
CASSERT(offsetof(_STROP_, size) == 0 && offsetof(_STROP_, flags) == 2);
|
||||
uint32 len = (ushort)opstr;
|
||||
uint32 flg = (opstr >> 16) & ~_OP_JSMRES_;
|
||||
ResW_validate(&flg, tsPtr + len);
|
||||
opstr = (flg << 16) | len;
|
||||
}
|
||||
return opstr;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
uchar java_t::ResW_oldbase(void)
|
||||
{
|
||||
if ( ConstantNode.altval(CNA_KWRDVER) != KEYWORD_VERSION )
|
||||
{
|
||||
ResW_init(); // prepare conversion
|
||||
FOR_EACH_CONSTANT_POOL_INDEX(pos)
|
||||
{
|
||||
const_desc_t co;
|
||||
if ( ConstantNode.supval(pos, &co, sizeof(co)) != sizeof(co) )
|
||||
goto BADIDB;
|
||||
if ( co.type != CONSTANT_Utf8 || !co._Ssize )
|
||||
continue;
|
||||
if ( (co._Sflags & _OP_JSMRES_) || !(co._Sflags & _OP_NOWORD) )
|
||||
{
|
||||
if ( !getblob(pos << 16, tsPtr, co._Ssize) )
|
||||
goto BADIDB;
|
||||
uint32 v = upgrade_ResW(co._Sopstr);
|
||||
if ( v == co._Sopstr )
|
||||
continue;
|
||||
ConstantNode.altset(pos << 16, v);
|
||||
co._Sopstr = v;
|
||||
ConstantNode.supset(pos, &co, sizeof(co));
|
||||
}
|
||||
}
|
||||
ResW.clear();
|
||||
ConstantNode.altset(CNA_KWRDVER, KEYWORD_VERSION);
|
||||
}
|
||||
return 1;
|
||||
BADIDB:
|
||||
return 0;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
void java_t::ResW_newbase(void)
|
||||
{
|
||||
ConstantNode.altset(CNA_KWRDVER, KEYWORD_VERSION);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
void java_t::ResW_free(void)
|
||||
{
|
||||
ResW.clear(); // free mem - this set not needed later
|
||||
}
|
||||
Reference in New Issue
Block a user