forked from emilytouchingcomputers/CTFium
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathchallenge.patch
232 lines (226 loc) · 11.1 KB
/
challenge.patch
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
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
diff --git a/bin/ChakraCore/CMakeLists.txt b/bin/ChakraCore/CMakeLists.txt
index f4ec551..57d53d9 100644
--- a/bin/ChakraCore/CMakeLists.txt
+++ b/bin/ChakraCore/CMakeLists.txt
@@ -50,6 +50,7 @@ set(lib_target "${lib_target}"
${LINKER_END_GROUP}
pthread
dl
+ "-z noexecstack"
)
if(CC_TARGET_OS_ANDROID OR CC_TARGET_OS_LINUX)
diff --git a/bin/ch/CMakeLists.txt b/bin/ch/CMakeLists.txt
index 7e495f2..ef03dfb 100644
--- a/bin/ch/CMakeLists.txt
+++ b/bin/ch/CMakeLists.txt
@@ -84,6 +84,9 @@ else() # // shared library below
if(CC_TARGET_OS_ANDROID OR CC_TARGET_OS_LINUX)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pie") # osx clang sets this by default
+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -z relro")
+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -z now")
+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -z noexecstack")
endif()
set(lib_target
diff --git a/bin/ch/WScriptJsrt.cpp b/bin/ch/WScriptJsrt.cpp
index 5b6e2d8..6bfb08d 100644
--- a/bin/ch/WScriptJsrt.cpp
+++ b/bin/ch/WScriptJsrt.cpp
@@ -1081,145 +1081,8 @@ bool WScriptJsrt::Initialize()
{
HRESULT hr = S_OK;
char CH_BINARY_LOCATION[2048];
-#ifdef CHAKRA_STATIC_LIBRARY
- const char* LINK_TYPE = "static";
-#else
- const char* LINK_TYPE = "shared";
-#endif
-#ifdef HAS_ICU
- int icuVersion = PlatformAgnostic::ICUHelpers::GetICUMajorVersion();
-#else
- int icuVersion = -1;
-#endif
-
- JsValueRef wscript;
- IfJsrtErrorFail(ChakraRTInterface::JsCreateObject(&wscript), false);
-
- IfFalseGo(WScriptJsrt::InstallObjectsOnObject(wscript, "Echo", EchoCallback));
- IfFalseGo(WScriptJsrt::InstallObjectsOnObject(wscript, "Quit", QuitCallback));
- IfFalseGo(WScriptJsrt::InstallObjectsOnObject(wscript, "LoadScriptFile", LoadScriptFileCallback));
- IfFalseGo(WScriptJsrt::InstallObjectsOnObject(wscript, "LoadScript", LoadScriptCallback));
- IfFalseGo(WScriptJsrt::InstallObjectsOnObject(wscript, "LoadModule", LoadModuleCallback));
- IfFalseGo(WScriptJsrt::InstallObjectsOnObject(wscript, "SetTimeout", SetTimeoutCallback));
- IfFalseGo(WScriptJsrt::InstallObjectsOnObject(wscript, "ClearTimeout", ClearTimeoutCallback));
- IfFalseGo(WScriptJsrt::InstallObjectsOnObject(wscript, "Attach", AttachCallback));
- IfFalseGo(WScriptJsrt::InstallObjectsOnObject(wscript, "Detach", DetachCallback));
- IfFalseGo(WScriptJsrt::InstallObjectsOnObject(wscript, "DumpFunctionPosition", DumpFunctionPositionCallback));
- IfFalseGo(WScriptJsrt::InstallObjectsOnObject(wscript, "RequestAsyncBreak", RequestAsyncBreakCallback));
- IfFalseGo(WScriptJsrt::InstallObjectsOnObject(wscript, "LoadBinaryFile", LoadBinaryFileCallback));
- IfFalseGo(WScriptJsrt::InstallObjectsOnObject(wscript, "LoadTextFile", LoadTextFileCallback));
- IfFalseGo(WScriptJsrt::InstallObjectsOnObject(wscript, "Flag", FlagCallback));
- IfFalseGo(WScriptJsrt::InstallObjectsOnObject(wscript, "RegisterModuleSource", RegisterModuleSourceCallback));
- IfFalseGo(WScriptJsrt::InstallObjectsOnObject(wscript, "GetModuleNamespace", GetModuleNamespace));
- IfFalseGo(WScriptJsrt::InstallObjectsOnObject(wscript, "GetProxyProperties", GetProxyPropertiesCallback));
-
- IfFalseGo(WScriptJsrt::InstallObjectsOnObject(wscript, "SerializeObject", SerializeObject));
- IfFalseGo(WScriptJsrt::InstallObjectsOnObject(wscript, "Deserialize", Deserialize));
-
- // ToDo Remove
- IfFalseGo(WScriptJsrt::InstallObjectsOnObject(wscript, "Edit", EmptyCallback));
-
- // Platform
- JsValueRef platformObject;
- IfJsrtErrorFail(ChakraRTInterface::JsCreateObject(&platformObject), false);
- JsPropertyIdRef platformProperty;
- IfJsrtErrorFail(CreatePropertyIdFromString("Platform", &platformProperty), false);
-
- // Set CPU arch
- JsPropertyIdRef archProperty;
- IfJsrtErrorFail(CreatePropertyIdFromString("ARCH", &archProperty), false);
- JsValueRef archValue;
- IfJsrtErrorFail(ChakraRTInterface::JsCreateString(
- CPU_ARCH_TEXT, strlen(CPU_ARCH_TEXT), &archValue), false);
- IfJsrtErrorFail(ChakraRTInterface::JsSetProperty(platformObject, archProperty,
- archValue, true), false);
-
- // Set Build Type
- JsPropertyIdRef buildProperty;
- IfJsrtErrorFail(CreatePropertyIdFromString("BUILD_TYPE", &buildProperty), false);
- JsValueRef buildValue;
-#ifdef _DEBUG
-#define BUILD_TYPE_STRING_CH "Debug" // (O0)
-#elif defined(ENABLE_DEBUG_CONFIG_OPTIONS)
-#define BUILD_TYPE_STRING_CH "Test" // (O3 with debug config options)
-#else
-#define BUILD_TYPE_STRING_CH "Release" // (O3)
-#endif
- IfJsrtErrorFail(ChakraRTInterface::JsCreateString(
- BUILD_TYPE_STRING_CH, strlen(BUILD_TYPE_STRING_CH), &buildValue), false);
- IfJsrtErrorFail(ChakraRTInterface::JsSetProperty(platformObject, buildProperty,
- buildValue, true), false);
-#undef BUILD_TYPE_STRING_CH
-
- // Set Link Type [static / shared]
- JsPropertyIdRef linkProperty;
- IfJsrtErrorFail(CreatePropertyIdFromString("LINK_TYPE", &linkProperty), false);
- JsValueRef linkValue;
- IfJsrtErrorFail(ChakraRTInterface::JsCreateString(
- LINK_TYPE, strlen(LINK_TYPE), &linkValue), false);
- IfJsrtErrorFail(ChakraRTInterface::JsSetProperty(platformObject, linkProperty,
- linkValue, true), false);
-
- // Set Binary Location
- JsValueRef binaryPathValue;
- PlatformAgnostic::SystemInfo::GetBinaryLocation(CH_BINARY_LOCATION, sizeof(CH_BINARY_LOCATION));
-
- JsPropertyIdRef binaryPathProperty;
- IfJsrtErrorFail(CreatePropertyIdFromString("BINARY_PATH", &binaryPathProperty), false);
-
- IfJsrtErrorFail(ChakraRTInterface::JsCreateString(
- CH_BINARY_LOCATION,
- strlen(CH_BINARY_LOCATION), &binaryPathValue), false);
- IfJsrtErrorFail(ChakraRTInterface::JsSetProperty(
- platformObject, binaryPathProperty, binaryPathValue, true), false);
-
- // Set destination OS
- JsPropertyIdRef osProperty;
- IfJsrtErrorFail(CreatePropertyIdFromString("OS", &osProperty), false);
- JsValueRef osValue;
- IfJsrtErrorFail(ChakraRTInterface::JsCreateString(
- DEST_PLATFORM_TEXT, strlen(DEST_PLATFORM_TEXT), &osValue), false);
- IfJsrtErrorFail(ChakraRTInterface::JsSetProperty(platformObject, osProperty,
- osValue, true), false);
-
- // set Internationalization library
- JsPropertyIdRef intlLibraryProp;
- IfJsrtErrorFail(CreatePropertyIdFromString("INTL_LIBRARY", &intlLibraryProp), false);
- JsValueRef intlLibraryStr;
- IfJsrtErrorFail(ChakraRTInterface::JsCreateString(INTL_LIBRARY_TEXT, strlen(INTL_LIBRARY_TEXT), &intlLibraryStr), false);
- IfJsrtErrorFail(ChakraRTInterface::JsSetProperty(platformObject, intlLibraryProp, intlLibraryStr, true), false);
- JsPropertyIdRef icuVersionProp;
- IfJsrtErrorFail(CreatePropertyIdFromString("ICU_VERSION", &icuVersionProp), false);
- JsValueRef icuVersionNum;
- IfJsrtErrorFail(ChakraRTInterface::JsIntToNumber(icuVersion, &icuVersionNum), false);
- IfJsrtErrorFail(ChakraRTInterface::JsSetProperty(platformObject, icuVersionProp, icuVersionNum, true), false);
-
- IfJsrtErrorFail(ChakraRTInterface::JsSetProperty(wscript, platformProperty,
- platformObject, true), false);
-
- JsValueRef argsObject;
-
- if (!CreateArgumentsObject(&argsObject))
- {
- return false;
- }
-
- JsPropertyIdRef argsName;
- IfJsrtErrorFail(CreatePropertyIdFromString("Arguments", &argsName), false);
- IfJsrtErrorFail(ChakraRTInterface::JsSetProperty(wscript, argsName, argsObject, true), false);
-
- JsPropertyIdRef wscriptName;
- IfJsrtErrorFail(CreatePropertyIdFromString("WScript", &wscriptName), false);
-
JsValueRef global;
IfJsrtErrorFail(ChakraRTInterface::JsGetGlobalObject(&global), false);
- IfJsrtErrorFail(ChakraRTInterface::JsSetProperty(global, wscriptName, wscript, true), false);
-
- IfFalseGo(WScriptJsrt::InstallObjectsOnObject(global, "print", EchoCallback));
-
- IfFalseGo(WScriptJsrt::InstallObjectsOnObject(global, "read", LoadTextFileCallback));
- IfFalseGo(WScriptJsrt::InstallObjectsOnObject(global, "readbuffer", LoadBinaryFileCallback));
- IfFalseGo(WScriptJsrt::InstallObjectsOnObject(global, "readline", ReadLineStdinCallback));
JsValueRef console;
IfJsrtErrorFail(ChakraRTInterface::JsCreateObject(&console), false);
@@ -1231,31 +1094,7 @@ bool WScriptJsrt::Initialize()
IfJsrtErrorFail(InitializeModuleCallbacks(), false);
- // When the command-line argument `-Test262` is set,
- // WScript will have the extra support API below and $262 will be
- // added to global scope
- if (HostConfigFlags::flags.Test262)
- {
- IfFalseGo(WScriptJsrt::InstallObjectsOnObject(wscript, "Broadcast", BroadcastCallback));
- IfFalseGo(WScriptJsrt::InstallObjectsOnObject(wscript, "ReceiveBroadcast", ReceiveBroadcastCallback));
- IfFalseGo(WScriptJsrt::InstallObjectsOnObject(wscript, "Report", ReportCallback));
- IfFalseGo(WScriptJsrt::InstallObjectsOnObject(wscript, "GetReport", GetReportCallback));
- IfFalseGo(WScriptJsrt::InstallObjectsOnObject(wscript, "Leaving", LeavingCallback));
- IfFalseGo(WScriptJsrt::InstallObjectsOnObject(wscript, "Sleep", SleepCallback));
-
- // $262
- const char Test262[] =
- #include "262.js"
- ;
-
- JsValueRef Test262ScriptRef;
- IfJsrtErrorFailLogAndRetFalse(ChakraRTInterface::JsCreateString(Test262, strlen(Test262), &Test262ScriptRef));
-
- JsValueRef fname;
- IfJsrtErrorFailLogAndRetFalse(ChakraRTInterface::JsCreateString("262", strlen("262"), &fname));
- IfJsrtErrorFailLogAndRetFalse(ChakraRTInterface::JsRun(Test262ScriptRef, WScriptJsrt::GetNextSourceContext(), fname, JsParseScriptAttributeNone, nullptr));
- }
-
+
Error:
return hr == S_OK;
}
diff --git a/lib/Runtime/Language/InterpreterStackFrame.cpp b/lib/Runtime/Language/InterpreterStackFrame.cpp
index 9839571..1d6addb 100644
--- a/lib/Runtime/Language/InterpreterStackFrame.cpp
+++ b/lib/Runtime/Language/InterpreterStackFrame.cpp
@@ -2018,12 +2018,12 @@ namespace Js
varSizeInBytes = varAllocCount * sizeof(Var);
allocation = (Var*)tmpAlloc->Alloc(varSizeInBytes);
stackAddr = reinterpret_cast<DWORD_PTR>(&allocation); // use a stack address so the debugger stepping logic works (step-out, for example, compares stack depths to determine when to complete the step)
- if (stackVarAllocCount != 0)
- {
- size_t stackVarSizeInBytes = stackVarAllocCount * sizeof(Var);
- PROBE_STACK_PARTIAL_INITIALIZED_INTERPRETER_FRAME(functionScriptContext, Js::Constants::MinStackInterpreter + stackVarSizeInBytes);
- stackAllocation = (Var*)_alloca(stackVarSizeInBytes);
- }
+ //if (stackVarAllocCount != 0)
+ //{
+ // size_t stackVarSizeInBytes = stackVarAllocCount * sizeof(Var);
+ // PROBE_STACK_PARTIAL_INITIALIZED_INTERPRETER_FRAME(functionScriptContext, Js::Constants::MinStackInterpreter + stackVarSizeInBytes);
+ // stackAllocation = (Var*)_alloca(stackVarSizeInBytes);
+ //}
}
else
{