Walkthrough the stack.
29{
34
35 if (Size == 0)
36 {
38 }
39
40 if (Is32Bit)
41 {
42
43
44
45 AddressMode =
sizeof(
UINT32);
46 FrameIndex = Size / AddressMode;
47 }
48 else
49 {
50
51
52
53 AddressMode =
sizeof(
UINT64);
54 FrameIndex = Size / AddressMode;
55 }
56
57
58
59
60 for (size_t i = 0; i < FrameIndex; i++)
61 {
62
63
64
65 CurrentStackAddress = StackBaseAddress + (i * AddressMode);
66
68 {
70
71
72
73
75 }
76
77
78
79
81
82
83
84
86
87
88
89
91
92
93
94
95
96
97
98
99
101 {
102
103
104
106
107
108
109
111
112
113
114
116 AddressToSaveFrames[i].InstructionBytesOnRip,
118 }
119 }
120
121
122
123
125}
BOOLEAN CheckAccessValidityAndSafety(UINT64 TargetAddress, UINT32 Size)
Check the safety to access the memory.
Definition AddressCheck.c:156
unsigned short UINT16
Definition BasicTypes.h:47
#define TRUE
Definition BasicTypes.h:55
#define FALSE
Definition BasicTypes.h:54
unsigned __int64 UINT64
Definition BasicTypes.h:21
unsigned int UINT32
Definition BasicTypes.h:48
#define MAXIMUM_CALL_INSTR_SIZE
maximum size for call instruction in Intel
Definition Constants.h:473
_Use_decl_annotations_ BOOLEAN MemoryMapperReadMemorySafeOnTargetProcess(UINT64 VaAddressToRead, PVOID BufferToSaveMemory, SIZE_T SizeToRead)
Read memory safely by mapping the buffer on the target process memory (It's a wrapper)
Definition MemoryMapper.c:1120
_Use_decl_annotations_ BOOLEAN MemoryMapperCheckIfPageIsNxBitSetOnTargetProcess(PVOID Va)
This function checks target process to see if the page has NX bit or not.
Definition MemoryMapper.c:475
RequestedActionOfThePacket Value(0x1) 00000000
BOOLEAN IsExecutable
Definition RequestStructures.h:764
BOOLEAN IsStackAddressValid
Definition RequestStructures.h:762
UINT64 Value
Definition RequestStructures.h:765
BOOLEAN IsValidAddress
Definition RequestStructures.h:763