コード例 #1
0
ファイル: buildElf.cpp プロジェクト: Grauniad/ELf64-Linker
ElfFile::ElfFile(ElfContent& data) 
     : 
       offsets(data),
       header(data.progHeaders.size() > 0 ? 
                 ElfHeaderX86_64::NewExecutable() :
                 ElfHeaderX86_64::NewObjectFile()),
       file(1024) , 
       dataSectionStart(file),
       sectionHeadersStart(file)
{
    InitialiseHeader(data);
    InitialiseFile(data);
      
    // Process the program headers
    ProcessProgHeaders( data);

    
    sectionHeadersStart.Offset() = WriteDataSections(data);

    Bootstrap(data);

    header.SectionTableStart() = sectionHeadersStart.Offset();


    WriteSectionHeaders(data);

    // Finally write the header
    file.Writer().Write(&header,header.Size());

    // clean up any extra data
    file.Resize( (long)sectionHeadersStart + 
                 header.Sections() * header.SectionHeaderSize() );
}
コード例 #2
0
/*++

Routine Name:

    CXPSArchive::GetFileStream

Routine Description:

    This routine retrieves the read stream for an XPS part.

Arguments:

    szFileName   - The name of the XPS part the stream is required for
    ppFileStream - Pointer to an ISequentialStream pointer that recieves the stream

Return Value:

    HRESULT
    S_OK - On success
    E_*  - On error

--*/
HRESULT
CXPSArchive::GetFileStream(
    _In_z_      PCSTR               szFileName,
    _Outptr_ ISequentialStream** ppFileStream
    )
{
    HRESULT hr = S_OK;

    //
    // Initialise the current XPS file
    //
    if (SUCCEEDED(hr = CHECK_POINTER(ppFileStream, E_POINTER)) &&
        SUCCEEDED(hr = InitialiseFile(szFileName)))
    {
        //
        // Query the XPS file for the file stream
        //
        *ppFileStream = NULL;
        hr = m_XpsFile.QueryInterface(IID_ISequentialStream, reinterpret_cast<PVOID*>(ppFileStream));
    }

    ERR_ON_HR(hr);
    return hr;
}