Exemplo n.º 1
0
unsigned int MACHFile::getSectionHeaderOffset(unsigned int nSection)
{
    unsigned int nNumberOfSegments=getNumberOfSegments();
    unsigned int nResult=0;
    unsigned int nCurrentSection=0;

    for(int i=0; i<nNumberOfSegments; i++)
    {
        nResult=getSegmentHeaderOffset(i);
        nResult+=getSegmentHeaderSize();

        for(int j=0; j<getSegment_nsects(i); j++)
        {


            if(nCurrentSection+j==nSection)
            {
                return nResult;
            }

            nResult+=getSectionHeaderSize();
        }

        nCurrentSection+=getSegment_nsects(i);
    }

    emit appendError(QString("Invalid section number: %1").arg(nSection));

    return 0;
}
Exemplo n.º 2
0
bool MACHFile::isSegmentPresent(unsigned int nSegment)
{
    if(nSegment<getNumberOfSegments())
    {
        return true;
    }

    emit appendError(QString("Invalid Segment number: %1").arg(nSegment));

    return false;
}
Exemplo n.º 3
0
unsigned int MACHFile::calculateRawSize()
{
    unsigned int nResult=getMachHeaderSize();

    for(int i=0; i<getNumberOfSegments(); i++)
    {
        nResult=qMax(nResult,getSegmentFileOffset(i)+getSegmentFileSize(i));
    }

    return nResult;
}
Exemplo n.º 4
0
unsigned int MACHFile::getNumberOfSections()
{
    unsigned int nResult=0;
    unsigned int nNumberOfSegments=getNumberOfSegments();

    for(int i=0; i<nNumberOfSegments; i++)
    {
        nResult+=getSegment_nsects(i);
    }

    return nResult;
}
Exemplo n.º 5
0
unsigned long long MACHFile::RVAToOffset64(unsigned long long nRVA)
{
    unsigned int nNumberOfSegments=getNumberOfSegments();

    for(int i=0; i<nNumberOfSegments; i++)
    {
        if((getSegment_vmaddr64(i)<=nRVA)&&(nRVA<getSegment_vmaddr64(i)+getSegment_vmsize64(i)))
        {
            return getSegment_fileoff64(i)+nRVA-getSegment_vmaddr64(i);
        }
    }

    emit appendWarning(QString("Invalid RVA: %1").arg(nRVA,8,16,QChar('0')));
    return -1;
}
Exemplo n.º 6
0
unsigned long long MACHFile::OffsetToRVA64(unsigned long long nOffset)
{
    unsigned int nNumberOfSegments=getNumberOfSegments();

    for(int i=0; i<nNumberOfSegments; i++)
    {
        if((getSegment_fileoff64(i)<=nOffset)&&(nOffset<getSegment_fileoff64(i)+getSegment_filesize64(i)))
        {
            return getSegment_vmaddr64(i)+nOffset-getSegment_fileoff64(i);
        }
    }

    emit appendWarning(QString("Invalid offset: %1").arg(nOffset,8,16,QChar('0')));
    return -1;
}
Exemplo n.º 7
0
        void PathComponent::render(Renderer *renderer) const
        {
            renderer->begin(RENDERTYPE_LINE_STRIP);

            for(int i = 0; i < getNumberOfSegments(); i++) {
                PathSegment *segment = getSegment(i);
                float increment = Path::getSubdivideLength() /
                        segment->getLength();

                renderer->vector(segment->getPoint(0.0f));
                for(float t = increment; t < 1.0f; t += increment) {
                    renderer->vector(segment->getPoint(t));
                }

                renderer->vector(segment->getPoint(1.0f));
            }

            renderer->end();
        }