HyperDbg Debugger
Loading...
Searching...
No Matches
Keywords.c File Reference

Script engine keywords implementations. More...

#include "pch.h"

Functions

UINT64 ScriptEngineKeywordPoi (PUINT64 Address, BOOL *HasError)
 Implementation of poi keyword.
WORD ScriptEngineKeywordHi (PUINT64 Address, BOOL *HasError)
 Implementation of hi keyword.
WORD ScriptEngineKeywordLow (PUINT64 Address, BOOL *HasError)
 Implementation of low keyword.
BYTE ScriptEngineKeywordDb (PUINT64 Address, BOOL *HasError)
 Implementation of db keyword.
DWORD ScriptEngineKeywordDd (PUINT64 Address, BOOL *HasError)
 Implementation of dd keyword.
WORD ScriptEngineKeywordDw (PUINT64 Address, BOOL *HasError)
 Implementation of dw keyword.
QWORD ScriptEngineKeywordDq (PUINT64 Address, BOOL *HasError)
 Implementation of dq keyword.
UINT64 ScriptEngineKeywordPoiPa (PUINT64 Address, BOOL *HasError)
 Implementation of poi_pa keyword.
WORD ScriptEngineKeywordHiPa (PUINT64 Address, BOOL *HasError)
 Implementation of hi keyword.
WORD ScriptEngineKeywordLowPa (PUINT64 Address, BOOL *HasError)
 Implementation of low keyword.
BYTE ScriptEngineKeywordDbPa (PUINT64 Address, BOOL *HasError)
 Implementation of db keyword.
DWORD ScriptEngineKeywordDdPa (PUINT64 Address, BOOL *HasError)
 Implementation of dd keyword.
WORD ScriptEngineKeywordDwPa (PUINT64 Address, BOOL *HasError)
 Implementation of dw keyword.
QWORD ScriptEngineKeywordDqPa (PUINT64 Address, BOOL *HasError)
 Implementation of dq keyword.

Detailed Description

Script engine keywords implementations.

Author
M.H. Gholamrezaei (mh@hy.nosp@m.perd.nosp@m.bg.or.nosp@m.g)
Sina Karvandi (sina@.nosp@m.hype.nosp@m.rdbg..nosp@m.org)
Version
0.2
Date
2022-06-29

Function Documentation

◆ ScriptEngineKeywordDb()

BYTE ScriptEngineKeywordDb ( PUINT64 Address,
BOOL * HasError )

Implementation of db keyword.

Parameters
Address
HasError
Returns
BYTE
136{
137 BYTE Result = NULL_ZERO;
138
139#ifdef SCRIPT_ENGINE_KERNEL_MODE
140
141 if (!CheckAccessValidityAndSafety((UINT64)Address, sizeof(BYTE)))
142 {
143 *HasError = TRUE;
144
145 return NULL_ZERO;
146 }
147
148#endif // SCRIPT_ENGINE_KERNEL_MODE
149
150#ifdef SCRIPT_ENGINE_USER_MODE
151 Result = (BYTE)*Address;
152#endif // SCRIPT_ENGINE_USER_MODE
153
154#ifdef SCRIPT_ENGINE_KERNEL_MODE
155 MemoryMapperReadMemorySafeOnTargetProcess((UINT64)Address, &Result, sizeof(BYTE));
156#endif // SCRIPT_ENGINE_KERNEL_MODE
157
158 return Result;
159}
#define NULL_ZERO
Definition BasicTypes.h:110
unsigned char BYTE
Definition BasicTypes.h:40
#define TRUE
Definition BasicTypes.h:114
IMPORT_EXPORT_VMM BOOLEAN CheckAccessValidityAndSafety(UINT64 TargetAddress, UINT32 Size)
Check the safety to access the memory.
Definition AddressCheck.c:318
IMPORT_EXPORT_VMM BOOLEAN MemoryMapperReadMemorySafeOnTargetProcess(_In_ UINT64 VaAddressToRead, _Inout_ PVOID BufferToSaveMemory, _In_ SIZE_T SizeToRead)

◆ ScriptEngineKeywordDbPa()

BYTE ScriptEngineKeywordDbPa ( PUINT64 Address,
BOOL * HasError )

Implementation of db keyword.

Parameters
Address
HasError
Returns
BYTE
389{
390 BYTE Result = NULL_ZERO;
391
392#ifdef SCRIPT_ENGINE_KERNEL_MODE
393
394 if (!CheckAddressPhysical((UINT64)Address))
395 {
396 *HasError = TRUE;
397
398 return NULL_ZERO;
399 }
400
401#endif // SCRIPT_ENGINE_KERNEL_MODE
402
403#ifdef SCRIPT_ENGINE_USER_MODE
404
405 ShowMessages("err, using physical address keywords (db_pa) is not possible in user-mode\n");
406 return (BYTE)NULL;
407
408#endif // SCRIPT_ENGINE_USER_MODE
409
410#ifdef SCRIPT_ENGINE_KERNEL_MODE
411 MemoryMapperReadMemorySafeByPhysicalAddress((UINT64)Address, (UINT64)&Result, sizeof(BYTE));
412#endif // SCRIPT_ENGINE_KERNEL_MODE
413
414 return Result;
415}
IMPORT_EXPORT_VMM BOOLEAN CheckAddressPhysical(UINT64 PAddr)
Checks if the physical address is correct or not based on physical address width.
Definition AddressCheck.c:120
IMPORT_EXPORT_VMM BOOLEAN MemoryMapperReadMemorySafeByPhysicalAddress(_In_ UINT64 PaAddressToRead, _Inout_ UINT64 BufferToSaveMemory, _In_ SIZE_T SizeToRead)
NULL()
Definition test-case-generator.py:530

◆ ScriptEngineKeywordDd()

DWORD ScriptEngineKeywordDd ( PUINT64 Address,
BOOL * HasError )

Implementation of dd keyword.

Parameters
Address
HasError
Returns
DWORD
170{
171 DWORD Result = NULL_ZERO;
172
173#ifdef SCRIPT_ENGINE_KERNEL_MODE
174
175 if (!CheckAccessValidityAndSafety((UINT64)Address, sizeof(DWORD)))
176 {
177 *HasError = TRUE;
178
179 return NULL_ZERO;
180 }
181
182#endif // SCRIPT_ENGINE_KERNEL_MODE
183
184#ifdef SCRIPT_ENGINE_USER_MODE
185 Result = (DWORD)*Address;
186#endif // SCRIPT_ENGINE_USER_MODE
187
188#ifdef SCRIPT_ENGINE_KERNEL_MODE
189 MemoryMapperReadMemorySafeOnTargetProcess((UINT64)Address, &Result, sizeof(DWORD));
190#endif // SCRIPT_ENGINE_KERNEL_MODE
191
192 return Result;
193}
unsigned long DWORD
Definition BasicTypes.h:38

◆ ScriptEngineKeywordDdPa()

DWORD ScriptEngineKeywordDdPa ( PUINT64 Address,
BOOL * HasError )

Implementation of dd keyword.

Parameters
Address
HasError
Returns
DWORD
426{
427 DWORD Result = NULL_ZERO;
428
429#ifdef SCRIPT_ENGINE_KERNEL_MODE
430
431 if (!CheckAddressPhysical((UINT64)Address))
432 {
433 *HasError = TRUE;
434
435 return NULL_ZERO;
436 }
437
438#endif // SCRIPT_ENGINE_KERNEL_MODE
439
440#ifdef SCRIPT_ENGINE_USER_MODE
441
442 ShowMessages("err, using physical address keywords (dd_pa) is not possible in user-mode\n");
443 return (DWORD)NULL;
444
445#endif // SCRIPT_ENGINE_USER_MODE
446
447#ifdef SCRIPT_ENGINE_KERNEL_MODE
448 MemoryMapperReadMemorySafeByPhysicalAddress((UINT64)Address, (UINT64)&Result, sizeof(DWORD));
449#endif // SCRIPT_ENGINE_KERNEL_MODE
450
451 return Result;
452}

◆ ScriptEngineKeywordDq()

QWORD ScriptEngineKeywordDq ( PUINT64 Address,
BOOL * HasError )

Implementation of dq keyword.

Parameters
Address
HasError
Returns
QWORD
238{
239 QWORD Result = (QWORD)NULL;
240
241#ifdef SCRIPT_ENGINE_KERNEL_MODE
242
243 if (!CheckAccessValidityAndSafety((UINT64)Address, sizeof(DWORD)))
244 {
245 *HasError = TRUE;
246
247 return (QWORD)NULL;
248 }
249
250#endif // SCRIPT_ENGINE_KERNEL_MODE
251
252#ifdef SCRIPT_ENGINE_USER_MODE
253 Result = *Address;
254#endif // SCRIPT_ENGINE_USER_MODE
255
256#ifdef SCRIPT_ENGINE_KERNEL_MODE
257 MemoryMapperReadMemorySafeOnTargetProcess((UINT64)Address, &Result, sizeof(QWORD));
258#endif // SCRIPT_ENGINE_KERNEL_MODE
259
260 return Result;
261}
unsigned long long QWORD
Definition BasicTypes.h:24

◆ ScriptEngineKeywordDqPa()

QWORD ScriptEngineKeywordDqPa ( PUINT64 Address,
BOOL * HasError )

Implementation of dq keyword.

Parameters
Address
HasError
Returns
QWORD
500{
501 QWORD Result = (QWORD)NULL;
502
503#ifdef SCRIPT_ENGINE_KERNEL_MODE
504
505 if (!CheckAddressPhysical((UINT64)Address))
506 {
507 *HasError = TRUE;
508
509 return (QWORD)NULL;
510 }
511
512#endif // SCRIPT_ENGINE_KERNEL_MODE
513
514#ifdef SCRIPT_ENGINE_USER_MODE
515
516 ShowMessages("err, using physical address keywords (dq_pa) is not possible in user-mode\n");
517 return (QWORD)NULL;
518
519#endif // SCRIPT_ENGINE_USER_MODE
520
521#ifdef SCRIPT_ENGINE_KERNEL_MODE
522 MemoryMapperReadMemorySafeByPhysicalAddress((UINT64)Address, (UINT64)&Result, sizeof(QWORD));
523#endif // SCRIPT_ENGINE_KERNEL_MODE
524
525 return Result;
526}

◆ ScriptEngineKeywordDw()

WORD ScriptEngineKeywordDw ( PUINT64 Address,
BOOL * HasError )

Implementation of dw keyword.

Parameters
Address
HasError
Returns
WORD
204{
205 WORD Result = NULL_ZERO;
206
207#ifdef SCRIPT_ENGINE_KERNEL_MODE
208
209 if (!CheckAccessValidityAndSafety((UINT64)Address, sizeof(WORD)))
210 {
211 *HasError = TRUE;
212
213 return NULL_ZERO;
214 }
215
216#endif // SCRIPT_ENGINE_KERNEL_MODE
217
218#ifdef SCRIPT_ENGINE_USER_MODE
219 Result = (WORD)*Address;
220#endif // SCRIPT_ENGINE_USER_MODE
221
222#ifdef SCRIPT_ENGINE_KERNEL_MODE
223 MemoryMapperReadMemorySafeOnTargetProcess((UINT64)Address, &Result, sizeof(WORD));
224#endif // SCRIPT_ENGINE_KERNEL_MODE
225
226 return Result;
227}
unsigned short WORD
Definition BasicTypes.h:42

◆ ScriptEngineKeywordDwPa()

WORD ScriptEngineKeywordDwPa ( PUINT64 Address,
BOOL * HasError )

Implementation of dw keyword.

Parameters
Address
HasError
Returns
WORD
463{
464 WORD Result = NULL_ZERO;
465
466#ifdef SCRIPT_ENGINE_KERNEL_MODE
467
468 if (!CheckAddressPhysical((UINT64)Address))
469 {
470 *HasError = TRUE;
471
472 return NULL_ZERO;
473 }
474
475#endif // SCRIPT_ENGINE_KERNEL_MODE
476
477#ifdef SCRIPT_ENGINE_USER_MODE
478
479 ShowMessages("err, using physical address keywords (dw_pa) is not possible in user-mode\n");
480 return (WORD)NULL;
481
482#endif // SCRIPT_ENGINE_USER_MODE
483
484#ifdef SCRIPT_ENGINE_KERNEL_MODE
485 MemoryMapperReadMemorySafeByPhysicalAddress((UINT64)Address, (UINT64)&Result, sizeof(WORD));
486#endif // SCRIPT_ENGINE_KERNEL_MODE
487
488 return Result;
489}

◆ ScriptEngineKeywordHi()

WORD ScriptEngineKeywordHi ( PUINT64 Address,
BOOL * HasError )

Implementation of hi keyword.

Parameters
Address
HasError
Returns
WORD
68{
69 QWORD Result = NULL64_ZERO;
70
71#ifdef SCRIPT_ENGINE_KERNEL_MODE
72
73 if (!CheckAccessValidityAndSafety((UINT64)Address, sizeof(UINT64)))
74 {
75 *HasError = TRUE;
76
77 return NULL64_ZERO;
78 }
79
80#endif // SCRIPT_ENGINE_KERNEL_MODE
81
82#ifdef SCRIPT_ENGINE_USER_MODE
83 Result = *Address;
84#endif // SCRIPT_ENGINE_USER_MODE
85
86#ifdef SCRIPT_ENGINE_KERNEL_MODE
87 MemoryMapperReadMemorySafeOnTargetProcess((UINT64)Address, &Result, sizeof(UINT64));
88#endif // SCRIPT_ENGINE_KERNEL_MODE
89
90 return HIWORD(Result);
91}
#define NULL64_ZERO
Definition BasicTypes.h:111
#define HIWORD(l)
Definition Constants.h:557

◆ ScriptEngineKeywordHiPa()

WORD ScriptEngineKeywordHiPa ( PUINT64 Address,
BOOL * HasError )

Implementation of hi keyword.

Parameters
Address
HasError
Returns
WORD
315{
316 QWORD Result = NULL64_ZERO;
317
318#ifdef SCRIPT_ENGINE_KERNEL_MODE
319
320 if (!CheckAddressPhysical((UINT64)Address))
321 {
322 *HasError = TRUE;
323
324 return NULL64_ZERO;
325 }
326
327#endif // SCRIPT_ENGINE_KERNEL_MODE
328
329#ifdef SCRIPT_ENGINE_USER_MODE
330
331 ShowMessages("err, using physical address keywords (hi_pa) is not possible in user-mode\n");
332 return (WORD)NULL;
333
334#endif // SCRIPT_ENGINE_USER_MODE
335
336#ifdef SCRIPT_ENGINE_KERNEL_MODE
337 MemoryMapperReadMemorySafeByPhysicalAddress((UINT64)Address, (UINT64)&Result, sizeof(UINT64));
338#endif // SCRIPT_ENGINE_KERNEL_MODE
339
340 return HIWORD(Result);
341}

◆ ScriptEngineKeywordLow()

WORD ScriptEngineKeywordLow ( PUINT64 Address,
BOOL * HasError )

Implementation of low keyword.

Parameters
Address
HasError
Returns
WORD
102{
103 QWORD Result = NULL64_ZERO;
104
105#ifdef SCRIPT_ENGINE_KERNEL_MODE
106
107 if (!CheckAccessValidityAndSafety((UINT64)Address, sizeof(UINT64)))
108 {
109 *HasError = TRUE;
110
111 return NULL64_ZERO;
112 }
113
114#endif // SCRIPT_ENGINE_KERNEL_MODE
115
116#ifdef SCRIPT_ENGINE_USER_MODE
117 Result = *Address;
118#endif // SCRIPT_ENGINE_USER_MODE
119
120#ifdef SCRIPT_ENGINE_KERNEL_MODE
121 MemoryMapperReadMemorySafeOnTargetProcess((UINT64)Address, &Result, sizeof(UINT64));
122#endif // SCRIPT_ENGINE_KERNEL_MODE
123
124 return LOWORD(Result);
125}
#define LOWORD(l)
Definition Constants.h:553

◆ ScriptEngineKeywordLowPa()

WORD ScriptEngineKeywordLowPa ( PUINT64 Address,
BOOL * HasError )

Implementation of low keyword.

Parameters
Address
HasError
Returns
WORD
352{
353 QWORD Result = NULL64_ZERO;
354
355#ifdef SCRIPT_ENGINE_KERNEL_MODE
356
357 if (!CheckAddressPhysical((UINT64)Address))
358 {
359 *HasError = TRUE;
360
361 return NULL64_ZERO;
362 }
363
364#endif // SCRIPT_ENGINE_KERNEL_MODE
365
366#ifdef SCRIPT_ENGINE_USER_MODE
367
368 ShowMessages("err, using physical address keywords (low_pa) is not possible in user-mode\n");
369 return (WORD)NULL;
370
371#endif // SCRIPT_ENGINE_USER_MODE
372
373#ifdef SCRIPT_ENGINE_KERNEL_MODE
374 MemoryMapperReadMemorySafeByPhysicalAddress((UINT64)Address, (UINT64)&Result, sizeof(UINT64));
375#endif // SCRIPT_ENGINE_KERNEL_MODE
376
377 return LOWORD(Result);
378}

◆ ScriptEngineKeywordPoi()

UINT64 ScriptEngineKeywordPoi ( PUINT64 Address,
BOOL * HasError )

Implementation of poi keyword.

Parameters
Address
HasError
Returns
UINT64
34{
35 UINT64 Result = (UINT64)NULL;
36
37#ifdef SCRIPT_ENGINE_KERNEL_MODE
38
39 if (!CheckAccessValidityAndSafety((UINT64)Address, sizeof(UINT64)))
40 {
41 *HasError = TRUE;
42
43 return (UINT64)NULL;
44 }
45
46#endif // SCRIPT_ENGINE_KERNEL_MODE
47
48#ifdef SCRIPT_ENGINE_USER_MODE
49 Result = *Address;
50#endif // SCRIPT_ENGINE_USER_MODE
51
52#ifdef SCRIPT_ENGINE_KERNEL_MODE
53 MemoryMapperReadMemorySafeOnTargetProcess((UINT64)Address, &Result, sizeof(UINT64));
54#endif // SCRIPT_ENGINE_KERNEL_MODE
55
56 return Result;
57}

◆ ScriptEngineKeywordPoiPa()

UINT64 ScriptEngineKeywordPoiPa ( PUINT64 Address,
BOOL * HasError )

Implementation of poi_pa keyword.

Parameters
Address
HasError
Returns
UINT64
278{
279 UINT64 Result = (UINT64)NULL;
280
281#ifdef SCRIPT_ENGINE_KERNEL_MODE
282
283 if (!CheckAddressPhysical((UINT64)Address))
284 {
285 *HasError = TRUE;
286
287 return (UINT64)NULL;
288 }
289
290#endif // SCRIPT_ENGINE_KERNEL_MODE
291
292#ifdef SCRIPT_ENGINE_USER_MODE
293
294 ShowMessages("err, using physical address keywords (poi_pa) is not possible in user-mode\n");
295 return (UINT64)NULL;
296
297#endif // SCRIPT_ENGINE_USER_MODE
298
299#ifdef SCRIPT_ENGINE_KERNEL_MODE
300 MemoryMapperReadMemorySafeByPhysicalAddress((UINT64)Address, (UINT64)&Result, sizeof(UINT64));
301#endif // SCRIPT_ENGINE_KERNEL_MODE
302
303 return Result;
304}