File: libdpe.h

package info (click to toggle)
pesign 116-8.1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,112 kB
  • sloc: ansic: 14,144; sh: 784; makefile: 226
file content (93 lines) | stat: -rw-r--r-- 2,345 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
// SPDX-License-Identifier: GPLv2
/*
 * libdpe.h - types for libdpe
 * Copyright 2011-2020 Peter Jones <pjones@redhat.com>
 * Copyright 2011 Red Hat, Inc.
 */
#ifndef LIBDPE_H
#define LIBDPE_H 1

#include <sys/types.h>

#include <libdpe/pe.h>

typedef enum {
	PE_K_NONE,
	PE_K_MZ,
	PE_K_PE_OBJ,
	PE_K_PE_EXE,
	PE_K_PE_ROM,
	PE_K_PE64_OBJ,
	PE_K_PE64_EXE,
	PE_K_NUM /* terminating entry */
} Pe_Kind;

typedef enum {
	PE_C_NULL,
	PE_C_READ,
	PE_C_RDWR,
	PE_C_WRITE,
	PE_C_CLR,
	PE_C_SET,
	PE_C_FDDONE,
	PE_C_FDREAD,
	PE_C_READ_MMAP,
	PE_C_RDWR_MMAP,
	PE_C_WRITE_MMAP,
	PE_C_READ_MMAP_PRIVATE,
	PE_C_EMPTY,
	PE_C_NUM /* last entry */
} Pe_Cmd;

typedef enum {
	PE_DATA_DIR_EXPORTS = 1,
	PE_DATA_DIR_IMPORTS,
	PE_DATA_DIR_RESOURCES,
	PE_DATA_DIR_EXCEPTIONS,
	PE_DATA_DIR_CERTIFICATES,
	PE_DATA_DIR_BASE_RELOCATIONS,
	PE_DATA_DIR_DEBUG,
	PE_DATA_DIR_ARCH,
	PE_DATA_DIR_GLOBAL_POINTER,
	PE_DATA_TLS,
	PE_DATA_LOAD_CONFIG,
	PE_DATA_BOUND_IMPORT,
	PE_DATA_IMPORT_ADDRESS,
	PE_DATA_DELAY_IMPORTS,
	PE_DATA_CLR_RUNTIME_HEADER,
	PE_DATA_RESERVED,
	PE_DATA_NUM /* last entry */
} Pe_DataDir_Type;

typedef struct Pe Pe;
typedef struct Pe_Scn Pe_Scn;

extern Pe *pe_begin(int fildes, Pe_Cmd cmd, Pe *ref);
extern Pe *pe_clone(Pe *pe, Pe_Cmd cmd);
extern Pe *pe_memory(char *image, size_t size);
extern int pe_end(Pe *pe);
extern loff_t pe_update(Pe *pe, Pe_Cmd cmd);
extern Pe_Kind pe_kind(Pe *Pe) __attribute__ ((__pure__));
extern Pe_Scn *pe_nextscn(Pe *pe, Pe_Scn *scn);
extern Pe_Scn *pe_getscn(Pe *pe, size_t idx);
extern struct section_header *pe_getshdr(Pe_Scn *scn, struct section_header *dst);
extern struct pe_hdr *pe_getpehdr(Pe *pe, struct pe_hdr *pehdr);
extern char *pe_rawfile(Pe *pe, size_t *ptr);
extern int pe_getdatadir(Pe *pe, data_directory **dd);
extern void *pe_getopthdr(Pe *pe);
extern int32_t pe_get_file_alignment(Pe *pe);
extern int32_t pe_get_scn_alignment(Pe *pe);
extern int pe_set_image_size(Pe *pe);

extern int pe_extend_file(Pe *pe, size_t size, uint32_t *new_space, int align);
extern int pe_freespace(Pe *pe, uint32_t offset, size_t size);
extern int pe_shorten_file(Pe *pe, size_t size);

extern int pe_clearcert(Pe *pe);
extern int pe_alloccert(Pe *pe, size_t len);
extern int pe_populatecert(Pe *pe, void *cert, size_t len);

extern int pe_errno(void);
extern const char *pe_errmsg(int error);

#endif /* LIBDPE_H */