Example #1
0
/*
 * codeLoad - handle the loading of a new DLL/EXE
 */
static void codeLoad( HANDLE handle, DWORD base, char *name,
                        samp_block_kinds kind )
{
    seg_offset          ovl;
    int                 i;
    pe_object           obj;
    WORD                seg;
    DWORD               offset;
    DWORD               bytes;
    pe_header           peh;

    name = name;

    ovl.offset = 0;
    ovl.segment = 0;
    WriteCodeLoad( ovl, name, kind );
    if( !getPEHeader( handle, &peh ) ) {
        return;
    }
    for( i = 0; i < peh.num_objects; i++ ) {
        ReadFile( handle, &obj, sizeof( obj ), &bytes, NULL );
        if( obj.flags & (PE_OBJ_CODE | PE_OBJ_EXECUTABLE) ) {
            seg = FP_SEG( codeLoad );
        } else {
            seg = FP_SEG( &seg );
        }
        offset = (DWORD) base + obj.rva;
        WriteAddrMap( i + 1, seg, offset );
    }

} /* codeLoad */
Example #2
0
/*---------------------------------------------------------------------------*/
BOOL isX86DllW(const wchar_t *dllfilename)
{
    PIMAGE_NT_HEADERS peHeader = getPEHeader(dllfilename);
    if (peHeader)
    {
        return ((peHeader->FileHeader.Machine & IMAGE_FILE_MACHINE_I386) == IMAGE_FILE_MACHINE_I386);
    }
    return FALSE;
}
Example #3
0
/*---------------------------------------------------------------------------*/
BOOL isDllW(const wchar_t *dllfilename)
{
    PIMAGE_NT_HEADERS peHeader = getPEHeader(dllfilename);
    if (peHeader)
    {
        return ((peHeader->FileHeader.Characteristics & IMAGE_FILE_DLL) == IMAGE_FILE_DLL);
    }
    return FALSE;
}
Example #4
0
IconLoader::IconLoader(IconsMap *icon_map, const char *name)
{
    section = NULL;
    if (*name == 0)
        return;
    f.setName(name);
    if (!f.open(IO_Raw | IO_ReadOnly)) return;
    getDOSHeader();
    f.at(dh.e_lfanew);
    getNEHeader();
    if (nh.ne_magic == NEMAGIC)
    {
        if ( (nh.ne_restab - nh.ne_rsrctab) == 0)
        {
            log(L_WARN, "No resources");
            return;
        }
        if((nh.ne_rsrctab - nh.ne_segtab)%8!=0)
            log(L_WARN, "Extra 4 bytes in segment table.");
        f.at(nh.ne_rsrctab+dh.e_lfanew);
        //		getResourceTable();
    }else{
        f.at(dh.e_lfanew);
        getPEHeader();
        if (ph.signaturebytes != 0x00004550)
        {
            log(L_WARN, "file was neither a ne or pe file");
            return;
        }
        getPEOptHeader();
        section = new PESectHdr[ph.NumberOfSections];
        for (unsigned i=0;i<ph.NumberOfSections;i++)
            getPESectHeader(&section[i]);
        U32 offs = imageDirectoryOffset();
        f.at(offs);
        doResourceDir(offs, 0,0,0);
    }
    for (INT_MAP::iterator it = groups.begin(); it != groups.end(); ++it){
        unsigned id = (*it).first;
        QPixmap pict = getIcon(id);
        if (pict.isNull()) continue;
        icon_map->insert(IconsMap::value_type(id, QIconSet(pict)));
    }
}
Example #5
0
/*
 * codeLoad - handle the loading of a new DLL/EXE
 */
static void codeLoad( HANDLE handle, DWORD base, const char *name, samp_block_kinds kind )
{
    seg_offset          ovl;
    int                 i;
    pe_object           obj;
    DWORD               offset;
    DWORD               bytes;
    pe_header           peh;

    ovl.offset = 0;
    ovl.segment = 0;
    WriteCodeLoad( ovl, name, kind );
    if( !getPEHeader( handle, &peh ) ) {
        return;
    }
    for( i = 0; i < peh.num_objects; i++ ) {
        ReadFile( handle, &obj, sizeof( obj ), &bytes, NULL );
        offset = (DWORD)base + obj.rva;
        WriteAddrMap( i + 1, SEGMENT, offset );
    }

} /* codeLoad */