コード例 #1
0
ファイル: HexDump.cpp プロジェクト: afrozm/projects
int _tmain(int argc, _TCHAR* argv[])
{
    int retVal(0);
    int arg = FindNextArg(argc, argv, 0);
    if (arg <= 0)
    {
        Help();
        retVal = 1;
    }
    else
    {
        for (int i = 1; i < argc; ++i)
            _tprintf(_T("%s\n"), argv[i]);
        BinaryFind bf;
        {
            BinaryData findBuffer;
            findBuffer.BuildFromString(FindArgValue(argc, argv, _T("-f=")), FindArgValue(argc, argv, _T("-fs")) != NULL);
            if (findBuffer.DataSize() > 0)
                bf.SetFindPattern(findBuffer);
        }
        const TCHAR *fileOrString(argv[arg]);
        if (Path(fileOrString).Exists()) {
            Path filePath(fileOrString);
            HDFDCB_Data cbData = { argc, argv, bf };
            if (filePath.IsDir()) {
                Finder f((FindCallBack)HEXDump_FindCallBack, &cbData,
                    FindArgValue(argc, argv, _T("-mp=")),
                    FindArgValue(argc, argv, _T("-ep=")));
                f.StartFind(fileOrString);
            }
            else {
                FindData fd(NULL, filePath, true);
                HEXDump_FindCallBack(fd, &cbData);
            }
            if (cbData.nFiles > 1)
                _tprintf(_T("Total files: %d\n"), cbData.nFiles);
            if (cbData.nFound > 1) {
                _tprintf(_T("Total files matching: %d\n"), cbData.nFound);
                if (cbData.nMaxMatchPerFile > 1)
                    _tprintf(_T("max matching in a file : %d\n"), cbData.nMaxMatchPerFile);
            }
        }
        else
        {
            if (bf.HasFindPattern()) {
                bf.SetFindBuffer((const void *)fileOrString, _tcslen(fileOrString)*sizeof(fileOrString[0]));
                while (true)
                {
                    long long findPos = bf.FindNext();
                    if (findPos >= 0)
                        _tprintf(_T("%08llX\n"), findPos);
                    else break;
                }
            }
            else
                HexDump((const void *)fileOrString, _tcslen(fileOrString)*sizeof(fileOrString[0]));
        }
    }
    return retVal;
}
コード例 #2
0
ファイル: BinaryFind.cpp プロジェクト: afrozm/projects
size_t BinaryData::Append(const BinaryData &inData)
{
    if (inData.DataSize() == 0)
        return 0;

    if (m_pBuffer != NULL)
        SetData(m_pBuffer, DataSize());
    if (Size() - DataSize() < inData.DataSize()) {
        mBuffer.resize(Size() + inData.DataSize(), 0);
        mBufferSize = mBuffer.size();
    }
    memcpy_s((void *)(*this + DataSize()), Size() - DataSize(), inData, inData.DataSize());
    mDataSize += inData.DataSize();

    return DataSize();
}
コード例 #3
0
ファイル: BinaryFind.cpp プロジェクト: afrozm/projects
int BinaryData::Compare(const BinaryData & inData) const
{
    int diff((int)DataSize() - (int)inData.DataSize());
    if (!diff && DataSize() > 0)
        diff = memcmp((const void *)*this, (const void *)inData, DataSize());
    return diff;
}
コード例 #4
0
ファイル: PdfFileRecover.cpp プロジェクト: afrozm/projects
bool CPdfFileRecover::ParseBuffer(BinaryData &inData)
{
    switch (GetState())
    {
    case ReadTillEndOffset:
    {
        mObjFind.SetFindBuffer(inData, true);
        long long findPos(mObjFind.FindNext());
        bool bEndFound(findPos < 0);
        // obj found
        // check all character from start till obj should be printable
        for (size_t i = 0; i < (size_t)findPos && !bEndFound; ++i) {
            char ch(inData[i]);
            if (!STR_CHAR_IS_SPACE(ch) && !isprint(ch))
                bEndFound = true;
        }
        if (!bEndFound) {
            m_iCurrrentEndPatternSkipCount = 0;
            SetState(FindEnd);
        }
        else {
            for (m_iCurrentEndOffset = 0; m_iCurrentEndOffset < (int)inData.DataSize(); ++m_iCurrentEndOffset) {
                char ch(inData[m_iCurrentEndOffset]);
                if (!(STR_CHAR_IS_SPACE(ch)))
                    break;
            }
            if (m_iCurrentEndOffset > 0 && m_iCurrentEndOffset == inData.DataSize()) // Reach end of buffer and all isprint found
                ++m_iCurrentEndOffset; // increment 1 to check more isprint from next buffer
        }
    }
    break;
    default:
        break;
    }
    return __super::ParseBuffer(inData);
}
コード例 #5
0
ファイル: HexDump.cpp プロジェクト: afrozm/projects
static long long HexDump(const BinaryData &buffer, long long startAddress = 0)
{
    _tprintf(_T("%s"), buffer.HexDump(startAddress).c_str());
    return startAddress + buffer.DataSize();
}