@@ -179,4 +179,61 @@ SCRIPT_EXPORT bool Script::Module::GetList(ListOf(ModuleInfo) list)
179
179
modScriptList.push_back (scriptMod);
180
180
});
181
181
return BridgeList<ModuleInfo>::CopyData (list, modScriptList);
182
- }
182
+ }
183
+
184
+ SCRIPT_EXPORT bool Script::Module::GetExports (const ModuleInfo* mod, ListOf(ModuleExport) list)
185
+ {
186
+ SHARED_ACQUIRE (LockModules);
187
+
188
+ if (mod == nullptr )
189
+ return false ;
190
+
191
+ MODINFO* modInfo = ModInfoFromAddr (mod->base );
192
+ if (modInfo == nullptr )
193
+ return false ;
194
+
195
+ std::vector<ModuleExport> modExportList;
196
+ modExportList.reserve (modInfo->exports .size ());
197
+
198
+ for (auto & modExport : modInfo->exports )
199
+ {
200
+ ModuleExport entry;
201
+ entry.ordinal = modExport.ordinal ;
202
+ entry.rva = modExport.rva ;
203
+ entry.va = modExport.rva + modInfo->base ;
204
+ entry.forwarded = modExport.forwarded ;
205
+ strncpy_s (entry.forwardName , modExport.forwardName .c_str (), _TRUNCATE);
206
+ strncpy_s (entry.name , modExport.name .c_str (), _TRUNCATE);
207
+ strncpy_s (entry.undecoratedName , modExport.undecoratedName .c_str (), _TRUNCATE);
208
+ modExportList.push_back (entry);
209
+ }
210
+ return BridgeList<ModuleExport>::CopyData (list, modExportList);
211
+ }
212
+
213
+
214
+ SCRIPT_EXPORT bool Script::Module::GetImports (const ModuleInfo* mod, ListOf(ModuleImport) list)
215
+ {
216
+ SHARED_ACQUIRE (LockModules);
217
+
218
+ if (mod == nullptr )
219
+ return false ;
220
+
221
+ MODINFO* modInfo = ModInfoFromAddr (mod->base );
222
+ if (modInfo == nullptr )
223
+ return false ;
224
+
225
+ std::vector<ModuleImport> modImportList;
226
+ modImportList.reserve (modInfo->imports .size ());
227
+
228
+ for (auto & modImport : modInfo->imports )
229
+ {
230
+ ModuleImport entry;
231
+ entry.ordinal = modImport.ordinal ;
232
+ entry.iatRva = modImport.iatRva ;
233
+ entry.iatVa = modImport.iatRva + modInfo->base ;
234
+ strncpy_s (entry.name , modImport.name .c_str (), _TRUNCATE);
235
+ strncpy_s (entry.undecoratedName , modImport.undecoratedName .c_str (), _TRUNCATE);
236
+ modImportList.push_back (entry);
237
+ }
238
+ return BridgeList<ModuleImport>::CopyData (list, modImportList);
239
+ }
0 commit comments