summaryrefslogtreecommitdiffhomepage
path: root/include
diff options
context:
space:
mode:
authormidipix <writeonce@midipix.org>2025-05-30 08:51:56 +0000
committermidipix <writeonce@midipix.org>2025-05-30 08:51:56 +0000
commit906422a560cdbf078793143a30274a5faed37d6b (patch)
treeed36d22e031e0ab8b0f295c61e12a63845432e80 /include
parent2baf678ee420b74c3b08a225f111787645ac18a6 (diff)
downloadperk-906422a560cdbf078793143a30274a5faed37d6b.tar.bz2
perk-906422a560cdbf078793143a30274a5faed37d6b.tar.xz
arbits: added pe_ar_get_archive_meta(), the framework's archive parser.
Diffstat (limited to 'include')
-rw-r--r--include/perk/perk.h39
1 files changed, 39 insertions, 0 deletions
diff --git a/include/perk/perk.h b/include/perk/perk.h
index 1d081a8..78f1a0f 100644
--- a/include/perk/perk.h
+++ b/include/perk/perk.h
@@ -6,6 +6,7 @@
#include "perk_api.h"
#include "perk_meta.h"
+#include "perk_arbits.h"
#ifdef __cplusplus
extern "C" {
@@ -61,6 +62,27 @@ enum pe_custom_error {
PERK_ERR_BAD_COFF_HEADER,
PERK_ERR_BAD_IMAGE_TYPE,
PERK_ERR_UNSUPPORTED_ABI,
+ PERK_ERR_AR_FAIL,
+ PERK_ERR_AR_EMPTY_FILE,
+ PERK_ERR_AR_INVALID_SIGNATURE,
+ PERK_ERR_AR_INVALID_HEADER,
+ PERK_ERR_AR_TRUNCATED_DATA,
+ PERK_ERR_AR_DUPLICATE_LONG_NAMES,
+ PERK_ERR_AR_DUPLICATE_ARMAP_MEMBER,
+ PERK_ERR_AR_MISPLACED_ARMAP_MEMBER,
+ PERK_ERR_AR_NO_ACTION_SPECIFIED,
+ PERK_ERR_AR_NO_INPUT_SPECIFIED,
+ PERK_ERR_AR_DRIVER_MISMATCH,
+ PERK_ERR_AR_ARMAP_MISMATCH,
+ PERK_ERR_AR_INVALID_ARMAP_NUMBER_OF_SYMS,
+ PERK_ERR_AR_INVALID_ARMAP_SIZE_OF_REFS,
+ PERK_ERR_AR_INVALID_ARMAP_SIZE_OF_STRS,
+ PERK_ERR_AR_INVALID_ARMAP_STRING_TABLE,
+ PERK_ERR_AR_INVALID_ARMAP_MEMBER_OFFSET,
+ PERK_ERR_AR_INVALID_ARMAP_NAME_OFFSET,
+ PERK_ERR_AR_DLUNIT_NOT_SPECIFIED,
+ PERK_ERR_AR_OUTPUT_NOT_SPECIFIED,
+ PERK_ERR_AR_OUTPUT_NOT_APPLICABLE,
PERK_ERR_CAP,
};
@@ -85,6 +107,11 @@ struct pe_raw_image {
size_t map_size;
};
+struct pe_raw_archive {
+ void * map_addr;
+ size_t map_size;
+};
+
struct pe_expsym {
const char * s_name;
void * s_eaddr;
@@ -138,6 +165,18 @@ struct pe_image_meta {
enum pe_framework m_framework;
};
+struct pe_archive_meta {
+ struct pe_raw_archive r_archive;
+ struct ar_raw_signature * r_signature;
+
+ struct ar_meta_signature * m_signature;
+
+ struct ar_meta_member_info ** a_memberv;
+ struct ar_meta_member_info * a_arref_longnames;
+ struct ar_meta_armap_info a_armap_primary;
+ struct ar_meta_armap_info a_armap_pecoff;
+};
+
struct pe_source_version {
int major;
int minor;