⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dynamic.c

📁 ELFkickers是一组elf工具
💻 C
字号:
/* dynamic.c: part containing a .dynamic section. * * Copyright (C) 1999-2001 by Brian Raiter, under the GNU General * Public License. No warranty. See COPYING for details. */#include	<stdlib.h>#include	<linux/elf.h>#include	"elfparts.h"#include	"gen.h"/* Set up the elfpart structure. */static void new(elfpart *part){    part->shtype = SHT_DYNAMIC;    part->shname = ".dynamic";    part->flags = PF_R | PF_W;    part->entsize = sizeof(Elf32_Dyn);}/* Add the minimally required entries to the dynamic section. */static void init(elfpart *part, blueprint const *bp){    setdynvalue(part, DT_HASH, 0);    setdynvalue(part, DT_SYMTAB, 0);    setdynvalue(part, DT_SYMENT, 0);    setdynvalue(part, DT_STRTAB, 0);    setdynvalue(part, DT_STRSZ, 0);    part->done = TRUE;    (void)bp;}/* Fill in the values for the required entries. */static void complete(elfpart *part, blueprint const *bp){    elfpart    *p;    int		i;    for (i = 0, p = bp->parts ; i < bp->partcount ; ++i, ++p)	if (p->shtype == SHT_HASH)	    break;    if (i == bp->partcount)	assert(!".dynamic requires a .hash section");    setdynvalue(part, DT_HASH, p->addr);    p = p->link;    setdynvalue(part, DT_SYMTAB, p->addr);    setdynvalue(part, DT_SYMENT, p->entsize);    p = p->link;    setdynvalue(part, DT_STRTAB, p->addr);    setdynvalue(part, DT_STRSZ, p->size);    part->done = TRUE;    (void)bp;}/* The dynamic elfpart structure. */elfpart	part_dynamic = { new, init, NULL, complete };/* Sets the value of an entry in a dynamic section. The entry is added * to the section if it is not already present. The return value is the * index of the entry. */int setdynvalue(elfpart *part, int tag, int value){    Elf32_Dyn  *dyn;    int		i;    assert(part->shtype == SHT_DYNAMIC);    for (i = 0, dyn = part->part ; i < part->count - 1 ; ++i, ++dyn)	if (dyn->d_tag == tag)	    break;    if (i >= part->count - 1) {	part->count = i + 2;	part->size = part->count * part->entsize;	dyn = palloc(part);	dyn += i;	dyn->d_tag = tag;	dyn[1].d_tag = DT_NULL;	dyn[1].d_un.d_val = 0;    }    dyn->d_un.d_val = value;    return i;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -