[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/ReverseTools/DIE-engine/master/pluginsscript.cpp [Back]  [Original]

// Copyright (c) 2012-2020 hors
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:

// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.

// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
#include "pluginsscript.h"

//QByteArray *pbaDataGlobal;
//__SD *sdGlobal;


QScriptValue includeScript(QScriptContext *context, QScriptEngine *engine)
{
    // TODO load from memory
    QScriptValue ret(false);

    if(engine==0)
    {
        return ret;
    }

    QString fileName=context->argument(0).toString();

    fileName=((PluginsScript *)engine)->getDefaultPath()+QDir::separator()+fileName;

    QFile file(fileName);

    if(file.open(QFile::ReadOnly))
    {
        QByteArray line = file.readAll();
        file.close();
        QString contents = QString::fromUtf8(line);
        engine->currentContext()->setActivationObject(engine->currentContext()->parentContext()->activationObject());
        ret = engine->evaluate(contents, fileName);
    }
    else
    {
        ((PluginsScript *)engine)->_appendError(QString("Cannot open file: %1").arg(fileName));
    }

    return ret;
}

QScriptValue _log(QScriptContext *context, QScriptEngine *engine)
{
    QScriptValue ret(true);

    ((PluginsScript *)engine)->_appendError(context->argument(0).toString());

    return ret;
}

QScriptValue _message(QScriptContext *context, QScriptEngine *engine)
{
    QScriptValue ret(true);

    ((PluginsScript *)engine)->_appendMessage(context->argument(0).toString());

    return ret;
}

//QString _getString(QByteArray *pbaData,int nOffset,int nSize)
//{
//    //PE _pe(pbaData->data(),pbaData->size());
//    PE _pe(pbaData->data(),pbaData->size());
//    QByteArray baTemp=_pe.getArray(nOffset,nSize);
//    baTemp.append('\0');

//    return QString(baTemp.data());
//}


//QString _getCompilerVersion(QByteArray *baData)
//{
//    //PE _pe(pbaData->data(),pbaData->size());
//    PE _pe(baData->data(),baData->size());
//    QString sResult;
//    int nMajor=_pe.getOptionalHeader_MajorLinkerVersion();
//    int nMinor=_pe.getOptionalHeader_MinorLinkerVersion();

//    sResult=QString("%1.%2").arg(nMajor).arg(nMinor);

//    return sResult;
//}
//QString _getGeneralOptions(QByteArray *baData)
//{
//    //PE _pe(pbaData->data(),pbaData->size());
//    PE _pe(baData->data(),baData->size());
//    QString sResult;

//    bool bIs64=_pe.isPEPlus();
//    bool bIsDll=_pe.isDll();
//    bool bIsDriver=_pe.isDriver();

//    QString sType;
//    QString sBits;

//    if(bIs64)
//    {
//        sBits="64";
//    }
//    else
//    {
//        sBits="32";
//    }

//    if(bIsDll)
//    {
//        sType="DLL";
//    }
//    else if(bIsDriver)
//    {
//        sType="Driver";
//    }
//    else
//    {
//        sType="EXE";
//    }

//    sResult=QString("%1%2").arg(sType).arg(sBits);

//    return sResult;
//}

//bool _compare(char *pOffset,char *pSignature,int nSize)
//{
//    for(int i=0;idata(),pbaData->size());
//    PE _pe(pbaData->data(),pbaData->size());
//    int nSize=0;
//    char *pOffset=0;
//    char *pSignature=0;

//    int nSignatureSize=sSignature.length()/2;
//    baSignature=_pe.getArray(_pe.RVAToOffset(_pe.getOptionalHeader_AddressOfEntryPoint()),nSignatureSize).toHex().toUpper();
//    nSize=baSignature.size();
//    pOffset=baSignature.data();
//    baTemp=sSignature.toAscii();
//    pSignature=baTemp.data();

//    if(nSize==sSignature.length())
//    {
//        return _compare(pOffset,pSignature,nSize);
//    }

//    return false;

//}
//bool _compareEP(QByteArray *pbaData,QString sSignature)
//{
//    QByteArray baSignature;
//    QByteArray baTemp;
//    QByteArray baTemp2;

//    char *pOffset=0;
//    char *pSignature=0;

//    int nSignatureSize=sSignature.length()/2;


//    if(sdGlobal->nEntryPointOffset+nSignatureSizenSize)
//    {
//        //baSignature=_pe.getArray(_pe.RVAToOffset(_pe.getOptionalHeader_AddressOfEntryPoint()),nSignatureSize).toHex().toUpper();

//        pOffset=sdGlobal->baData->data();
//        pOffset+=sdGlobal->nEntryPointOffset;
//        baSignature.append(pOffset,nSignatureSize*2);
//        baTemp2=baSignature.toHex().toUpper();
//        baTemp=sSignature.toAscii();
//        pSignature=baTemp.data();
//        pOffset=baTemp2.data();

//        return _compare(pOffset,pSignature,nSignatureSize*2);
//    }

//    return false;

//}
//bool _compareHeader(QByteArray *pbaData,QString sSignature)
//{
//    QByteArray baSignature;
//    QByteArray baTemp;
//    //PE _pe(pbaData->data(),pbaData->size());
//    PE _pe(pbaData->data(),pbaData->size());
//    int nSize=0;
//    char *pOffset=0;
//    char *pSignature=0;

//    int nSignatureSize=sSignature.length()/2;
//    baSignature=_pe.getHeaders();
//    baSignature.resize(nSignatureSize);
//    baSignature=baSignature.toHex().toUpper();
//    nSize=baSignature.size();
//    pOffset=baSignature.data();
//    baTemp=sSignature.toAscii();
//    pSignature=baTemp.data();

//    if(nSize==sSignature.length())
//    {
//        return _compare(pOffset,pSignature,nSize);
//    }

//    return false;

//}
//bool _compareCodeSection(QByteArray *pbaData,QString sSignature)
//{
//    QByteArray baTemp;
//    QByteArray baEntryPointSection;

//    //PE _pe(pbaData->data(),pbaData->size());
//    PE _pe(pbaData->data(),pbaData->size());
//    char *pOffset=0;
//    char *pSignature=0;

//    baTemp=sSignature.toAscii();
//    pSignature=baTemp.data();

//    int nSignatureSize=sSignature.length()/2;
//    baEntryPointSection=_pe.getEntryPointSection();
//    pOffset=baEntryPointSection.data();

//    for(int i=0;iargument(0).toString();
//    return QScriptValue(engine, _compareEP(pbaDataGlobal,sSignature));
//}

//QScriptValue compareCodeSection(QScriptContext *context, QScriptEngine *engine)
//{
//    QString sSignature = context->argument(0).toString();
//    return QScriptValue(engine, _compareCodeSection(pbaDataGlobal,sSignature));
//}

//QScriptValue getGeneralOptions(QScriptContext *context, QScriptEngine *engine)
//{

//    return QScriptValue(engine, _getGeneralOptions(pbaDataGlobal));
//}
//QScriptValue getCompilerVersion(QScriptContext *context, QScriptEngine *engine)
//{
//    return QScriptValue(engine, _getCompilerVersion(pbaDataGlobal));
//}
//QScriptValue getImportFunctionName(QScriptContext *context, QScriptEngine *engine)
//{
//    //PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());
//    int nImport= context->argument(0).toInt32();
//    int nFunctionNumber= context->argument(1).toInt32();
//    return QScriptValue(engine, _pe.getImportFunctionName(nImport,nFunctionNumber));
//}
//QScriptValue getNumberOfImportThunks(QScriptContext *context, QScriptEngine *engine)
//{
//    //PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());
//    int nImport= context->argument(0).toInt32();
//    return QScriptValue(engine, _pe.getNumberOfImportThunks(nImport));
//}
//QScriptValue isDll(QScriptContext *context, QScriptEngine *engine)
//{
//    //PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());
//    return QScriptValue(engine, _pe.isDll());
//}
//QScriptValue getSizeOfUninitializedData(QScriptContext *context, QScriptEngine *engine)
//{
//    //PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());
//    return QScriptValue(engine, _pe.getOptionalHeader_SizeOfUninitializedData());
//}
//QScriptValue getSizeOfInitializedData(QScriptContext *context, QScriptEngine *engine)
//{
//    //PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());
//    return QScriptValue(engine, _pe.getOptionalHeader_SizeOfInitializedData());
//}
//QScriptValue getSizeOfCode(QScriptContext *context, QScriptEngine *engine)
//{
//    //PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());
//    return QScriptValue(engine, _pe.getOptionalHeader_SizeOfCode());
//}
//QScriptValue getNumberOfSections(QScriptContext *context, QScriptEngine *engine)
//{
//    //PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());
//    return QScriptValue(engine, _pe.getFileHeader_NumberOfSections());
//}
//QScriptValue getFileAlignment(QScriptContext *context, QScriptEngine *engine)
//{
//    //PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());
//    return QScriptValue(engine, _pe.getOptionalHeader_FileAlignment());
//}
//QScriptValue getBaseOfCode(QScriptContext *context, QScriptEngine *engine)
//{
//    //PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());
//    return QScriptValue(engine, _pe.getOptionalHeader_BaseOfCode());
//}
//QScriptValue isRichSignaturePresent(QScriptContext *context, QScriptEngine *engine)
//{
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());
//    return QScriptValue(engine, _pe.isRichSignaturePresent());
//}
//QScriptValue getString(QScriptContext *context, QScriptEngine *engine)
//{
//    int nOffset= context->argument(0).toInt32();
//    int nSize= context->argument(1).toInt32();
//    return QScriptValue(engine,_getString(pbaDataGlobal,nOffset,nSize));
//}
//QScriptValue getSectionName(QScriptContext *context, QScriptEngine *engine)
//{
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());

//    int nSectionNumber= context->argument(0).toInt32();
//    return QScriptValue(engine,_pe.getSectionNameAsString(nSectionNumber));
//}
//QScriptValue getSectionVirtualAddress(QScriptContext *context, QScriptEngine *engine)
//{
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());

//    int nSectionNumber= context->argument(0).toInt32();
//    return QScriptValue(engine,_pe.getSection_VirtualAddress(nSectionNumber));
//}
//QScriptValue getSectionVirtualSize(QScriptContext *context, QScriptEngine *engine)
//{
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());

//    int nSectionNumber= context->argument(0).toInt32();
//    return QScriptValue(engine,_pe.getSection_VirtualSize(nSectionNumber));
//}
//QScriptValue getSectionFileOffset(QScriptContext *context, QScriptEngine *engine)
//{
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());

//    int nSectionNumber= context->argument(0).toInt32();
//    return QScriptValue(engine,_pe.getSection_PointerToRawData(nSectionNumber));
//}
//QScriptValue getSectionFileSize(QScriptContext *context, QScriptEngine *engine)
//{
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());

//    int nSectionNumber= context->argument(0).toInt32();
//    return QScriptValue(engine,_pe.getSection_SizeOfRawData(nSectionNumber));
//}
//QScriptValue getSectionPointerToRelocations(QScriptContext *context, QScriptEngine *engine)
//{
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());

//    int nSectionNumber= context->argument(0).toInt32();
//    return QScriptValue(engine,_pe.getSection_PointerToRelocations(nSectionNumber));
//}
//QScriptValue getSectionPointerToLinenumbers(QScriptContext *context, QScriptEngine *engine)
//{
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());

//    int nSectionNumber= context->argument(0).toInt32();
//    return QScriptValue(engine,_pe.getSection_PointerToLinenumbers(nSectionNumber));
//}
//QScriptValue getSectionNumberOfLinenumbers(QScriptContext *context, QScriptEngine *engine)
//{
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());

//    int nSectionNumber= context->argument(0).toInt32();
//    return QScriptValue(engine,_pe.getSection_NumberOfLinenumbers(nSectionNumber));
//}
//QScriptValue getSectionNumberOfRelocations(QScriptContext *context, QScriptEngine *engine)
//{
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());

//    int nSectionNumber= context->argument(0).toInt32();
//    return QScriptValue(engine,_pe.getSection_NumberOfRelocations(nSectionNumber));
//}
//QScriptValue getSectionCharacteristics(QScriptContext *context, QScriptEngine *engine)
//{
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());

//    int nSectionNumber= context->argument(0).toInt32();
//    return QScriptValue(engine,_pe.getSection_Characteristics(nSectionNumber));
//}
//QScriptValue compareImportFunctionsArray(QScriptContext *context, QScriptEngine *engine)
//{
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());

//    QString sSignature = context->argument(0).toString();

//    QByteArray baData=_pe.getArray(_pe.getImportTableOffset()+_pe.getImportTableSize(),sSignature.size()).toHex().toUpper();
//    QByteArray baTemp=sSignature.toAscii();

//    return QScriptValue(engine,_compare(baData.data(),baTemp.data(),sSignature.size()));
//}
//QScriptValue compareHeader(QScriptContext *context, QScriptEngine *engine)
//{
//    QString sSignature = context->argument(0).toString();
//    return QScriptValue(engine, _compareHeader(pbaDataGlobal,sSignature));
//}

//QScriptValue isSectionNamePresent(QScriptContext *context, QScriptEngine *engine)
//{
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());

//    QString sSectionName = context->argument(0).toString();

//    for(int i=0;idata(),pbaDataGlobal->size());

//    QString sResourceName = context->argument(0).toString();


//    return QScriptValue(engine,_pe.isResourceNamePresent(sResourceName));
//}

//QScriptValue isDosStubPresent(QScriptContext *context, QScriptEngine *engine)
//{
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());

//    return QScriptValue(engine,_pe.isDosStubPresent());
//}

//QScriptValue getMachine(QScriptContext *context, QScriptEngine *engine)
//{
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());

//    return QScriptValue(engine,_pe.getFileHeader_Machine());
//}

//QScriptValue getTimeDateStamp(QScriptContext *context, QScriptEngine *engine)
//{
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());

//    return QScriptValue(engine,_pe.getFileHeader_TimeDateStamp());
//}
//QScriptValue getNumberOfSymbols(QScriptContext *context, QScriptEngine *engine)
//{
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());

//    return QScriptValue(engine,_pe.getFileHeader_NumberOfSymbols());
//}
//QScriptValue getPointerToSymbolTable(QScriptContext *context, QScriptEngine *engine)
//{
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());

//    return QScriptValue(engine,_pe.getFileHeader_PointerToSymbolTable());
//}
//QScriptValue getSizeOfOptionalHeader(QScriptContext *context, QScriptEngine *engine)
//{
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());

//    return QScriptValue(engine,_pe.getFileHeader_SizeOfOptionalHeader());
//}
//QScriptValue getCharacteristics(QScriptContext *context, QScriptEngine *engine)
//{
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());

//    return QScriptValue(engine,_pe.getFileHeader_Characteristics());
//}
//QScriptValue getOptionalHeaderMagic(QScriptContext *context, QScriptEngine *engine)
//{
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());

//    return QScriptValue(engine,_pe.getOptionalHeader_Magic());
//}

//QScriptValue getMajorLinkerVersion(QScriptContext *context, QScriptEngine *engine)
//{
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());

//    return QScriptValue(engine,(unsigned int)_pe.getOptionalHeader_MajorLinkerVersion());
//}
//QScriptValue getMinorLinkerVersion(QScriptContext *context, QScriptEngine *engine)
//{
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());

//    return QScriptValue(engine,(unsigned int)_pe.getOptionalHeader_MinorLinkerVersion());
//}

//QScriptValue getAddressOfEntryPoint(QScriptContext *context, QScriptEngine *engine)
//{
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());

//    return QScriptValue(engine,_pe.getOptionalHeader_AddressOfEntryPoint());
//}

//QScriptValue getBaseOfData(QScriptContext *context, QScriptEngine *engine)
//{
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());

//    return QScriptValue(engine,_pe.getOptionalHeader_BaseOfData());
//}
//QScriptValue isPEPlus(QScriptContext *context, QScriptEngine *engine)
//{
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());

//    return QScriptValue(engine,_pe.isPEPlus());
//}
//QScriptValue isDriver(QScriptContext *context, QScriptEngine *engine)
//{
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());

//    return QScriptValue(engine,_pe.isDriver());
//}
//QScriptValue getImageBase(QScriptContext *context, QScriptEngine *engine)
//{
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());

//    return QScriptValue(engine,_pe.getOptionalHeader_ImageBase());
//}
//QScriptValue getSectionAlignment(QScriptContext *context, QScriptEngine *engine)
//{
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());

//    return QScriptValue(engine,_pe.getOptionalHeader_SectionAlignment());
//}
//QScriptValue getMajorOperatingSystemVersion(QScriptContext *context, QScriptEngine *engine)
//{
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());

//    return QScriptValue(engine,_pe.getOptionalHeader_MajorOperatingSystemVersion());
//}
//QScriptValue getMinorOperatingSystemVersion(QScriptContext *context, QScriptEngine *engine)
//{
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());

//    return QScriptValue(engine,_pe.getOptionalHeader_MinorOperatingSystemVersion());
//}
//QScriptValue getMajorImageVersion(QScriptContext *context, QScriptEngine *engine)
//{
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());

//    return QScriptValue(engine,_pe.getOptionalHeader_MajorImageVersion());
//}
//QScriptValue getMinorImageVersion(QScriptContext *context, QScriptEngine *engine)
//{
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());

//    return QScriptValue(engine,_pe.getOptionalHeader_MinorImageVersion());
//}
//QScriptValue getMajorSubsystemVersion(QScriptContext *context, QScriptEngine *engine)
//{
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());

//    return QScriptValue(engine,_pe.getOptionalHeader_MajorSubsystemVersion());
//}
//QScriptValue getMinorSubsystemVersion(QScriptContext *context, QScriptEngine *engine)
//{
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());

//    return QScriptValue(engine,_pe.getOptionalHeader_MinorSubsystemVersion());
//}
//QScriptValue getWin32VersionValue(QScriptContext *context, QScriptEngine *engine)
//{
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());

//    return QScriptValue(engine,_pe.getOptionalHeader_Win32VersionValue());
//}
//QScriptValue getSizeOfImage(QScriptContext *context, QScriptEngine *engine)
//{
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());

//    return QScriptValue(engine,_pe.getOptionalHeader_SizeOfImage());
//}
//QScriptValue getSizeOfHeaders(QScriptContext *context, QScriptEngine *engine)
//{
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());

//    return QScriptValue(engine,_pe.getOptionalHeader_SizeOfHeaders());
//}
//QScriptValue getCheckSum(QScriptContext *context, QScriptEngine *engine)
//{
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());

//    return QScriptValue(engine,_pe.getOptionalHeader_CheckSum());
//}
//QScriptValue getSubsystem(QScriptContext *context, QScriptEngine *engine)
//{
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());

//    return QScriptValue(engine,_pe.getOptionalHeader_Subsystem());
//}
//QScriptValue getDllCharacteristics(QScriptContext *context, QScriptEngine *engine)
//{
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());

//    return QScriptValue(engine,_pe.getOptionalHeader_DllCharacteristics());
//}
//QScriptValue getSizeOfStackReserve(QScriptContext *context, QScriptEngine *engine)
//{
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());

//    return QScriptValue(engine,_pe.getOptionalHeader_SizeOfStackReserve());
//}
//QScriptValue getSizeOfStackCommit(QScriptContext *context, QScriptEngine *engine)
//{
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());

//    return QScriptValue(engine,_pe.getOptionalHeader_SizeOfStackCommit());
//}
//QScriptValue getSizeOfHeapReserve(QScriptContext *context, QScriptEngine *engine)
//{
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());

//    return QScriptValue(engine,_pe.getOptionalHeader_SizeOfHeapReserve());
//}
//QScriptValue getSizeOfHeapCommit(QScriptContext *context, QScriptEngine *engine)
//{
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());

//    return QScriptValue(engine,_pe.getOptionalHeader_SizeOfHeapCommit());
//}
//QScriptValue getLoaderFlags(QScriptContext *context, QScriptEngine *engine)
//{
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());

//    return QScriptValue(engine,_pe.getOptionalHeader_LoaderFlags());
//}
//QScriptValue getNumberOfRvaAndSizes(QScriptContext *context, QScriptEngine *engine)
//{
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());

//    return QScriptValue(engine,_pe.getOptionalHeader_NumberOfRvaAndSizes());
//}

//QScriptValue isOverlayPresent(QScriptContext *context, QScriptEngine *engine)
//{
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());

//    return QScriptValue(engine,_pe.isOverlayPresent());
//}

//QScriptValue isDirectoryPresent(QScriptContext *context, QScriptEngine *engine)
//{
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());
//    int nDirectory = context->argument(0).toInt32();

//    return QScriptValue(engine,_pe.isDirectoryPresent(nDirectory));
//}
//QScriptValue isImportPresent(QScriptContext *context, QScriptEngine *engine)
//{
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());

//    return QScriptValue(engine,_pe.isImportPresent());
//}
//QScriptValue isExportPresent(QScriptContext *context, QScriptEngine *engine)
//{
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());

//    return QScriptValue(engine,_pe.isExportPresent());
//}
//QScriptValue isResourcePresent(QScriptContext *context, QScriptEngine *engine)
//{
//    PE _pe(pbaDataGlobal->data(),pbaDataGlobal->size());

//    return QScriptValue(engine,_pe.isResourcePresent());
//}

//QScriptValue test(QScriptContext *context, QScriptEngine *engine)
//{
//    return QScriptValue(engine,false);
//}

PluginsScript::PluginsScript(QObject *parent) :
    QScriptEngine(parent)
{
    addFunction(includeScript,"includeScript");
    addFunction(_log,"_log");
    addFunction(_message,"_message");
    //    binary=0;

    //    addClass(&scriptpe,"PE");
    //    connect(&scriptpe,SIGNAL(appendError(QString)),this,SIGNAL(appendError(QString)));
}

void PluginsScript::setData(QObject *pClass,QString sClassName,QString sDefaultPath)
{
    //    this->sDefaultPath=sDefaultPath;
    addClass(pClass,sClassName,sDefaultPath);
    //    emit appendError(sClassName);
}

QScriptValue PluginsScript::callFromFile(QString sScriptFile, QString sFunctionName, QScriptValueList valuelist)
{
    QFile file;
    QString sScriptData;

    file.setFileName(sScriptFile);

    if(file.open(QIODevice::ReadOnly))
    {
        sScriptData.append(file.readAll());
        file.close();

        return call(sScriptData,sFunctionName,valuelist);
    }
    else
    {
        emit appendError(QString("Cannot open file: %1").arg(sScriptFile));
    }

    return 0;
}

QScriptValue PluginsScript::evalFromFile(QString sScriptFile)
{
    QFile file(sScriptFile);
    QScriptValue ret;

    if(file.open(QFile::ReadOnly))
    {
        QByteArray line = file.readAll();
        file.close();
        QString contents = QString::fromUtf8(line);
        ret = evaluate(contents, sScriptFile);
    }
    else
    {
        _appendError(QString("Cannot open file: %1").arg(sScriptFile));
    }

    return ret;
}

QScriptValue PluginsScript::call(QString sScript, QString sFunctionName, QScriptValueList valuelist,QString sExtra)
{
    // TODO check if function
    QScriptValue script = evaluate(sScript);

    if(!script.isError())
    {
        QScriptValue detect=globalObject().property(sFunctionName);

        if(!detect.isError())
        {

            QScriptValue result=detect.call(script,valuelist);

            if(!result.isError())
            {
                return result;
            }
            else
            {
                if(sExtra!="")
                {
                    emit appendError(QString("%1: %2").arg(sExtra).arg(result.toString()));
                }
                else
                {
                    emit appendError(QString("%1").arg(result.toString()));
                }
            }
        }
        else
        {
            if(sExtra!="")
            {
                emit appendError(QString("%1: %2").arg(sExtra).arg(detect.toString()));
            }
            else
            {
                emit appendError(QString("%1").arg(detect.toString()));
            }
        }
    }
    else
    {
        if(sExtra!="")
        {
            emit appendError(QString("%1: %2").arg(sExtra).arg(script.toString()));
        }
        else
        {
            emit appendError(QString("%1").arg(script.toString()));
        }
    }

    return 0;
}

bool PluginsScript::isFunctionPresentInFile(QString sScriptFile, QString sFunctionName)
{
    QFile file;
    QString sScriptData;

    file.setFileName(sScriptFile);

    if(file.open(QIODevice::ReadOnly))
    {
        sScriptData.append(file.readAll());
        file.close();

        return isFunctionPresent(sScriptData,sFunctionName);
    }
    else
    {
        emit appendError(QString("Cannot open file: %1").arg(sScriptFile));
    }

    return false;
}

bool PluginsScript::isFunctionPresent(QString sScript, QString sFunctionName)
{
    QScriptValue script = evaluate(sScript);

    if(!script.isError())
    {
        QScriptValue detect=globalObject().property(sFunctionName);

        if(!detect.isError())
        {
            return detect.isFunction();
        }
    }
    else
    {
        emit appendError(QString("%1").arg(script.toString()));
    }

    return false;
}


void PluginsScript::addFunction(QScriptEngine::FunctionSignature function, QString sFunctionName)
{
    QScriptValue func = this->newFunction(function);
    this->globalObject().setProperty(sFunctionName, func);
}

void PluginsScript::addClass(QObject *pClass, QString sClassName,QString sDefaultPath)
{
    this->sDefaultPath=sDefaultPath;
    QScriptValue objectWnd = this->newQObject(pClass);
    this->globalObject().setProperty(sClassName, objectWnd);
}

void PluginsScript::_appendError(QString sText)
{
    emit appendError(sText);
}

void PluginsScript::_appendMessage(QString sText)
{
    emit appendMessage(sText);
}

QString PluginsScript::getDefaultPath()
{
    return sDefaultPath;
}


Web Proxy Viewer  |  New URL  |  Original Page