当前位置: 首页>>代码示例>>C++>>正文


C++ AsmFormatPluginHelper::write方法代码示例

本文整理汇总了C++中AsmFormatPluginHelper::write方法的典型用法代码示例。如果您正苦于以下问题:C++ AsmFormatPluginHelper::write方法的具体用法?C++ AsmFormatPluginHelper::write怎么用?C++ AsmFormatPluginHelper::write使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在AsmFormatPluginHelper的用法示例。


在下文中一共展示了AsmFormatPluginHelper::write方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: _elf_error

static int _exit_32_shdr(AsmFormatPlugin * format, Elf32_Off offset)
{
    AsmFormatPluginHelper * helper = format->helper;
    Elf * elf = format->priv;
    ElfArch * ea = elf->arch;
    Elf32_Word addralign = ea->addralign;
    Elf32_Shdr * es32 = elf->es32;
    Elf32_Shdr hdr;
    int i;

#ifdef DEBUG
    fprintf(stderr, "DEBUG: %s()\n", __func__);
#endif
    if(helper->seek(helper->format, 0, SEEK_END) < 0)
        return _elf_error(format);
    memset(&hdr, 0, sizeof(hdr));
    if(ea->endian == ELFDATA2MSB)
    {
        hdr.sh_type = _htob32(SHT_NULL);
        hdr.sh_link = _htob32(SHN_UNDEF);
    }
    else
    {
        hdr.sh_type = _htol32(SHT_NULL);
        hdr.sh_link = _htol32(SHN_UNDEF);
    }
    if(helper->write(helper->format, &hdr, sizeof(hdr)) != sizeof(hdr))
        return -1;
    for(i = 0; i < elf->es32_cnt; i++)
    {
#ifdef DEBUG
        fprintf(stderr, "DEBUG: %s() %d\n", __func__, i);
#endif
        if(i + 1 == elf->es32_cnt)
            es32[i].sh_size = offset - es32[i].sh_offset;
        else
            es32[i].sh_size = es32[i + 1].sh_offset
                - es32[i].sh_offset;
        es32[i].sh_offset = (ea->endian == ELFDATA2MSB)
            ? _htob32(es32[i].sh_offset)
            : _htol32(es32[i].sh_offset);
        es32[i].sh_size = (ea->endian == ELFDATA2MSB)
            ? _htob32(es32[i].sh_size) : _htol32(es32[i].sh_size);
        if(es32[i].sh_type == SHT_PROGBITS)
            es32[i].sh_addralign = (ea->endian == ELFDATA2MSB)
                ? _htob32(addralign) : _htol32(addralign);
        es32[i].sh_type = (ea->endian == ELFDATA2MSB)
            ? _htob32(es32[i].sh_type) : _htol32(es32[i].sh_type);
        if(helper->write(helper->format, &es32[i], sizeof(Elf32_Shdr))
                != sizeof(Elf32_Shdr))
            return -1;
    }
    return 0;
}
开发者ID:khorben,项目名称:DeforaOS,代码行数:54,代码来源:elf.c

示例2: if

static int _exit_32(AsmFormatPlugin * format)
{
    int ret = 0;
    AsmFormatPluginHelper * helper = format->helper;
    long offset;

#ifdef DEBUG
    fprintf(stderr, "DEBUG: %s()\n", __func__);
#endif
    if(_section_32(format, ".shstrtab") != 0)
        ret = -1;
    else if(helper->write(helper->format, shstrtab.buf, shstrtab.cnt)
            != (ssize_t)shstrtab.cnt)
        ret = -1;
    else if((offset = helper->seek(helper->format, 0, SEEK_CUR)) < 0)
        ret = -1;
    else if(_exit_32_phdr(format, offset) != 0
            || _exit_32_shdr(format, offset) != 0)
        ret = -1;
    free(shstrtab.buf);
    shstrtab.buf = NULL;
    shstrtab.cnt = 0;
    ret |= _elf_exit(format);
    return ret;
}
开发者ID:khorben,项目名称:DeforaOS,代码行数:25,代码来源:elf.c

示例3:

static int _exit_64_phdr(AsmFormatPlugin * format, Elf64_Off offset)
{
    AsmFormatPluginHelper * helper = format->helper;
    Elf * elf = format->priv;
    ElfArch * ea = elf->arch;
    Elf64_Ehdr hdr;

    if(elf->es64_cnt == 0)
        return 0;
    if(helper->seek(helper->format, 0, SEEK_SET) != 0)
        return -1;
    if(helper->read(helper->format, &hdr, sizeof(hdr)) != sizeof(hdr))
        return -1;
    if(ea->endian == ELFDATA2MSB)
    {
        hdr.e_shoff = _htob64(offset);
        hdr.e_shnum = _htob16(elf->es64_cnt);
        hdr.e_shstrndx = _htob16(elf->es64_cnt - 1);
    }
    else
    {
        hdr.e_shoff = _htol64(offset);
        hdr.e_shnum = _htol16(elf->es64_cnt);
        hdr.e_shstrndx = _htol16(elf->es64_cnt - 1);
    }
    if(helper->seek(helper->format, 0, SEEK_SET) != 0)
        return -1;
    if(helper->write(helper->format, &hdr, sizeof(hdr)) != sizeof(hdr))
        return -1;
    return 0;
}
开发者ID:khorben,项目名称:DeforaOS,代码行数:31,代码来源:elf.c


注:本文中的AsmFormatPluginHelper::write方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。