forked from cheat-engine/cheat-engine
-
Notifications
You must be signed in to change notification settings - Fork 0
/
config.h
executable file
·180 lines (142 loc) · 3.98 KB
/
config.h
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
/*
config.h
Copyright (C) 2003-2008 Gil Dabah, http://ragestorm.net/distorm/
This library is licensed under the BSD license. See the file COPYING.
*/
#ifndef CONFIG_H
#define CONFIG_H
/* diStorm version number. */
#define DISTORM_VER 0x01071e
#define SUPPORT_64BIT_OFFSET 1
#define DARKBYTESFUCKEDUPCROSSCOMPILER 1
#ifdef DARKBYTESFUCKEDUPCROSSCOMPILER
typedef signed char int8_t;
typedef short int int16_t;
typedef int int32_t;
typedef long long int int64_t;
typedef unsigned char uint8_t;
typedef unsigned short int uint16_t;
typedef unsigned int uint32_t;
typedef unsigned long long int uint64_t;
#endif
#include "common.h" /* strlen, memset, memcpy - can be easily self implemented for libc independency. */
/*
* 64 bit offsets support:
* This macro should be defined from compiler command line flags, e.g: -DSUPPORT_64BIT_OFFSET
* #define SUPPORT_64BIT_OFFSET
* Note: make sure that the caller (library user) defines it too!
*/
/*
* If you compile diStorm as a .DLL file, make sure you uncomment the next line.
* So the interface functions will be exported, otherwise they are useable only as a library.
* For example, the Python extension module defines this macro in its configuration.
*/
/* #define _DLL */
/*
* diStorm now supports little/big endian CPU's.
* It should detect the endianness according to predefined macro's of the compiler.
* If you don't use GCC/MSVC you will have to define it on your own.
*/
/* These macros are used in order to make the code portable. */
#ifdef __GNUC__
#ifndef DARKBYTESFUCKEDUPCROSSCOMPILER
#include <stdint.h>
#endif
#define _PACKED_ __attribute__((__packed__))
#define _DLLEXPORT_
#define _FASTCALL_
#define _INLINE_ static __inline__
/* GCC ignores this directive... */
/*#define _FASTCALL_ __attribute__((__fastcall__)) */
/* Set endianity (supposed to be LE though): */
#ifdef __BIG_ENDIAN__
#define BE_SYSTEM
#endif
/* End of __GCC__ */
#elif __WATCOMC__
#include <stdint.h>
#define _PACKED_
#define _DLLEXPORT_
#define _FASTCALL_
#define _INLINE_ __inline
/* End of __WATCOMC__ */
#elif __DMC__
#include <stdint.h>
#define _PACKED_
#define _DLLEXPORT_
#define _FASTCALL_
#define _INLINE_ static __inline
/* End of __DMC__ */
#elif __TINYC__
#include <stdint.h>
#define _PACKED_
#define _DLLEXPORT_
#define _FASTCALL_
#define _INLINE_ static
/* End of __TINYC__ */
#elif _MSC_VER
/* Since MSVC isn't shipped with stdint.h, we will have our own: */
typedef signed __int64 int64_t;
typedef unsigned __int64 uint64_t;
typedef signed __int32 int32_t;
typedef unsigned __int32 uint32_t;
typedef signed __int16 int16_t;
typedef unsigned __int16 uint16_t;
typedef signed __int8 int8_t;
typedef unsigned __int8 uint8_t;
#define _PACKED_
#define _DLLEXPORT_ __declspec(dllexport)
#define _FASTCALL_ __fastcall
#define _INLINE_ static __inline
/* Set endianity (supposed to be LE though): */
#ifndef _M_IX86
#define BE_SYSTEM
#endif
#endif /* #elif _MSC_VER */
/* 32 or 64 bits integer for instruction offset. */
#ifdef SUPPORT_64BIT_OFFSET
#define OFFSET_INTEGER uint64_t
#else
#define OFFSET_INTEGER uint32_t
#endif
#ifndef FALSE
#define FALSE 0
#endif
#ifndef TRUE
#define TRUE 1
#endif
/* If the library isn't compiled as a .DLL don't export functions. */
#ifndef _DLL
#undef _DLLEXPORT_
#define _DLLEXPORT_
#endif
/* Define stream read functions for big endian systems. */
#ifdef BE_SYSTEM
/*
* These functions can read from the stream safely!
* Swap endianity of input to little endian.
*/
_INLINE_ int16_t RSHORT(const uint8_t *s)
{
return s[0] | (s[1] << 8);
}
_INLINE_ uint16_t RUSHORT(const uint8_t *s)
{
return s[0] | (s[1] << 8);
}
_INLINE_ int32_t RLONG(const uint8_t *s)
{
return s[0] | (s[1] << 8) | (s[2] << 16) | (s[3] << 24);
}
_INLINE_ uint32_t RULONG(const uint8_t *s)
{
return s[0] | (s[1] << 8) | (s[2] << 16) | (s[3] << 24);
}
#else
/* Little endian macro's will just make the cast. */
#define RSHORT(x) *(int16_t *)x
#define RUSHORT(x) *(uint16_t *)x
#define RLONG(x) *(int32_t *)x
#define RULONG(x) *(uint32_t *)x
#endif
#endif /* CONFIG_H */