25 #define WIN32_NO_STATUS 39 #define TableFromToken(tk) (TypeFromToken(tk) >> 24) 40 #define TokenFromTable(idx) (idx << 24) 42 #define MAX_CLR_TABLES 64 44 #define MD_STRINGS_BIT 0x1 45 #define MD_GUIDS_BIT 0x2 46 #define MD_BLOBS_BIT 0x4 88 if (rva < img->PointerToRawData)
93 if (
img[
i].SizeOfRawData)
101 if (
img[
i].PointerToRawData != 0)
116 if ((*
pData & 0x80) == 0x00)
118 *pLength = (*
pData & 0x7f);
122 if ((*
pData & 0xC0) == 0x80)
124 *pLength = ((*
pData & 0x3f) << 8 | *(
pData + 1));
128 if ((*
pData & 0xE0) == 0xC0)
130 *pLength = ((*
pData & 0x1f) << 24 | *(
pData + 1) << 16 |
135 *pLength = (
ULONG)-1;
144 #define MAX_TABLES_WORD 0xFFFF 145 #define MAX_TABLES_1BIT_ENCODE 32767 146 #define MAX_TABLES_2BIT_ENCODE 16383 147 #define MAX_TABLES_3BIT_ENCODE 8191 148 #define MAX_TABLES_5BIT_ENCODE 2047 536 rva =
assembly->corhdr->MetaData.VirtualAddress;
573 rva =
assembly->corhdr->MetaData.VirtualAddress;
578 for (
i = 0;
i <
assembly->metadatahdr->Streams;
i++)
764 static const WCHAR format[] = {
'%',
'u',
'.',
'%',
'u',
'.',
'%',
'u',
'.',
'%',
'u',0};
790 if ((
assembly->corhdr->MajorRuntimeVersion == 2) && (
assembly->corhdr->MinorRuntimeVersion == 0))
845 size =
sizeof(hashdata);
847 tokbytes[
size -
i - 1] = hashdata[
i];
#define MS_PRIMITIVE_PROVIDER
static DWORD rva_to_offset(IMAGE_NT_HEADERS *nthdrs, DWORD rva)
METADATAHDR * metadatahdr
static HRESULT parse_metadata_header(ASSEMBLY *assembly, DWORD *hdrsz)
HRESULT assembly_get_pubkey_token(ASSEMBLY *assembly, LPWSTR *token)
static void token_to_str(BYTE *bytes, LPWSTR str)
static VOID * assembly_data_offset(ASSEMBLY *assembly, ULONG offset)
HRESULT assembly_get_path(const ASSEMBLY *assembly, LPWSTR *path)
struct tagEVENTTABLE EVENTTABLE
#define HRESULT_FROM_WIN32(x)
IMAGE_COR20_HEADER * corhdr
static const WCHAR pubkey[]
HRESULT assembly_get_runtime_version(ASSEMBLY *assembly, LPSTR *version)
GLuint GLuint GLsizei count
#define IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR
NTSTATUS WINAPI BCryptCloseAlgorithmProvider(BCRYPT_ALG_HANDLE handle, DWORD flags)
HRESULT assembly_get_name(ASSEMBLY *assembly, LPWSTR *name)
#define INVALID_HANDLE_VALUE
int WINAPI lstrcmpA(LPCSTR lpString1, LPCSTR lpString2)
IN PVOID IN PVOID IN USHORT IN USHORT Size
DWORD WINAPI GetLastError(VOID)
PEKIND assembly_get_architecture(ASSEMBLY *assembly)
#define TableFromToken(tk)
static struct _tagASSEMBLY assembly
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
static void * heap_alloc(size_t len)
NTSTATUS WINAPI BCryptOpenAlgorithmProvider(BCRYPT_ALG_HANDLE *handle, LPCWSTR id, LPCWSTR implementation, DWORD flags)
#define IMAGE_FIRST_SECTION(NtHeader)
static ULONG get_table_size(const ASSEMBLY *assembly, DWORD index)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat token
static BYTE * assembly_get_blob(ASSEMBLY *assembly, DWORD index, ULONG *size)
static const WCHAR version[]
NTSTATUS WINAPI BCryptHash(BCRYPT_ALG_HANDLE algorithm, UCHAR *secret, ULONG secretlen, UCHAR *input, ULONG inputlen, UCHAR *output, ULONG outputlen)
#define MAX_TABLES_5BIT_ENCODE
_Must_inspect_result_ _In_ WDFDMATRANSACTION _In_ PFN_WDF_PROGRAM_DMA _In_ WDF_DMA_DIRECTION _In_ PMDL _In_ PVOID VirtualAddress
#define MAX_TABLES_3BIT_ENCODE
_Must_inspect_result_ _In_ ULONG Flags
#define CreateFileMappingW(a, b, c, d, e, f)
int JSAMPARRAY int int num_rows
static HRESULT parse_clr_metadata(ASSEMBLY *assembly)
IN PVOID IN PVOID IN USHORT Version
#define IMAGE_NT_OPTIONAL_HDR64_MAGIC
HRESULT assembly_create(ASSEMBLY **out, LPCWSTR file)
#define FILE_ATTRIBUTE_NORMAL
#define memcpy(s1, s2, n)
static HRESULT parse_clr_tables(ASSEMBLY *assembly, ULONG offset)
HRESULT assembly_release(ASSEMBLY *assembly)
HRESULT assembly_get_version(ASSEMBLY *assembly, LPWSTR *version)
struct tagCLRTABLE CLRTABLE
int WINAPI lstrlenA(LPCSTR lpString)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
#define TokenFromTable(idx)
static BYTE * GetData(BYTE *pData, ULONG *pLength)
CLRTABLE tables[MAX_CLR_TABLES]
#define FIELD_OFFSET(t, f)
PVOID WINAPI ImageRvaToVa(_In_ PIMAGE_NT_HEADERS, _In_ PVOID, _In_ ULONG, _In_opt_ PIMAGE_SECTION_HEADER *)
static HRESULT parse_pe_header(ASSEMBLY *assembly)
#define MultiByteToWideChar
struct nls_table * tables
METADATATABLESHDR * tableshdr
PIMAGE_NT_HEADERS WINAPI ImageNtHeader(_In_ PVOID)
TW_UINT32 TW_UINT16 TW_UINT16 TW_MEMREF pData
#define BCRYPT_SHA1_ALGORITHM
static LPWSTR assembly_dup_str(const ASSEMBLY *assembly, DWORD index)
#define MAX_TABLES_2BIT_ENCODE
#define MAX_TABLES_1BIT_ENCODE
static LPWSTR strdupW(LPCWSTR src)
HRESULT assembly_get_external_files(ASSEMBLY *assembly, LPWSTR **files, DWORD *count)
static BOOL heap_free(void *mem)