blob: 1adf6082b3a579920fe3895019d60f311dc8545b (
plain)
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
|
/* -------------------------------------------
Copyright Mahrouss Logic
File: MSDOS.hpp
Purpose: MS-DOS header for HCore.
Revision History:
30/01/24: Added file (amlel)
------------------------------------------- */
#ifndef __MSDOS_EXEC__
#define __MSDOS_EXEC__
#include <NewKit/Defines.hpp>
#include "PE.hpp"
typedef HCore::UInt32 DosWord;
typedef HCore::Long DosLong;
typedef struct _DosHeader {
HCore::UInt8 eMagic[2];
DosWord eMagLen;
DosWord ePagesCount;
DosWord eCrlc;
DosWord eCParHdr;
DosWord eMinAlloc;
DosWord eMaxAlloc;
DosWord eStackSeg;
DosWord eStackPtr;
DosWord eChksum;
DosWord eIp;
DosWord eCs;
DosWord eLfarlc;
DosWord eOvno;
DosWord eRes[4];
DosWord eOemid;
DosWord eOeminfo;
DosWord eRes2[10];
DosLong eLfanew;
} DosHeader, *DosHeaderPtr;
namespace HCore {
/// @brief Find the PE header inside the the blob.
inline auto rt_find_exec_header(DosHeaderPtr ptrDos) -> VoidPtr {
if (!ptrDos) return nullptr;
if (ptrDos->eMagic[0] != kMagMz0) return nullptr;
if (ptrDos->eMagic[1] != kMagMz1) return nullptr;
return (VoidPtr)(&ptrDos->eLfanew + 1);
}
} // namespace HCore
#endif /* ifndef __MSDOS_EXEC__ */
|