#ifndef _LIBMACH_PE_H_ #define _LIBMACH_PE_H_ #include "compat.h" struct DwarfBlock; typedef struct _IMAGE_SECTION_HEADER PeSect; typedef struct _Pe { void *fd; u16int (*e2)(const unsigned char *data); u32int (*e4)(const unsigned char *data); u64int (*e8)(const unsigned char *data); ulong imagebase, imagesize, loadbase; ulong codestart, datastart; int (*loadsection)(struct _Pe *pe, char *name, struct DwarfBlock *b); int nsections; struct _IMAGE_SECTION_HEADER *sect; } Pe; Pe *peopen(const char *name); int loaddisksection(struct _Pe *pe, char *name, struct DwarfBlock *b); u16int peget2(const unsigned char *ptr); u32int peget4(const unsigned char *ptr); u64int peget8(const unsigned char *ptr); void pefree(struct _Pe *pe); ulong pefindrva(struct _IMAGE_SECTION_HEADER *SectionHeader, int NumberOfSections, ulong TargetPhysical); int GetStrnlen(const char *string, int maxlen); #define ANSI_NAME_STRING(s) ((PANSI_STRING)((s)->Name)) #endif/*_LIBMACH_PE_H_*/