JwaImageHlp.pas
上传用户:davidchvip
上传日期:2009-07-28
资源大小:1749k
文件大小:143k
源码类别:

Windows编程

开发平台:

Delphi

  1. //
  2. const
  3.   MINIDUMP_MISC1_PROCESS_ID    = $00000001;
  4.   {$EXTERNALSYM MINIDUMP_MISC1_PROCESS_ID}
  5.   MINIDUMP_MISC1_PROCESS_TIMES = $00000002;
  6.   {$EXTERNALSYM MINIDUMP_MISC1_PROCESS_TIMES}
  7. type
  8.   _MINIDUMP_MISC_INFO = record
  9.     SizeOfInfo: ULONG32;
  10.     Flags1: ULONG32;
  11.     ProcessId: ULONG32;
  12.     ProcessCreateTime: ULONG32;
  13.     ProcessUserTime: ULONG32;
  14.     ProcessKernelTime: ULONG32;
  15.   end;
  16.   {$EXTERNALSYM _MINIDUMP_MISC_INFO}
  17.   MINIDUMP_MISC_INFO = _MINIDUMP_MISC_INFO;
  18.   {$EXTERNALSYM MINIDUMP_MISC_INFO}
  19.   PMINIDUMP_MISC_INFO = ^MINIDUMP_MISC_INFO;
  20.   {$EXTERNALSYM PMINIDUMP_MISC_INFO}
  21.   TMiniDumpMiscInfo = MINIDUMP_MISC_INFO;
  22.   PMiniDumpMiscInfo = PMINIDUMP_MISC_INFO;
  23. //
  24. // Support for arbitrary user-defined information.
  25. //
  26.   PMINIDUMP_USER_RECORD = ^MINIDUMP_USER_RECORD;
  27.   {$EXTERNALSYM PMINIDUMP_USER_RECORD}
  28.   _MINIDUMP_USER_RECORD = record
  29.     Type_: ULONG32;
  30.     Memory: MINIDUMP_LOCATION_DESCRIPTOR;
  31.   end;
  32.   {$EXTERNALSYM _MINIDUMP_USER_RECORD}
  33.   MINIDUMP_USER_RECORD = _MINIDUMP_USER_RECORD;
  34.   {$EXTERNALSYM MINIDUMP_USER_RECORD}
  35.   TMinidumpUserRecord = MINIDUMP_USER_RECORD;
  36.   PMinidumpUserRecord = PMINIDUMP_USER_RECORD;
  37.   PMINIDUMP_USER_STREAM = ^MINIDUMP_USER_STREAM;
  38.   {$EXTERNALSYM PMINIDUMP_USER_STREAM}
  39.   _MINIDUMP_USER_STREAM = record
  40.     Type_: ULONG32;
  41.     BufferSize: ULONG;
  42.     Buffer: PVOID;
  43.   end;
  44.   {$EXTERNALSYM _MINIDUMP_USER_STREAM}
  45.   MINIDUMP_USER_STREAM = _MINIDUMP_USER_STREAM;
  46.   {$EXTERNALSYM MINIDUMP_USER_STREAM}
  47.   TMinidumpUserStream = MINIDUMP_USER_STREAM;
  48.   PMinidumpUserStream = PMINIDUMP_USER_STREAM;
  49.   PMINIDUMP_USER_STREAM_INFORMATION = ^MINIDUMP_USER_STREAM_INFORMATION;
  50.   {$EXTERNALSYM PMINIDUMP_USER_STREAM_INFORMATION}
  51.   _MINIDUMP_USER_STREAM_INFORMATION = record
  52.     UserStreamCount: ULONG;
  53.     UserStreamArray: PMINIDUMP_USER_STREAM;
  54.   end;
  55.   {$EXTERNALSYM _MINIDUMP_USER_STREAM_INFORMATION}
  56.   MINIDUMP_USER_STREAM_INFORMATION = _MINIDUMP_USER_STREAM_INFORMATION;
  57.   {$EXTERNALSYM MINIDUMP_USER_STREAM_INFORMATION}
  58.   TMinidumpUserStreamInformation = MINIDUMP_USER_STREAM_INFORMATION;
  59.   PMinidumpUserStreamInformation = PMINIDUMP_USER_STREAM_INFORMATION;
  60. //
  61. // Callback support.
  62. //
  63.   _MINIDUMP_CALLBACK_TYPE = (
  64.     ModuleCallback,
  65.     ThreadCallback,
  66.     ThreadExCallback,
  67.     IncludeThreadCallback,
  68.     IncludeModuleCallback);
  69.   {$EXTERNALSYM _MINIDUMP_CALLBACK_TYPE}
  70.   MINIDUMP_CALLBACK_TYPE = _MINIDUMP_CALLBACK_TYPE;
  71.   {$EXTERNALSYM MINIDUMP_CALLBACK_TYPE}
  72.   TMinidumpCallbackType = MINIDUMP_CALLBACK_TYPE;
  73.   PMINIDUMP_THREAD_CALLBACK = ^MINIDUMP_THREAD_CALLBACK;
  74.   {$EXTERNALSYM PMINIDUMP_THREAD_CALLBACK}
  75.   _MINIDUMP_THREAD_CALLBACK = record
  76.     ThreadId: ULONG;
  77.     ThreadHandle: HANDLE;
  78.     Context: CONTEXT;
  79.     SizeOfContext: ULONG;
  80.     StackBase: ULONG64;
  81.     StackEnd: ULONG64;
  82.   end;
  83.   {$EXTERNALSYM _MINIDUMP_THREAD_CALLBACK}
  84.   MINIDUMP_THREAD_CALLBACK = _MINIDUMP_THREAD_CALLBACK;
  85.   {$EXTERNALSYM MINIDUMP_THREAD_CALLBACK}
  86.   TMinidumpThreadCallback = MINIDUMP_THREAD_CALLBACK;
  87.   PMinidumpThreadCallback = PMINIDUMP_THREAD_CALLBACK;
  88.   PMINIDUMP_THREAD_EX_CALLBACK = ^MINIDUMP_THREAD_EX_CALLBACK;
  89.   {$EXTERNALSYM PMINIDUMP_THREAD_EX_CALLBACK}
  90.   _MINIDUMP_THREAD_EX_CALLBACK = record
  91.     ThreadId: ULONG;
  92.     ThreadHandle: HANDLE;
  93.     Context: CONTEXT;
  94.     SizeOfContext: ULONG;
  95.     StackBase: ULONG64;
  96.     StackEnd: ULONG64;
  97.     BackingStoreBase: ULONG64;
  98.     BackingStoreEnd: ULONG64;
  99.   end;
  100.   {$EXTERNALSYM _MINIDUMP_THREAD_EX_CALLBACK}
  101.   MINIDUMP_THREAD_EX_CALLBACK = _MINIDUMP_THREAD_EX_CALLBACK;
  102.   {$EXTERNALSYM MINIDUMP_THREAD_EX_CALLBACK}
  103.   TMinidumpThreadExCallback = MINIDUMP_THREAD_EX_CALLBACK;
  104.   PMinidumpThreadExCallback = PMINIDUMP_THREAD_EX_CALLBACK;
  105.   PMINIDUMP_INCLUDE_THREAD_CALLBACK = ^MINIDUMP_INCLUDE_THREAD_CALLBACK;
  106.   {$EXTERNALSYM PMINIDUMP_INCLUDE_THREAD_CALLBACK}
  107.   _MINIDUMP_INCLUDE_THREAD_CALLBACK = record
  108.     ThreadId: ULONG;
  109.   end;
  110.   {$EXTERNALSYM _MINIDUMP_INCLUDE_THREAD_CALLBACK}
  111.   MINIDUMP_INCLUDE_THREAD_CALLBACK = _MINIDUMP_INCLUDE_THREAD_CALLBACK;
  112.   {$EXTERNALSYM MINIDUMP_INCLUDE_THREAD_CALLBACK}
  113.   TMinidumpIncludeThreadCallback = MINIDUMP_INCLUDE_THREAD_CALLBACK;
  114.   PMinidumpIncludeThreadCallback = PMINIDUMP_INCLUDE_THREAD_CALLBACK;
  115. const
  116.   ThreadWriteThread            = $0001;
  117.   {$EXTERNALSYM ThreadWriteThread}
  118.   ThreadWriteStack             = $0002;
  119.   {$EXTERNALSYM ThreadWriteStack}
  120.   ThreadWriteContext           = $0004;
  121.   {$EXTERNALSYM ThreadWriteContext}
  122.   ThreadWriteBackingStore      = $0008;
  123.   {$EXTERNALSYM ThreadWriteBackingStore}
  124.   ThreadWriteInstructionWindow = $0010;
  125.   {$EXTERNALSYM ThreadWriteInstructionWindow}
  126.   ThreadWriteThreadData        = $0020;
  127.   {$EXTERNALSYM ThreadWriteThreadData}
  128. type
  129.   _THREAD_WRITE_FLAGS = DWORD;
  130.   {$EXTERNALSYM _THREAD_WRITE_FLAGS}
  131.   THREAD_WRITE_FLAGS = _THREAD_WRITE_FLAGS;
  132.   {$EXTERNALSYM THREAD_WRITE_FLAGS}
  133.   TThreadWriteFlags = THREAD_WRITE_FLAGS;
  134. type
  135.   PMINIDUMP_MODULE_CALLBACK = ^MINIDUMP_MODULE_CALLBACK;
  136.   {$EXTERNALSYM PMINIDUMP_MODULE_CALLBACK}
  137.   _MINIDUMP_MODULE_CALLBACK = record
  138.     FullPath: PWCHAR;
  139.     BaseOfImage: ULONG64;
  140.     SizeOfImage: ULONG;
  141.     CheckSum: ULONG;
  142.     TimeDateStamp: ULONG;
  143.     VersionInfo: VS_FIXEDFILEINFO;
  144.     CvRecord: PVOID;
  145.     SizeOfCvRecord: ULONG;
  146.     MiscRecord: PVOID;
  147.     SizeOfMiscRecord: ULONG;
  148.   end;
  149.   {$EXTERNALSYM _MINIDUMP_MODULE_CALLBACK}
  150.   MINIDUMP_MODULE_CALLBACK = _MINIDUMP_MODULE_CALLBACK;
  151.   {$EXTERNALSYM MINIDUMP_MODULE_CALLBACK}
  152.   TMinidumpModuleCallback = MINIDUMP_MODULE_CALLBACK;
  153.   PMinidumpModuleCallback = PMINIDUMP_MODULE_CALLBACK;
  154.   PMINIDUMP_INCLUDE_MODULE_CALLBACK = ^MINIDUMP_INCLUDE_MODULE_CALLBACK;
  155.   {$EXTERNALSYM PMINIDUMP_INCLUDE_MODULE_CALLBACK}
  156.   _MINIDUMP_INCLUDE_MODULE_CALLBACK = record
  157.     BaseOfImage: ULONG64;
  158.   end;
  159.   {$EXTERNALSYM _MINIDUMP_INCLUDE_MODULE_CALLBACK}
  160.   MINIDUMP_INCLUDE_MODULE_CALLBACK = _MINIDUMP_INCLUDE_MODULE_CALLBACK;
  161.   {$EXTERNALSYM MINIDUMP_INCLUDE_MODULE_CALLBACK}
  162.   TMinidumpIncludeModuleCallback = MINIDUMP_INCLUDE_MODULE_CALLBACK;
  163.   PMinidumpIncludeModuleCallback = PMINIDUMP_INCLUDE_MODULE_CALLBACK;
  164. const
  165.   ModuleWriteModule        = $0001;
  166.   {$EXTERNALSYM ModuleWriteModule}
  167.   ModuleWriteDataSeg       = $0002;
  168.   {$EXTERNALSYM ModuleWriteDataSeg}
  169.   ModuleWriteMiscRecord    = $0004;
  170.   {$EXTERNALSYM ModuleWriteMiscRecord}
  171.   ModuleWriteCvRecord      = $0008;
  172.   {$EXTERNALSYM ModuleWriteCvRecord}
  173.   ModuleReferencedByMemory = $0010;
  174.   {$EXTERNALSYM ModuleReferencedByMemory}
  175. type
  176.   _MODULE_WRITE_FLAGS = DWORD;
  177.   {$EXTERNALSYM _MODULE_WRITE_FLAGS}
  178.   MODULE_WRITE_FLAGS = _MODULE_WRITE_FLAGS;
  179.   {$EXTERNALSYM MODULE_WRITE_FLAGS}
  180.   TModuleWriteFlags = MODULE_WRITE_FLAGS;
  181.   _MINIDUMP_CALLBACK_INPUT = record
  182.     ProcessId: ULONG;
  183.     ProcessHandle: HANDLE;
  184.     CallbackType: ULONG;
  185.     case Integer of
  186.       0: (Thread: MINIDUMP_THREAD_CALLBACK);
  187.       1: (ThreadEx: MINIDUMP_THREAD_EX_CALLBACK);
  188.       2: (Module: MINIDUMP_MODULE_CALLBACK);
  189.       3: (IncludeThread: MINIDUMP_INCLUDE_THREAD_CALLBACK);
  190.       4: (IncludeModule: MINIDUMP_INCLUDE_MODULE_CALLBACK);
  191.   end;
  192.   {$EXTERNALSYM _MINIDUMP_CALLBACK_INPUT}
  193.   MINIDUMP_CALLBACK_INPUT = _MINIDUMP_CALLBACK_INPUT;
  194.   {$EXTERNALSYM MINIDUMP_CALLBACK_INPUT}
  195.   PMINIDUMP_CALLBACK_INPUT = ^MINIDUMP_CALLBACK_INPUT;
  196.   {$EXTERNALSYM PMINIDUMP_CALLBACK_INPUT}
  197.   TminidumpCallbackInput = MINIDUMP_CALLBACK_INPUT;
  198.   PMINIDUMP_CALLBACK_OUTPUT = ^MINIDUMP_CALLBACK_OUTPUT;
  199.   {$EXTERNALSYM PMINIDUMP_CALLBACK_OUTPUT}
  200.   _MINIDUMP_CALLBACK_OUTPUT = record
  201.     case Integer of
  202.       0: (ModuleWriteFlags: ULONG);
  203.       1: (ThreadWriteFlags: ULONG);
  204.   end;
  205.   {$EXTERNALSYM _MINIDUMP_CALLBACK_OUTPUT}
  206.   MINIDUMP_CALLBACK_OUTPUT = _MINIDUMP_CALLBACK_OUTPUT;
  207.   {$EXTERNALSYM MINIDUMP_CALLBACK_OUTPUT}
  208.   TMinidumpCallbackOutput = MINIDUMP_CALLBACK_OUTPUT;
  209.   PMinidumpCallbackOutput = PMINIDUMP_CALLBACK_OUTPUT;
  210. //
  211. // A normal minidump contains just the information
  212. // necessary to capture stack traces for all of the
  213. // existing threads in a process.
  214. //
  215. // A minidump with data segments includes all of the data
  216. // sections from loaded modules in order to capture
  217. // global variable contents.  This can make the dump much
  218. // larger if many modules have global data.
  219. //
  220. // A minidump with full memory includes all of the accessible
  221. // memory in the process and can be very large.  A minidump
  222. // with full memory always has the raw memory data at the end
  223. // of the dump so that the initial structures in the dump can
  224. // be mapped directly without having to include the raw
  225. // memory information.
  226. //
  227. // Stack and backing store memory can be filtered to remove
  228. // data unnecessary for stack walking.  This can improve
  229. // compression of stacks and also deletes data that may
  230. // be private and should not be stored in a dump.
  231. // Memory can also be scanned to see what modules are
  232. // referenced by stack and backing store memory to allow
  233. // omission of other modules to reduce dump size.
  234. // In either of these modes the ModuleReferencedByMemory flag
  235. // is set for all modules referenced before the base
  236. // module callbacks occur.
  237. //
  238. // On some operating systems a list of modules that were
  239. // recently unloaded is kept in addition to the currently
  240. // loaded module list.  This information can be saved in
  241. // the dump if desired.
  242. //
  243. // Stack and backing store memory can be scanned for referenced
  244. // pages in order to pick up data referenced by locals or other
  245. // stack memory.  This can increase the size of a dump significantly.
  246. //
  247. // Module paths may contain undesired information such as user names
  248. // or other important directory names so they can be stripped.  This
  249. // option reduces the ability to locate the proper image later
  250. // and should only be used in certain situations.
  251. //
  252. // Complete operating system per-process and per-thread information can
  253. // be gathered and stored in the dump.
  254. //
  255. // The virtual address space can be scanned for various types
  256. // of memory to be included in the dump.
  257. //
  258. const
  259.   MiniDumpNormal         = $0000;
  260.   {$EXTERNALSYM MiniDumpNormal}
  261.   MiniDumpWithDataSegs   = $0001;
  262.   {$EXTERNALSYM MiniDumpWithDataSegs}
  263.   MiniDumpWithFullMemory = $0002;
  264.   {$EXTERNALSYM MiniDumpWithFullMemory}
  265.   MiniDumpWithHandleData = $0004;
  266.   {$EXTERNALSYM MiniDumpWithHandleData}
  267.   MiniDumpFilterMemory   = $0008;
  268.   {$EXTERNALSYM MiniDumpFilterMemory}
  269.   MiniDumpScanMemory     = $0010;
  270.   {$EXTERNALSYM MiniDumpScanMemory}
  271.   MiniDumpWithUnloadedModules            = $0020;
  272.   {$EXTERNALSYM MiniDumpWithUnloadedModules}
  273.   MiniDumpWithIndirectlyReferencedMemory = $0040;
  274.   {$EXTERNALSYM MiniDumpWithIndirectlyReferencedMemory}
  275.   MiniDumpFilterModulePaths              = $0080;
  276.   {$EXTERNALSYM MiniDumpFilterModulePaths}
  277.   MiniDumpWithProcessThreadData          = $0100;
  278.   {$EXTERNALSYM MiniDumpWithProcessThreadData}
  279.   MiniDumpWithPrivateReadWriteMemory     = $0200;
  280.   {$EXTERNALSYM MiniDumpWithPrivateReadWriteMemory}
  281. type
  282.   _MINIDUMP_TYPE = DWORD;
  283.   {$EXTERNALSYM _MINIDUMP_TYPE}
  284.   MINIDUMP_TYPE = _MINIDUMP_TYPE;
  285.   {$EXTERNALSYM MINIDUMP_TYPE}
  286.   TMinidumpType = MINIDUMP_TYPE;
  287. //
  288. // The minidump callback should modify the FieldsToWrite parameter to reflect
  289. // what portions of the specified thread or module should be written to the
  290. // file.
  291. //
  292.   MINIDUMP_CALLBACK_ROUTINE = function (CallbackParam: PVOID; CallbackInput: PMINIDUMP_CALLBACK_INPUT;
  293.     CallbackOutput: PMINIDUMP_CALLBACK_OUTPUT): BOOL; stdcall;
  294.   {$EXTERNALSYM MINIDUMP_CALLBACK_ROUTINE}
  295.   TMinidumpCallbackRoutine = MINIDUMP_CALLBACK_ROUTINE;
  296.   PMINIDUMP_CALLBACK_INFORMATION = ^MINIDUMP_CALLBACK_INFORMATION;
  297.   {$EXTERNALSYM PMINIDUMP_CALLBACK_INFORMATION}
  298.   _MINIDUMP_CALLBACK_INFORMATION = record
  299.     CallbackRoutine: MINIDUMP_CALLBACK_ROUTINE;
  300.     CallbackParam: PVOID;
  301.   end;
  302.   {$EXTERNALSYM _MINIDUMP_CALLBACK_INFORMATION}
  303.   MINIDUMP_CALLBACK_INFORMATION = _MINIDUMP_CALLBACK_INFORMATION;
  304.   {$EXTERNALSYM MINIDUMP_CALLBACK_INFORMATION}
  305.   TMinidumpCallbackInformation = MINIDUMP_CALLBACK_INFORMATION;
  306.   PMinidumpCallbackInformation = PMINIDUMP_CALLBACK_INFORMATION;
  307. //++
  308. //
  309. // PVOID
  310. // RVA_TO_ADDR(
  311. //     PVOID Mapping,
  312. //     ULONG Rva
  313. //     )
  314. //
  315. // Routine Description:
  316. //
  317. //     Map an RVA that is contained within a mapped file to it's associated
  318. //     flat address.
  319. //
  320. // Arguments:
  321. //
  322. //     Mapping - Base address of mapped file containing the RVA.
  323. //
  324. //     Rva - An Rva to fixup.
  325. //
  326. // Return Values:
  327. //
  328. //     A pointer to the desired data.
  329. //
  330. //--
  331. function RVA_TO_ADDR(Mapping, Rva: Pointer): Pointer;
  332. {$EXTERNALSYM RVA_TO_ADDR}
  333. function MiniDumpWriteDump(hProcess: HANDLE; ProcessId: DWORD; hFile: HANDLE; DumpType: MINIDUMP_TYPE; ExceptionParam: PMINIDUMP_EXCEPTION_INFORMATION; UserStreamParam: PMINIDUMP_USER_STREAM_INFORMATION; CallbackParam: PMINIDUMP_CALLBACK_INFORMATION): BOOL; stdcall;
  334. {$EXTERNALSYM MiniDumpWriteDump}
  335. function MiniDumpReadDumpStream(BaseOfDump: PVOID; StreamNumber: ULONG; var Dir: PMINIDUMP_DIRECTORY; var StreamPointer: PVOID; var StreamSize: ULONG): BOOL; stdcall;
  336. {$EXTERNALSYM MiniDumpReadDumpStream}
  337. implementation
  338. procedure Address32To64(a32: LPADDRESS; a64: LPADDRESS64);
  339. begin
  340.   a64^.Offset := {ULONG64(LONG64(LONG(}a32^.Offset{)))};
  341.   a64^.Segment := a32^.Segment;
  342.   a64^.Mode := a32^.Mode;
  343. end;
  344. procedure Address64To32(a64: LPADDRESS64; a32: LPADDRESS);
  345. begin
  346.   a32^.Offset := ULONG(a64^.Offset);
  347.   a32^.Segment := a64^.Segment;
  348.   a32^.Mode := a64^.Mode;
  349. end;
  350. procedure KdHelp32To64(p32: PKDHELP; p64: PKDHELP64);
  351. begin
  352.   p64^.Thread := p32^.Thread;
  353.   p64^.ThCallbackStack := p32^.ThCallbackStack;
  354.   p64^.NextCallback := p32^.NextCallback;
  355.   p64^.FramePointer := p32^.FramePointer;
  356.   p64^.KiCallUserMode := p32^.KiCallUserMode;
  357.   p64^.KeUserCallbackDispatcher := p32^.KeUserCallbackDispatcher;
  358.   p64^.SystemRangeStart := p32^.SystemRangeStart;
  359. end;
  360. const
  361.   ImageHlpLib = 'imagehlp.dll';
  362. {$IFDEF DYNAMIC_LINK}
  363. var
  364.   _BindImage: Pointer;
  365. function BindImage;
  366. begin
  367.   GetProcedureAddress(_BindImage, ImageHlpLib, 'BindImage');
  368.   asm
  369.     mov esp, ebp
  370.     pop ebp
  371.     jmp [_BindImage]
  372.   end;
  373. end;
  374. {$ELSE}
  375. function BindImage; external ImageHlpLib name 'BindImage';
  376. {$ENDIF DYNAMIC_LINK}
  377. {$IFDEF DYNAMIC_LINK}
  378. var
  379.   _BindImageEx: Pointer;
  380. function BindImageEx;
  381. begin
  382.   GetProcedureAddress(_BindImageEx, ImageHlpLib, 'BindImageEx');
  383.   asm
  384.     mov esp, ebp
  385.     pop ebp
  386.     jmp [_BindImageEx]
  387.   end;
  388. end;
  389. {$ELSE}
  390. function BindImageEx; external ImageHlpLib name 'BindImageEx';
  391. {$ENDIF DYNAMIC_LINK}
  392. {$IFDEF DYNAMIC_LINK}
  393. var
  394.   _ReBaseImage: Pointer;
  395. function ReBaseImage;
  396. begin
  397.   GetProcedureAddress(_ReBaseImage, ImageHlpLib, 'ReBaseImage');
  398.   asm
  399.     mov esp, ebp
  400.     pop ebp
  401.     jmp [_ReBaseImage]
  402.   end;
  403. end;
  404. {$ELSE}
  405. function ReBaseImage; external ImageHlpLib name 'ReBaseImage';
  406. {$ENDIF DYNAMIC_LINK}
  407. {$IFDEF DYNAMIC_LINK}
  408. var
  409.   _ReBaseImage64: Pointer;
  410. function ReBaseImage64;
  411. begin
  412.   GetProcedureAddress(_ReBaseImage64, ImageHlpLib, 'ReBaseImage64');
  413.   asm
  414.     mov esp, ebp
  415.     pop ebp
  416.     jmp [_ReBaseImage64]
  417.   end;
  418. end;
  419. {$ELSE}
  420. function ReBaseImage64; external ImageHlpLib name 'ReBaseImage64';
  421. {$ENDIF DYNAMIC_LINK}
  422. {$IFDEF DYNAMIC_LINK}
  423. var
  424.   _CheckSumMappedFile: Pointer;
  425. function CheckSumMappedFile;
  426. begin
  427.   GetProcedureAddress(_CheckSumMappedFile, ImageHlpLib, 'CheckSumMappedFile');
  428.   asm
  429.     mov esp, ebp
  430.     pop ebp
  431.     jmp [_CheckSumMappedFile]
  432.   end;
  433. end;
  434. {$ELSE}
  435. function CheckSumMappedFile; external ImageHlpLib name 'CheckSumMappedFile';
  436. {$ENDIF DYNAMIC_LINK}
  437. {$IFDEF DYNAMIC_LINK}
  438. var
  439.   _MapFileAndCheckSumA: Pointer;
  440. function MapFileAndCheckSumA;
  441. begin
  442.   GetProcedureAddress(_MapFileAndCheckSumA, ImageHlpLib, 'MapFileAndCheckSumA');
  443.   asm
  444.     mov esp, ebp
  445.     pop ebp
  446.     jmp [_MapFileAndCheckSumA]
  447.   end;
  448. end;
  449. {$ELSE}
  450. function MapFileAndCheckSumA; external ImageHlpLib name 'MapFileAndCheckSumA';
  451. {$ENDIF DYNAMIC_LINK}
  452. {$IFDEF DYNAMIC_LINK}
  453. var
  454.   _MapFileAndCheckSumW: Pointer;
  455. function MapFileAndCheckSumW;
  456. begin
  457.   GetProcedureAddress(_MapFileAndCheckSumW, ImageHlpLib, 'MapFileAndCheckSumW');
  458.   asm
  459.     mov esp, ebp
  460.     pop ebp
  461.     jmp [_MapFileAndCheckSumW]
  462.   end;
  463. end;
  464. {$ELSE}
  465. function MapFileAndCheckSumW; external ImageHlpLib name 'MapFileAndCheckSumW';
  466. {$ENDIF DYNAMIC_LINK}
  467. {$IFDEF UNICODE}
  468. {$IFDEF DYNAMIC_LINK}
  469. var
  470.   _MapFileAndCheckSum: Pointer;
  471. function MapFileAndCheckSum;
  472. begin
  473.   GetProcedureAddress(_MapFileAndCheckSum, ImageHlpLib, 'MapFileAndCheckSumW');
  474.   asm
  475.     mov esp, ebp
  476.     pop ebp
  477.     jmp [_MapFileAndCheckSum]
  478.   end;
  479. end;
  480. {$ELSE}
  481. function MapFileAndCheckSum; external ImageHlpLib name 'MapFileAndCheckSumW';
  482. {$ENDIF DYNAMIC_LINK}
  483. {$ELSE}
  484. {$IFDEF DYNAMIC_LINK}
  485. var
  486.   _MapFileAndCheckSum: Pointer;
  487. function MapFileAndCheckSum;
  488. begin
  489.   GetProcedureAddress(_MapFileAndCheckSum, ImageHlpLib, 'MapFileAndCheckSumA');
  490.   asm
  491.     mov esp, ebp
  492.     pop ebp
  493.     jmp [_MapFileAndCheckSum]
  494.   end;
  495. end;
  496. {$ELSE}
  497. function MapFileAndCheckSum; external ImageHlpLib name 'MapFileAndCheckSumA';
  498. {$ENDIF DYNAMIC_LINK}
  499. {$ENDIF}
  500. {$IFDEF DYNAMIC_LINK}
  501. var
  502.   _GetImageConfigInformation: Pointer;
  503. function GetImageConfigInformation;
  504. begin
  505.   GetProcedureAddress(_GetImageConfigInformation, ImageHlpLib, 'GetImageConfigInformation');
  506.   asm
  507.     mov esp, ebp
  508.     pop ebp
  509.     jmp [_GetImageConfigInformation]
  510.   end;
  511. end;
  512. {$ELSE}
  513. function GetImageConfigInformation; external ImageHlpLib name 'GetImageConfigInformation';
  514. {$ENDIF DYNAMIC_LINK}
  515. {$IFDEF DYNAMIC_LINK}
  516. var
  517.   _GetImageUnusedHeaderBytes: Pointer;
  518. function GetImageUnusedHeaderBytes;
  519. begin
  520.   GetProcedureAddress(_GetImageUnusedHeaderBytes, ImageHlpLib, 'GetImageUnusedHeaderBytes');
  521.   asm
  522.     mov esp, ebp
  523.     pop ebp
  524.     jmp [_GetImageUnusedHeaderBytes]
  525.   end;
  526. end;
  527. {$ELSE}
  528. function GetImageUnusedHeaderBytes; external ImageHlpLib name 'GetImageUnusedHeaderBytes';
  529. {$ENDIF DYNAMIC_LINK}
  530. {$IFDEF DYNAMIC_LINK}
  531. var
  532.   _SetImageConfigInformation: Pointer;
  533. function SetImageConfigInformation;
  534. begin
  535.   GetProcedureAddress(_SetImageConfigInformation, ImageHlpLib, 'SetImageConfigInformation');
  536.   asm
  537.     mov esp, ebp
  538.     pop ebp
  539.     jmp [_SetImageConfigInformation]
  540.   end;
  541. end;
  542. {$ELSE}
  543. function SetImageConfigInformation; external ImageHlpLib name 'SetImageConfigInformation';
  544. {$ENDIF DYNAMIC_LINK}
  545. {$IFDEF DYNAMIC_LINK}
  546. var
  547.   _ImageGetDigestStream: Pointer;
  548. function ImageGetDigestStream;
  549. begin
  550.   GetProcedureAddress(_ImageGetDigestStream, ImageHlpLib, 'ImageGetDigestStream');
  551.   asm
  552.     mov esp, ebp
  553.     pop ebp
  554.     jmp [_ImageGetDigestStream]
  555.   end;
  556. end;
  557. {$ELSE}
  558. function ImageGetDigestStream; external ImageHlpLib name 'ImageGetDigestStream';
  559. {$ENDIF DYNAMIC_LINK}
  560. {$IFDEF DYNAMIC_LINK}
  561. var
  562.   _ImageAddCertificate: Pointer;
  563. function ImageAddCertificate;
  564. begin
  565.   GetProcedureAddress(_ImageAddCertificate, ImageHlpLib, 'ImageAddCertificate');
  566.   asm
  567.     mov esp, ebp
  568.     pop ebp
  569.     jmp [_ImageAddCertificate]
  570.   end;
  571. end;
  572. {$ELSE}
  573. function ImageAddCertificate; external ImageHlpLib name 'ImageAddCertificate';
  574. {$ENDIF DYNAMIC_LINK}
  575. {$IFDEF DYNAMIC_LINK}
  576. var
  577.   _ImageRemoveCertificate: Pointer;
  578. function ImageRemoveCertificate;
  579. begin
  580.   GetProcedureAddress(_ImageRemoveCertificate, ImageHlpLib, 'ImageRemoveCertificate');
  581.   asm
  582.     mov esp, ebp
  583.     pop ebp
  584.     jmp [_ImageRemoveCertificate]
  585.   end;
  586. end;
  587. {$ELSE}
  588. function ImageRemoveCertificate; external ImageHlpLib name 'ImageRemoveCertificate';
  589. {$ENDIF DYNAMIC_LINK}
  590. {$IFDEF DYNAMIC_LINK}
  591. var
  592.   _ImageEnumerateCertificates: Pointer;
  593. function ImageEnumerateCertificates;
  594. begin
  595.   GetProcedureAddress(_ImageEnumerateCertificates, ImageHlpLib, 'ImageEnumerateCertificates');
  596.   asm
  597.     mov esp, ebp
  598.     pop ebp
  599.     jmp [_ImageEnumerateCertificates]
  600.   end;
  601. end;
  602. {$ELSE}
  603. function ImageEnumerateCertificates; external ImageHlpLib name 'ImageEnumerateCertificates';
  604. {$ENDIF DYNAMIC_LINK}
  605. {$IFDEF DYNAMIC_LINK}
  606. var
  607.   _ImageGetCertificateData: Pointer;
  608. function ImageGetCertificateData;
  609. begin
  610.   GetProcedureAddress(_ImageGetCertificateData, ImageHlpLib, 'ImageGetCertificateData');
  611.   asm
  612.     mov esp, ebp
  613.     pop ebp
  614.     jmp [_ImageGetCertificateData]
  615.   end;
  616. end;
  617. {$ELSE}
  618. function ImageGetCertificateData; external ImageHlpLib name 'ImageGetCertificateData';
  619. {$ENDIF DYNAMIC_LINK}
  620. {$IFDEF DYNAMIC_LINK}
  621. var
  622.   _ImageGetCertificateHeader: Pointer;
  623. function ImageGetCertificateHeader;
  624. begin
  625.   GetProcedureAddress(_ImageGetCertificateHeader, ImageHlpLib, 'ImageGetCertificateHeader');
  626.   asm
  627.     mov esp, ebp
  628.     pop ebp
  629.     jmp [_ImageGetCertificateHeader]
  630.   end;
  631. end;
  632. {$ELSE}
  633. function ImageGetCertificateHeader; external ImageHlpLib name 'ImageGetCertificateHeader';
  634. {$ENDIF DYNAMIC_LINK}
  635. {$IFDEF DYNAMIC_LINK}
  636. var
  637.   _ImageLoad: Pointer;
  638. function ImageLoad;
  639. begin
  640.   GetProcedureAddress(_ImageLoad, ImageHlpLib, 'ImageLoad');
  641.   asm
  642.     mov esp, ebp
  643.     pop ebp
  644.     jmp [_ImageLoad]
  645.   end;
  646. end;
  647. {$ELSE}
  648. function ImageLoad; external ImageHlpLib name 'ImageLoad';
  649. {$ENDIF DYNAMIC_LINK}
  650. {$IFDEF DYNAMIC_LINK}
  651. var
  652.   _ImageUnload: Pointer;
  653. function ImageUnload;
  654. begin
  655.   GetProcedureAddress(_ImageUnload, ImageHlpLib, 'ImageUnload');
  656.   asm
  657.     mov esp, ebp
  658.     pop ebp
  659.     jmp [_ImageUnload]
  660.   end;
  661. end;
  662. {$ELSE}
  663. function ImageUnload; external ImageHlpLib name 'ImageUnload';
  664. {$ENDIF DYNAMIC_LINK}
  665. {$IFDEF DYNAMIC_LINK}
  666. var
  667.   _MapAndLoad: Pointer;
  668. function MapAndLoad;
  669. begin
  670.   GetProcedureAddress(_MapAndLoad, ImageHlpLib, 'MapAndLoad');
  671.   asm
  672.     mov esp, ebp
  673.     pop ebp
  674.     jmp [_MapAndLoad]
  675.   end;
  676. end;
  677. {$ELSE}
  678. function MapAndLoad; external ImageHlpLib name 'MapAndLoad';
  679. {$ENDIF DYNAMIC_LINK}
  680. {$IFDEF DYNAMIC_LINK}
  681. var
  682.   _UnMapAndLoad: Pointer;
  683. function UnMapAndLoad;
  684. begin
  685.   GetProcedureAddress(_UnMapAndLoad, ImageHlpLib, 'UnMapAndLoad');
  686.   asm
  687.     mov esp, ebp
  688.     pop ebp
  689.     jmp [_UnMapAndLoad]
  690.   end;
  691. end;
  692. {$ELSE}
  693. function UnMapAndLoad; external ImageHlpLib name 'UnMapAndLoad';
  694. {$ENDIF DYNAMIC_LINK}
  695. {$IFDEF DYNAMIC_LINK}
  696. var
  697.   _TouchFileTimes: Pointer;
  698. function TouchFileTimes;
  699. begin
  700.   GetProcedureAddress(_TouchFileTimes, ImageHlpLib, 'TouchFileTimes');
  701.   asm
  702.     mov esp, ebp
  703.     pop ebp
  704.     jmp [_TouchFileTimes]
  705.   end;
  706. end;
  707. {$ELSE}
  708. function TouchFileTimes; external ImageHlpLib name 'TouchFileTimes';
  709. {$ENDIF DYNAMIC_LINK}
  710. {$IFDEF DYNAMIC_LINK}
  711. var
  712.   _SplitSymbols: Pointer;
  713. function SplitSymbols;
  714. begin
  715.   GetProcedureAddress(_SplitSymbols, ImageHlpLib, 'SplitSymbols');
  716.   asm
  717.     mov esp, ebp
  718.     pop ebp
  719.     jmp [_SplitSymbols]
  720.   end;
  721. end;
  722. {$ELSE}
  723. function SplitSymbols; external ImageHlpLib name 'SplitSymbols';
  724. {$ENDIF DYNAMIC_LINK}
  725. {$IFDEF DYNAMIC_LINK}
  726. var
  727.   _UpdateDebugInfoFile: Pointer;
  728. function UpdateDebugInfoFile;
  729. begin
  730.   GetProcedureAddress(_UpdateDebugInfoFile, ImageHlpLib, 'UpdateDebugInfoFile');
  731.   asm
  732.     mov esp, ebp
  733.     pop ebp
  734.     jmp [_UpdateDebugInfoFile]
  735.   end;
  736. end;
  737. {$ELSE}
  738. function UpdateDebugInfoFile; external ImageHlpLib name 'UpdateDebugInfoFile';
  739. {$ENDIF DYNAMIC_LINK}
  740. {$IFDEF DYNAMIC_LINK}
  741. var
  742.   _UpdateDebugInfoFileEx: Pointer;
  743. function UpdateDebugInfoFileEx;
  744. begin
  745.   GetProcedureAddress(_UpdateDebugInfoFileEx, ImageHlpLib, 'UpdateDebugInfoFileEx');
  746.   asm
  747.     mov esp, ebp
  748.     pop ebp
  749.     jmp [_UpdateDebugInfoFileEx]
  750.   end;
  751. end;
  752. {$ELSE}
  753. function UpdateDebugInfoFileEx; external ImageHlpLib name 'UpdateDebugInfoFileEx';
  754. {$ENDIF DYNAMIC_LINK}
  755. {$IFDEF DYNAMIC_LINK}
  756. var
  757.   _FindDebugInfoFile: Pointer;
  758. function FindDebugInfoFile;
  759. begin
  760.   GetProcedureAddress(_FindDebugInfoFile, ImageHlpLib, 'FindDebugInfoFile');
  761.   asm
  762.     mov esp, ebp
  763.     pop ebp
  764.     jmp [_FindDebugInfoFile]
  765.   end;
  766. end;
  767. {$ELSE}
  768. function FindDebugInfoFile; external ImageHlpLib name 'FindDebugInfoFile';
  769. {$ENDIF DYNAMIC_LINK}
  770. {$IFDEF DYNAMIC_LINK}
  771. var
  772.   _FindDebugInfoFileEx: Pointer;
  773. function FindDebugInfoFileEx;
  774. begin
  775.   GetProcedureAddress(_FindDebugInfoFileEx, ImageHlpLib, 'FindDebugInfoFileEx');
  776.   asm
  777.     mov esp, ebp
  778.     pop ebp
  779.     jmp [_FindDebugInfoFileEx]
  780.   end;
  781. end;
  782. {$ELSE}
  783. function FindDebugInfoFileEx; external ImageHlpLib name 'FindDebugInfoFileEx';
  784. {$ENDIF DYNAMIC_LINK}
  785. {$IFDEF DYNAMIC_LINK}
  786. var
  787.   _SymFindFileInPath: Pointer;
  788. function SymFindFileInPath;
  789. begin
  790.   GetProcedureAddress(_SymFindFileInPath, ImageHlpLib, 'SymFindFileInPath');
  791.   asm
  792.     mov esp, ebp
  793.     pop ebp
  794.     jmp [_SymFindFileInPath]
  795.   end;
  796. end;
  797. {$ELSE}
  798. function SymFindFileInPath; external ImageHlpLib name 'SymFindFileInPath';
  799. {$ENDIF DYNAMIC_LINK}
  800. {$IFDEF DYNAMIC_LINK}
  801. var
  802.   _FindExecutableImage: Pointer;
  803. function FindExecutableImage;
  804. begin
  805.   GetProcedureAddress(_FindExecutableImage, ImageHlpLib, 'FindExecutableImage');
  806.   asm
  807.     mov esp, ebp
  808.     pop ebp
  809.     jmp [_FindExecutableImage]
  810.   end;
  811. end;
  812. {$ELSE}
  813. function FindExecutableImage; external ImageHlpLib name 'FindExecutableImage';
  814. {$ENDIF DYNAMIC_LINK}
  815. {$IFDEF DYNAMIC_LINK}
  816. var
  817.   _FindExecutableImageEx: Pointer;
  818. function FindExecutableImageEx;
  819. begin
  820.   GetProcedureAddress(_FindExecutableImageEx, ImageHlpLib, 'FindExecutableImageEx');
  821.   asm
  822.     mov esp, ebp
  823.     pop ebp
  824.     jmp [_FindExecutableImageEx]
  825.   end;
  826. end;
  827. {$ELSE}
  828. function FindExecutableImageEx; external ImageHlpLib name 'FindExecutableImageEx';
  829. {$ENDIF DYNAMIC_LINK}
  830. {$IFDEF DYNAMIC_LINK}
  831. var
  832.   _ImageNtHeader: Pointer;
  833. function ImageNtHeader;
  834. begin
  835.   GetProcedureAddress(_ImageNtHeader, ImageHlpLib, 'ImageNtHeader');
  836.   asm
  837.     mov esp, ebp
  838.     pop ebp
  839.     jmp [_ImageNtHeader]
  840.   end;
  841. end;
  842. {$ELSE}
  843. function ImageNtHeader; external ImageHlpLib name 'ImageNtHeader';
  844. {$ENDIF DYNAMIC_LINK}
  845. {$IFDEF DYNAMIC_LINK}
  846. var
  847.   _ImageDirectoryEntryToDataEx: Pointer;
  848. function ImageDirectoryEntryToDataEx;
  849. begin
  850.   GetProcedureAddress(_ImageDirectoryEntryToDataEx, ImageHlpLib, 'ImageDirectoryEntryToDataEx');
  851.   asm
  852.     mov esp, ebp
  853.     pop ebp
  854.     jmp [_ImageDirectoryEntryToDataEx]
  855.   end;
  856. end;
  857. {$ELSE}
  858. function ImageDirectoryEntryToDataEx; external ImageHlpLib name 'ImageDirectoryEntryToDataEx';
  859. {$ENDIF DYNAMIC_LINK}
  860. {$IFDEF DYNAMIC_LINK}
  861. var
  862.   _ImageDirectoryEntryToData: Pointer;
  863. function ImageDirectoryEntryToData;
  864. begin
  865.   GetProcedureAddress(_ImageDirectoryEntryToData, ImageHlpLib, 'ImageDirectoryEntryToData');
  866.   asm
  867.     mov esp, ebp
  868.     pop ebp
  869.     jmp [_ImageDirectoryEntryToData]
  870.   end;
  871. end;
  872. {$ELSE}
  873. function ImageDirectoryEntryToData; external ImageHlpLib name 'ImageDirectoryEntryToData';
  874. {$ENDIF DYNAMIC_LINK}
  875. {$IFDEF DYNAMIC_LINK}
  876. var
  877.   _ImageRvaToSection: Pointer;
  878. function ImageRvaToSection;
  879. begin
  880.   GetProcedureAddress(_ImageRvaToSection, ImageHlpLib, 'ImageRvaToSection');
  881.   asm
  882.     mov esp, ebp
  883.     pop ebp
  884.     jmp [_ImageRvaToSection]
  885.   end;
  886. end;
  887. {$ELSE}
  888. function ImageRvaToSection; external ImageHlpLib name 'ImageRvaToSection';
  889. {$ENDIF DYNAMIC_LINK}
  890. {$IFDEF DYNAMIC_LINK}
  891. var
  892.   _ImageRvaToVa: Pointer;
  893. function ImageRvaToVa;
  894. begin
  895.   GetProcedureAddress(_ImageRvaToVa, ImageHlpLib, 'ImageRvaToVa');
  896.   asm
  897.     mov esp, ebp
  898.     pop ebp
  899.     jmp [_ImageRvaToVa]
  900.   end;
  901. end;
  902. {$ELSE}
  903. function ImageRvaToVa; external ImageHlpLib name 'ImageRvaToVa';
  904. {$ENDIF DYNAMIC_LINK}
  905. {$IFDEF DYNAMIC_LINK}
  906. var
  907.   _MapDebugInformation: Pointer;
  908. function MapDebugInformation;
  909. begin
  910.   GetProcedureAddress(_MapDebugInformation, ImageHlpLib, 'MapDebugInformation');
  911.   asm
  912.     mov esp, ebp
  913.     pop ebp
  914.     jmp [_MapDebugInformation]
  915.   end;
  916. end;
  917. {$ELSE}
  918. function MapDebugInformation; external ImageHlpLib name 'MapDebugInformation';
  919. {$ENDIF DYNAMIC_LINK}
  920. {$IFDEF DYNAMIC_LINK}
  921. var
  922.   _UnmapDebugInformation: Pointer;
  923. function UnmapDebugInformation;
  924. begin
  925.   GetProcedureAddress(_UnmapDebugInformation, ImageHlpLib, 'UnmapDebugInformation');
  926.   asm
  927.     mov esp, ebp
  928.     pop ebp
  929.     jmp [_UnmapDebugInformation]
  930.   end;
  931. end;
  932. {$ELSE}
  933. function UnmapDebugInformation; external ImageHlpLib name 'UnmapDebugInformation';
  934. {$ENDIF DYNAMIC_LINK}
  935. {$IFDEF DYNAMIC_LINK}
  936. var
  937.   _SearchTreeForFile: Pointer;
  938. function SearchTreeForFile;
  939. begin
  940.   GetProcedureAddress(_SearchTreeForFile, ImageHlpLib, 'SearchTreeForFile');
  941.   asm
  942.     mov esp, ebp
  943.     pop ebp
  944.     jmp [_SearchTreeForFile]
  945.   end;
  946. end;
  947. {$ELSE}
  948. function SearchTreeForFile; external ImageHlpLib name 'SearchTreeForFile';
  949. {$ENDIF DYNAMIC_LINK}
  950. {$IFDEF DYNAMIC_LINK}
  951. var
  952.   _EnumDirTree: Pointer;
  953. function EnumDirTree;
  954. begin
  955.   GetProcedureAddress(_EnumDirTree, ImageHlpLib, 'EnumDirTree');
  956.   asm
  957.     mov esp, ebp
  958.     pop ebp
  959.     jmp [_EnumDirTree]
  960.   end;
  961. end;
  962. {$ELSE}
  963. function EnumDirTree; external ImageHlpLib name 'EnumDirTree';
  964. {$ENDIF DYNAMIC_LINK}
  965. {$IFDEF DYNAMIC_LINK}
  966. var
  967.   _MakeSureDirectoryPathExists: Pointer;
  968. function MakeSureDirectoryPathExists;
  969. begin
  970.   GetProcedureAddress(_MakeSureDirectoryPathExists, ImageHlpLib, 'MakeSureDirectoryPathExists');
  971.   asm
  972.     mov esp, ebp
  973.     pop ebp
  974.     jmp [_MakeSureDirectoryPathExists]
  975.   end;
  976. end;
  977. {$ELSE}
  978. function MakeSureDirectoryPathExists; external ImageHlpLib name 'MakeSureDirectoryPathExists';
  979. {$ENDIF DYNAMIC_LINK}
  980. {$IFDEF DYNAMIC_LINK}
  981. var
  982.   _UnDecorateSymbolName: Pointer;
  983. function UnDecorateSymbolName;
  984. begin
  985.   GetProcedureAddress(_UnDecorateSymbolName, ImageHlpLib, 'UnDecorateSymbolName');
  986.   asm
  987.     mov esp, ebp
  988.     pop ebp
  989.     jmp [_UnDecorateSymbolName]
  990.   end;
  991. end;
  992. {$ELSE}
  993. function UnDecorateSymbolName; external ImageHlpLib name 'UnDecorateSymbolName';
  994. {$ENDIF DYNAMIC_LINK}
  995. {$IFDEF DYNAMIC_LINK}
  996. var
  997.   _StackWalk64: Pointer;
  998. function StackWalk64;
  999. begin
  1000.   GetProcedureAddress(_StackWalk64, ImageHlpLib, 'StackWalk64');
  1001.   asm
  1002.     mov esp, ebp
  1003.     pop ebp
  1004.     jmp [_StackWalk64]
  1005.   end;
  1006. end;
  1007. {$ELSE}
  1008. function StackWalk64; external ImageHlpLib name 'StackWalk64';
  1009. {$ENDIF DYNAMIC_LINK}
  1010. {$IFDEF DYNAMIC_LINK}
  1011. var
  1012.   _StackWalk: Pointer;
  1013. function StackWalk;
  1014. begin
  1015.   GetProcedureAddress(_StackWalk, ImageHlpLib, 'StackWalk');
  1016.   asm
  1017.     mov esp, ebp
  1018.     pop ebp
  1019.     jmp [_StackWalk]
  1020.   end;
  1021. end;
  1022. {$ELSE}
  1023. function StackWalk; external ImageHlpLib name 'StackWalk';
  1024. {$ENDIF DYNAMIC_LINK}
  1025. {$IFDEF DYNAMIC_LINK}
  1026. var
  1027.   _ImagehlpApiVersion: Pointer;
  1028. function ImagehlpApiVersion;
  1029. begin
  1030.   GetProcedureAddress(_ImagehlpApiVersion, ImageHlpLib, 'ImagehlpApiVersion');
  1031.   asm
  1032.     mov esp, ebp
  1033.     pop ebp
  1034.     jmp [_ImagehlpApiVersion]
  1035.   end;
  1036. end;
  1037. {$ELSE}
  1038. function ImagehlpApiVersion; external ImageHlpLib name 'ImagehlpApiVersion';
  1039. {$ENDIF DYNAMIC_LINK}
  1040. {$IFDEF DYNAMIC_LINK}
  1041. var
  1042.   _ImagehlpApiVersionEx: Pointer;
  1043. function ImagehlpApiVersionEx;
  1044. begin
  1045.   GetProcedureAddress(_ImagehlpApiVersionEx, ImageHlpLib, 'ImagehlpApiVersionEx');
  1046.   asm
  1047.     mov esp, ebp
  1048.     pop ebp
  1049.     jmp [_ImagehlpApiVersionEx]
  1050.   end;
  1051. end;
  1052. {$ELSE}
  1053. function ImagehlpApiVersionEx; external ImageHlpLib name 'ImagehlpApiVersionEx';
  1054. {$ENDIF DYNAMIC_LINK}
  1055. {$IFDEF DYNAMIC_LINK}
  1056. var
  1057.   _GetTimestampForLoadedLibrary: Pointer;
  1058. function GetTimestampForLoadedLibrary;
  1059. begin
  1060.   GetProcedureAddress(_GetTimestampForLoadedLibrary, ImageHlpLib, 'GetTimestampForLoadedLibrary');
  1061.   asm
  1062.     mov esp, ebp
  1063.     pop ebp
  1064.     jmp [_GetTimestampForLoadedLibrary]
  1065.   end;
  1066. end;
  1067. {$ELSE}
  1068. function GetTimestampForLoadedLibrary; external ImageHlpLib name 'GetTimestampForLoadedLibrary';
  1069. {$ENDIF DYNAMIC_LINK}
  1070. {$IFDEF DYNAMIC_LINK}
  1071. var
  1072.   _SymSetOptions: Pointer;
  1073. function SymSetOptions;
  1074. begin
  1075.   GetProcedureAddress(_SymSetOptions, ImageHlpLib, 'SymSetOptions');
  1076.   asm
  1077.     mov esp, ebp
  1078.     pop ebp
  1079.     jmp [_SymSetOptions]
  1080.   end;
  1081. end;
  1082. {$ELSE}
  1083. function SymSetOptions; external ImageHlpLib name 'SymSetOptions';
  1084. {$ENDIF DYNAMIC_LINK}
  1085. {$IFDEF DYNAMIC_LINK}
  1086. var
  1087.   _SymGetOptions: Pointer;
  1088. function SymGetOptions;
  1089. begin
  1090.   GetProcedureAddress(_SymGetOptions, ImageHlpLib, 'SymGetOptions');
  1091.   asm
  1092.     mov esp, ebp
  1093.     pop ebp
  1094.     jmp [_SymGetOptions]
  1095.   end;
  1096. end;
  1097. {$ELSE}
  1098. function SymGetOptions; external ImageHlpLib name 'SymGetOptions';
  1099. {$ENDIF DYNAMIC_LINK}
  1100. {$IFDEF DYNAMIC_LINK}
  1101. var
  1102.   _SymCleanup: Pointer;
  1103. function SymCleanup;
  1104. begin
  1105.   GetProcedureAddress(_SymCleanup, ImageHlpLib, 'SymCleanup');
  1106.   asm
  1107.     mov esp, ebp
  1108.     pop ebp
  1109.     jmp [_SymCleanup]
  1110.   end;
  1111. end;
  1112. {$ELSE}
  1113. function SymCleanup; external ImageHlpLib name 'SymCleanup';
  1114. {$ENDIF DYNAMIC_LINK}
  1115. {$IFDEF DYNAMIC_LINK}
  1116. var
  1117.   _SymMatchString: Pointer;
  1118. function SymMatchString;
  1119. begin
  1120.   GetProcedureAddress(_SymMatchString, ImageHlpLib, 'SymMatchString');
  1121.   asm
  1122.     mov esp, ebp
  1123.     pop ebp
  1124.     jmp [_SymMatchString]
  1125.   end;
  1126. end;
  1127. {$ELSE}
  1128. function SymMatchString; external ImageHlpLib name 'SymMatchString';
  1129. {$ENDIF DYNAMIC_LINK}
  1130. {$IFDEF DYNAMIC_LINK}
  1131. var
  1132.   _SymEnumSourceFiles: Pointer;
  1133. function SymEnumSourceFiles;
  1134. begin
  1135.   GetProcedureAddress(_SymEnumSourceFiles, ImageHlpLib, 'SymEnumSourceFiles');
  1136.   asm
  1137.     mov esp, ebp
  1138.     pop ebp
  1139.     jmp [_SymEnumSourceFiles]
  1140.   end;
  1141. end;
  1142. {$ELSE}
  1143. function SymEnumSourceFiles; external ImageHlpLib name 'SymEnumSourceFiles';
  1144. {$ENDIF DYNAMIC_LINK}
  1145. {$IFDEF DYNAMIC_LINK}
  1146. var
  1147.   _SymEnumerateModules64: Pointer;
  1148. function SymEnumerateModules64;
  1149. begin
  1150.   GetProcedureAddress(_SymEnumerateModules64, ImageHlpLib, 'SymEnumerateModules64');
  1151.   asm
  1152.     mov esp, ebp
  1153.     pop ebp
  1154.     jmp [_SymEnumerateModules64]
  1155.   end;
  1156. end;
  1157. {$ELSE}
  1158. function SymEnumerateModules64; external ImageHlpLib name 'SymEnumerateModules64';
  1159. {$ENDIF DYNAMIC_LINK}
  1160. {$IFDEF DYNAMIC_LINK}
  1161. var
  1162.   _SymEnumerateModules: Pointer;
  1163. function SymEnumerateModules;
  1164. begin
  1165.   GetProcedureAddress(_SymEnumerateModules, ImageHlpLib, 'SymEnumerateModules');
  1166.   asm
  1167.     mov esp, ebp
  1168.     pop ebp
  1169.     jmp [_SymEnumerateModules]
  1170.   end;
  1171. end;
  1172. {$ELSE}
  1173. function SymEnumerateModules; external ImageHlpLib name 'SymEnumerateModules';
  1174. {$ENDIF DYNAMIC_LINK}
  1175. {$IFDEF DYNAMIC_LINK}
  1176. var
  1177.   _SymEnumerateSymbols64: Pointer;
  1178. function SymEnumerateSymbols64;
  1179. begin
  1180.   GetProcedureAddress(_SymEnumerateSymbols64, ImageHlpLib, 'SymEnumerateSymbols64');
  1181.   asm
  1182.     mov esp, ebp
  1183.     pop ebp
  1184.     jmp [_SymEnumerateSymbols64]
  1185.   end;
  1186. end;
  1187. {$ELSE}
  1188. function SymEnumerateSymbols64; external ImageHlpLib name 'SymEnumerateSymbols64';
  1189. {$ENDIF DYNAMIC_LINK}
  1190. {$IFDEF DYNAMIC_LINK}
  1191. var
  1192.   _SymEnumerateSymbolsW64: Pointer;
  1193. function SymEnumerateSymbolsW64;
  1194. begin
  1195.   GetProcedureAddress(_SymEnumerateSymbolsW64, ImageHlpLib, 'SymEnumerateSymbolsW64');
  1196.   asm
  1197.     mov esp, ebp
  1198.     pop ebp
  1199.     jmp [_SymEnumerateSymbolsW64]
  1200.   end;
  1201. end;
  1202. {$ELSE}
  1203. function SymEnumerateSymbolsW64; external ImageHlpLib name 'SymEnumerateSymbolsW64';
  1204. {$ENDIF DYNAMIC_LINK}
  1205. {$IFDEF DYNAMIC_LINK}
  1206. var
  1207.   _SymEnumerateSymbols: Pointer;
  1208. function SymEnumerateSymbols;
  1209. begin
  1210.   GetProcedureAddress(_SymEnumerateSymbols, ImageHlpLib, 'SymEnumerateSymbols');
  1211.   asm
  1212.     mov esp, ebp
  1213.     pop ebp
  1214.     jmp [_SymEnumerateSymbols]
  1215.   end;
  1216. end;
  1217. {$ELSE}
  1218. function SymEnumerateSymbols; external ImageHlpLib name 'SymEnumerateSymbols';
  1219. {$ENDIF DYNAMIC_LINK}
  1220. {$IFDEF DYNAMIC_LINK}
  1221. var
  1222.   _SymEnumerateSymbolsW: Pointer;
  1223. function SymEnumerateSymbolsW;
  1224. begin
  1225.   GetProcedureAddress(_SymEnumerateSymbolsW, ImageHlpLib, 'SymEnumerateSymbolsW');
  1226.   asm
  1227.     mov esp, ebp
  1228.     pop ebp
  1229.     jmp [_SymEnumerateSymbolsW]
  1230.   end;
  1231. end;
  1232. {$ELSE}
  1233. function SymEnumerateSymbolsW; external ImageHlpLib name 'SymEnumerateSymbolsW';
  1234. {$ENDIF DYNAMIC_LINK}
  1235. {$IFDEF DYNAMIC_LINK}
  1236. var
  1237.   _EnumerateLoadedModules64: Pointer;
  1238. function EnumerateLoadedModules64;
  1239. begin
  1240.   GetProcedureAddress(_EnumerateLoadedModules64, ImageHlpLib, 'EnumerateLoadedModules64');
  1241.   asm
  1242.     mov esp, ebp
  1243.     pop ebp
  1244.     jmp [_EnumerateLoadedModules64]
  1245.   end;
  1246. end;
  1247. {$ELSE}
  1248. function EnumerateLoadedModules64; external ImageHlpLib name 'EnumerateLoadedModules64';
  1249. {$ENDIF DYNAMIC_LINK}
  1250. {$IFDEF DYNAMIC_LINK}
  1251. var
  1252.   _EnumerateLoadedModules: Pointer;
  1253. function EnumerateLoadedModules;
  1254. begin
  1255.   GetProcedureAddress(_EnumerateLoadedModules, ImageHlpLib, 'EnumerateLoadedModules');
  1256.   asm
  1257.     mov esp, ebp
  1258.     pop ebp
  1259.     jmp [_EnumerateLoadedModules]
  1260.   end;
  1261. end;
  1262. {$ELSE}
  1263. function EnumerateLoadedModules; external ImageHlpLib name 'EnumerateLoadedModules';
  1264. {$ENDIF DYNAMIC_LINK}
  1265. {$IFDEF DYNAMIC_LINK}
  1266. var
  1267.   _SymFunctionTableAccess64: Pointer;
  1268. function SymFunctionTableAccess64;
  1269. begin
  1270.   GetProcedureAddress(_SymFunctionTableAccess64, ImageHlpLib, 'SymFunctionTableAccess64');
  1271.   asm
  1272.     mov esp, ebp
  1273.     pop ebp
  1274.     jmp [_SymFunctionTableAccess64]
  1275.   end;
  1276. end;
  1277. {$ELSE}
  1278. function SymFunctionTableAccess64; external ImageHlpLib name 'SymFunctionTableAccess64';
  1279. {$ENDIF DYNAMIC_LINK}
  1280. {$IFDEF DYNAMIC_LINK}
  1281. var
  1282.   _SymFunctionTableAccess: Pointer;
  1283. function SymFunctionTableAccess;
  1284. begin
  1285.   GetProcedureAddress(_SymFunctionTableAccess, ImageHlpLib, 'SymFunctionTableAccess');
  1286.   asm
  1287.     mov esp, ebp
  1288.     pop ebp
  1289.     jmp [_SymFunctionTableAccess]
  1290.   end;
  1291. end;
  1292. {$ELSE}
  1293. function SymFunctionTableAccess; external ImageHlpLib name 'SymFunctionTableAccess';
  1294. {$ENDIF DYNAMIC_LINK}
  1295. {$IFDEF DYNAMIC_LINK}
  1296. var
  1297.   _SymGetModuleInfo64: Pointer;
  1298. function SymGetModuleInfo64;
  1299. begin
  1300.   GetProcedureAddress(_SymGetModuleInfo64, ImageHlpLib, 'SymGetModuleInfo64');
  1301.   asm
  1302.     mov esp, ebp
  1303.     pop ebp
  1304.     jmp [_SymGetModuleInfo64]
  1305.   end;
  1306. end;
  1307. {$ELSE}
  1308. function SymGetModuleInfo64; external ImageHlpLib name 'SymGetModuleInfo64';
  1309. {$ENDIF DYNAMIC_LINK}
  1310. {$IFDEF DYNAMIC_LINK}
  1311. var
  1312.   _SymGetModuleInfoW64: Pointer;
  1313. function SymGetModuleInfoW64;
  1314. begin
  1315.   GetProcedureAddress(_SymGetModuleInfoW64, ImageHlpLib, 'SymGetModuleInfoW64');
  1316.   asm
  1317.     mov esp, ebp
  1318.     pop ebp
  1319.     jmp [_SymGetModuleInfoW64]
  1320.   end;
  1321. end;
  1322. {$ELSE}
  1323. function SymGetModuleInfoW64; external ImageHlpLib name 'SymGetModuleInfoW64';
  1324. {$ENDIF DYNAMIC_LINK}
  1325. {$IFDEF DYNAMIC_LINK}
  1326. var
  1327.   _SymGetModuleInfo: Pointer;
  1328. function SymGetModuleInfo;
  1329. begin
  1330.   GetProcedureAddress(_SymGetModuleInfo, ImageHlpLib, 'SymGetModuleInfo');
  1331.   asm
  1332.     mov esp, ebp
  1333.     pop ebp
  1334.     jmp [_SymGetModuleInfo]
  1335.   end;
  1336. end;
  1337. {$ELSE}
  1338. function SymGetModuleInfo; external ImageHlpLib name 'SymGetModuleInfo';
  1339. {$ENDIF DYNAMIC_LINK}
  1340. {$IFDEF DYNAMIC_LINK}
  1341. var
  1342.   _SymGetModuleInfoW: Pointer;
  1343. function SymGetModuleInfoW;
  1344. begin
  1345.   GetProcedureAddress(_SymGetModuleInfoW, ImageHlpLib, 'SymGetModuleInfoW');
  1346.   asm
  1347.     mov esp, ebp
  1348.     pop ebp
  1349.     jmp [_SymGetModuleInfoW]
  1350.   end;
  1351. end;
  1352. {$ELSE}
  1353. function SymGetModuleInfoW; external ImageHlpLib name 'SymGetModuleInfoW';
  1354. {$ENDIF DYNAMIC_LINK}
  1355. {$IFDEF DYNAMIC_LINK}
  1356. var
  1357.   _SymGetModuleBase64: Pointer;
  1358. function SymGetModuleBase64;
  1359. begin
  1360.   GetProcedureAddress(_SymGetModuleBase64, ImageHlpLib, 'SymGetModuleBase64');
  1361.   asm
  1362.     mov esp, ebp
  1363.     pop ebp
  1364.     jmp [_SymGetModuleBase64]
  1365.   end;
  1366. end;
  1367. {$ELSE}
  1368. function SymGetModuleBase64; external ImageHlpLib name 'SymGetModuleBase64';
  1369. {$ENDIF DYNAMIC_LINK}
  1370. {$IFDEF DYNAMIC_LINK}
  1371. var
  1372.   _SymGetModuleBase: Pointer;
  1373. function SymGetModuleBase;
  1374. begin
  1375.   GetProcedureAddress(_SymGetModuleBase, ImageHlpLib, 'SymGetModuleBase');
  1376.   asm
  1377.     mov esp, ebp
  1378.     pop ebp
  1379.     jmp [_SymGetModuleBase]
  1380.   end;
  1381. end;
  1382. {$ELSE}
  1383. function SymGetModuleBase; external ImageHlpLib name 'SymGetModuleBase';
  1384. {$ENDIF DYNAMIC_LINK}
  1385. {$IFDEF DYNAMIC_LINK}
  1386. var
  1387.   _SymGetSymNext64: Pointer;
  1388. function SymGetSymNext64;
  1389. begin
  1390.   GetProcedureAddress(_SymGetSymNext64, ImageHlpLib, 'SymGetSymNext64');
  1391.   asm
  1392.     mov esp, ebp
  1393.     pop ebp
  1394.     jmp [_SymGetSymNext64]
  1395.   end;
  1396. end;
  1397. {$ELSE}
  1398. function SymGetSymNext64; external ImageHlpLib name 'SymGetSymNext64';
  1399. {$ENDIF DYNAMIC_LINK}
  1400. {$IFDEF DYNAMIC_LINK}
  1401. var
  1402.   _SymGetSymNext: Pointer;
  1403. function SymGetSymNext;
  1404. begin
  1405.   GetProcedureAddress(_SymGetSymNext, ImageHlpLib, 'SymGetSymNext');
  1406.   asm
  1407.     mov esp, ebp
  1408.     pop ebp
  1409.     jmp [_SymGetSymNext]
  1410.   end;
  1411. end;
  1412. {$ELSE}
  1413. function SymGetSymNext; external ImageHlpLib name 'SymGetSymNext';
  1414. {$ENDIF DYNAMIC_LINK}
  1415. {$IFDEF DYNAMIC_LINK}
  1416. var
  1417.   _SymGetSymPrev64: Pointer;
  1418. function SymGetSymPrev64;
  1419. begin
  1420.   GetProcedureAddress(_SymGetSymPrev64, ImageHlpLib, 'SymGetSymPrev64');
  1421.   asm
  1422.     mov esp, ebp
  1423.     pop ebp
  1424.     jmp [_SymGetSymPrev64]
  1425.   end;
  1426. end;
  1427. {$ELSE}
  1428. function SymGetSymPrev64; external ImageHlpLib name 'SymGetSymPrev64';
  1429. {$ENDIF DYNAMIC_LINK}
  1430. {$IFDEF DYNAMIC_LINK}
  1431. var
  1432.   _SymGetSymPrev: Pointer;
  1433. function SymGetSymPrev;
  1434. begin
  1435.   GetProcedureAddress(_SymGetSymPrev, ImageHlpLib, 'SymGetSymPrev');
  1436.   asm
  1437.     mov esp, ebp
  1438.     pop ebp
  1439.     jmp [_SymGetSymPrev]
  1440.   end;
  1441. end;
  1442. {$ELSE}
  1443. function SymGetSymPrev; external ImageHlpLib name 'SymGetSymPrev';
  1444. {$ENDIF DYNAMIC_LINK}
  1445. {$IFDEF DYNAMIC_LINK}
  1446. var
  1447.   _SymGetLineFromAddr64: Pointer;
  1448. function SymGetLineFromAddr64;
  1449. begin
  1450.   GetProcedureAddress(_SymGetLineFromAddr64, ImageHlpLib, 'SymGetLineFromAddr64');
  1451.   asm
  1452.     mov esp, ebp
  1453.     pop ebp
  1454.     jmp [_SymGetLineFromAddr64]
  1455.   end;
  1456. end;
  1457. {$ELSE}
  1458. function SymGetLineFromAddr64; external ImageHlpLib name 'SymGetLineFromAddr64';
  1459. {$ENDIF DYNAMIC_LINK}
  1460. {$IFDEF DYNAMIC_LINK}
  1461. var
  1462.   _SymGetLineFromAddr: Pointer;
  1463. function SymGetLineFromAddr;
  1464. begin
  1465.   GetProcedureAddress(_SymGetLineFromAddr, ImageHlpLib, 'SymGetLineFromAddr');
  1466.   asm
  1467.     mov esp, ebp
  1468.     pop ebp
  1469.     jmp [_SymGetLineFromAddr]
  1470.   end;
  1471. end;
  1472. {$ELSE}
  1473. function SymGetLineFromAddr; external ImageHlpLib name 'SymGetLineFromAddr';
  1474. {$ENDIF DYNAMIC_LINK}
  1475. {$IFDEF DYNAMIC_LINK}
  1476. var
  1477.   _SymGetLineFromName64: Pointer;
  1478. function SymGetLineFromName64;
  1479. begin
  1480.   GetProcedureAddress(_SymGetLineFromName64, ImageHlpLib, 'SymGetLineFromName64');
  1481.   asm
  1482.     mov esp, ebp
  1483.     pop ebp
  1484.     jmp [_SymGetLineFromName64]
  1485.   end;
  1486. end;
  1487. {$ELSE}
  1488. function SymGetLineFromName64; external ImageHlpLib name 'SymGetLineFromName64';
  1489. {$ENDIF DYNAMIC_LINK}
  1490. {$IFDEF DYNAMIC_LINK}
  1491. var
  1492.   _SymGetLineFromName: Pointer;
  1493. function SymGetLineFromName;
  1494. begin
  1495.   GetProcedureAddress(_SymGetLineFromName, ImageHlpLib, 'SymGetLineFromName');
  1496.   asm
  1497.     mov esp, ebp
  1498.     pop ebp
  1499.     jmp [_SymGetLineFromName]
  1500.   end;
  1501. end;
  1502. {$ELSE}
  1503. function SymGetLineFromName; external ImageHlpLib name 'SymGetLineFromName';
  1504. {$ENDIF DYNAMIC_LINK}
  1505. {$IFDEF DYNAMIC_LINK}
  1506. var
  1507.   _SymGetLineNext64: Pointer;
  1508. function SymGetLineNext64;
  1509. begin
  1510.   GetProcedureAddress(_SymGetLineNext64, ImageHlpLib, 'SymGetLineNext64');
  1511.   asm
  1512.     mov esp, ebp
  1513.     pop ebp
  1514.     jmp [_SymGetLineNext64]
  1515.   end;
  1516. end;
  1517. {$ELSE}
  1518. function SymGetLineNext64; external ImageHlpLib name 'SymGetLineNext64';
  1519. {$ENDIF DYNAMIC_LINK}
  1520. {$IFDEF DYNAMIC_LINK}
  1521. var
  1522.   _SymGetLineNext: Pointer;
  1523. function SymGetLineNext;
  1524. begin
  1525.   GetProcedureAddress(_SymGetLineNext, ImageHlpLib, 'SymGetLineNext');
  1526.   asm
  1527.     mov esp, ebp
  1528.     pop ebp
  1529.     jmp [_SymGetLineNext]
  1530.   end;
  1531. end;
  1532. {$ELSE}
  1533. function SymGetLineNext; external ImageHlpLib name 'SymGetLineNext';
  1534. {$ENDIF DYNAMIC_LINK}
  1535. {$IFDEF DYNAMIC_LINK}
  1536. var
  1537.   _SymGetLinePrev64: Pointer;
  1538. function SymGetLinePrev64;
  1539. begin
  1540.   GetProcedureAddress(_SymGetLinePrev64, ImageHlpLib, 'SymGetLinePrev64');
  1541.   asm
  1542.     mov esp, ebp
  1543.     pop ebp
  1544.     jmp [_SymGetLinePrev64]
  1545.   end;
  1546. end;
  1547. {$ELSE}
  1548. function SymGetLinePrev64; external ImageHlpLib name 'SymGetLinePrev64';
  1549. {$ENDIF DYNAMIC_LINK}
  1550. {$IFDEF DYNAMIC_LINK}
  1551. var
  1552.   _SymGetLinePrev: Pointer;
  1553. function SymGetLinePrev;
  1554. begin
  1555.   GetProcedureAddress(_SymGetLinePrev, ImageHlpLib, 'SymGetLinePrev');
  1556.   asm
  1557.     mov esp, ebp
  1558.     pop ebp
  1559.     jmp [_SymGetLinePrev]
  1560.   end;
  1561. end;
  1562. {$ELSE}
  1563. function SymGetLinePrev; external ImageHlpLib name 'SymGetLinePrev';
  1564. {$ENDIF DYNAMIC_LINK}
  1565. {$IFDEF DYNAMIC_LINK}
  1566. var
  1567.   _SymMatchFileName: Pointer;
  1568. function SymMatchFileName;
  1569. begin
  1570.   GetProcedureAddress(_SymMatchFileName, ImageHlpLib, 'SymMatchFileName');
  1571.   asm
  1572.     mov esp, ebp
  1573.     pop ebp
  1574.     jmp [_SymMatchFileName]
  1575.   end;
  1576. end;
  1577. {$ELSE}
  1578. function SymMatchFileName; external ImageHlpLib name 'SymMatchFileName';
  1579. {$ENDIF DYNAMIC_LINK}
  1580. {$IFDEF DYNAMIC_LINK}
  1581. var
  1582.   _SymInitialize: Pointer;
  1583. function SymInitialize;
  1584. begin
  1585.   GetProcedureAddress(_SymInitialize, ImageHlpLib, 'SymInitialize');
  1586.   asm
  1587.     mov esp, ebp
  1588.     pop ebp
  1589.     jmp [_SymInitialize]
  1590.   end;
  1591. end;
  1592. {$ELSE}
  1593. function SymInitialize; external ImageHlpLib name 'SymInitialize';
  1594. {$ENDIF DYNAMIC_LINK}
  1595. {$IFDEF DYNAMIC_LINK}
  1596. var
  1597.   _SymGetSearchPath: Pointer;
  1598. function SymGetSearchPath;
  1599. begin
  1600.   GetProcedureAddress(_SymGetSearchPath, ImageHlpLib, 'SymGetSearchPath');
  1601.   asm
  1602.     mov esp, ebp
  1603.     pop ebp
  1604.     jmp [_SymGetSearchPath]
  1605.   end;
  1606. end;
  1607. {$ELSE}
  1608. function SymGetSearchPath; external ImageHlpLib name 'SymGetSearchPath';
  1609. {$ENDIF DYNAMIC_LINK}
  1610. {$IFDEF DYNAMIC_LINK}
  1611. var
  1612.   _SymSetSearchPath: Pointer;
  1613. function SymSetSearchPath;
  1614. begin
  1615.   GetProcedureAddress(_SymSetSearchPath, ImageHlpLib, 'SymSetSearchPath');
  1616.   asm
  1617.     mov esp, ebp
  1618.     pop ebp
  1619.     jmp [_SymSetSearchPath]
  1620.   end;
  1621. end;
  1622. {$ELSE}
  1623. function SymSetSearchPath; external ImageHlpLib name 'SymSetSearchPath';
  1624. {$ENDIF DYNAMIC_LINK}
  1625. {$IFDEF DYNAMIC_LINK}
  1626. var
  1627.   _SymLoadModuleEx: Pointer;
  1628. function SymLoadModuleEx;
  1629. begin
  1630.   GetProcedureAddress(_SymLoadModuleEx, ImageHlpLib, 'SymLoadModuleEx');
  1631.   asm
  1632.     mov esp, ebp
  1633.     pop ebp
  1634.     jmp [_SymLoadModuleEx]
  1635.   end;
  1636. end;
  1637. {$ELSE}
  1638. function SymLoadModuleEx; external ImageHlpLib name 'SymLoadModuleEx';
  1639. {$ENDIF DYNAMIC_LINK}
  1640. {$IFDEF DYNAMIC_LINK}
  1641. var
  1642.   _SymLoadModule64: Pointer;
  1643. function SymLoadModule64;
  1644. begin
  1645.   GetProcedureAddress(_SymLoadModule64, ImageHlpLib, 'SymLoadModule64');
  1646.   asm
  1647.     mov esp, ebp
  1648.     pop ebp
  1649.     jmp [_SymLoadModule64]
  1650.   end;
  1651. end;
  1652. {$ELSE}
  1653. function SymLoadModule64; external ImageHlpLib name 'SymLoadModule64';
  1654. {$ENDIF DYNAMIC_LINK}
  1655. {$IFDEF DYNAMIC_LINK}
  1656. var
  1657.   _SymLoadModule: Pointer;
  1658. function SymLoadModule;
  1659. begin
  1660.   GetProcedureAddress(_SymLoadModule, ImageHlpLib, 'SymLoadModule');
  1661.   asm
  1662.     mov esp, ebp
  1663.     pop ebp
  1664.     jmp [_SymLoadModule]
  1665.   end;
  1666. end;
  1667. {$ELSE}
  1668. function SymLoadModule; external ImageHlpLib name 'SymLoadModule';
  1669. {$ENDIF DYNAMIC_LINK}
  1670. {$IFDEF DYNAMIC_LINK}
  1671. var
  1672.   _SymUnloadModule64: Pointer;
  1673. function SymUnloadModule64;
  1674. begin
  1675.   GetProcedureAddress(_SymUnloadModule64, ImageHlpLib, 'SymUnloadModule64');
  1676.   asm
  1677.     mov esp, ebp
  1678.     pop ebp
  1679.     jmp [_SymUnloadModule64]
  1680.   end;
  1681. end;
  1682. {$ELSE}
  1683. function SymUnloadModule64; external ImageHlpLib name 'SymUnloadModule64';
  1684. {$ENDIF DYNAMIC_LINK}
  1685. {$IFDEF DYNAMIC_LINK}
  1686. var
  1687.   _SymUnloadModule: Pointer;
  1688. function SymUnloadModule;
  1689. begin
  1690.   GetProcedureAddress(_SymUnloadModule, ImageHlpLib, 'SymUnloadModule');
  1691.   asm
  1692.     mov esp, ebp
  1693.     pop ebp
  1694.     jmp [_SymUnloadModule]
  1695.   end;
  1696. end;
  1697. {$ELSE}
  1698. function SymUnloadModule; external ImageHlpLib name 'SymUnloadModule';
  1699. {$ENDIF DYNAMIC_LINK}
  1700. {$IFDEF DYNAMIC_LINK}
  1701. var
  1702.   _SymUnDName64: Pointer;
  1703. function SymUnDName64;
  1704. begin
  1705.   GetProcedureAddress(_SymUnDName64, ImageHlpLib, 'SymUnDName64');
  1706.   asm
  1707.     mov esp, ebp
  1708.     pop ebp
  1709.     jmp [_SymUnDName64]
  1710.   end;
  1711. end;
  1712. {$ELSE}
  1713. function SymUnDName64; external ImageHlpLib name 'SymUnDName64';
  1714. {$ENDIF DYNAMIC_LINK}
  1715. {$IFDEF DYNAMIC_LINK}
  1716. var
  1717.   _SymUnDName: Pointer;
  1718. function SymUnDName;
  1719. begin
  1720.   GetProcedureAddress(_SymUnDName, ImageHlpLib, 'SymUnDName');
  1721.   asm
  1722.     mov esp, ebp
  1723.     pop ebp
  1724.     jmp [_SymUnDName]
  1725.   end;
  1726. end;
  1727. {$ELSE}
  1728. function SymUnDName; external ImageHlpLib name 'SymUnDName';
  1729. {$ENDIF DYNAMIC_LINK}
  1730. {$IFDEF DYNAMIC_LINK}
  1731. var
  1732.   _SymRegisterCallback64: Pointer;
  1733. function SymRegisterCallback64;
  1734. begin
  1735.   GetProcedureAddress(_SymRegisterCallback64, ImageHlpLib, 'SymRegisterCallback64');
  1736.   asm
  1737.     mov esp, ebp
  1738.     pop ebp
  1739.     jmp [_SymRegisterCallback64]
  1740.   end;
  1741. end;
  1742. {$ELSE}
  1743. function SymRegisterCallback64; external ImageHlpLib name 'SymRegisterCallback64';
  1744. {$ENDIF DYNAMIC_LINK}
  1745. {$IFDEF DYNAMIC_LINK}
  1746. var
  1747.   _SymRegFuncEntryCallback64: Pointer;
  1748. function SymRegisterFunctionEntryCallback64;
  1749. begin
  1750.   GetProcedureAddress(_SymRegFuncEntryCallback64, ImageHlpLib, 'SymRegisterFunctionEntryCallback64');
  1751.   asm
  1752.     mov esp, ebp
  1753.     pop ebp
  1754.     jmp [_SymRegFuncEntryCallback64]
  1755.   end;
  1756. end;
  1757. {$ELSE}
  1758. function SymRegisterFunctionEntryCallback64; external ImageHlpLib name 'SymRegisterFunctionEntryCallback64';
  1759. {$ENDIF DYNAMIC_LINK}
  1760. {$IFDEF DYNAMIC_LINK}
  1761. var
  1762.   _SymRegisterCallback: Pointer;
  1763. function SymRegisterCallback;
  1764. begin
  1765.   GetProcedureAddress(_SymRegisterCallback, ImageHlpLib, 'SymRegisterCallback');
  1766.   asm
  1767.     mov esp, ebp
  1768.     pop ebp
  1769.     jmp [_SymRegisterCallback]
  1770.   end;
  1771. end;
  1772. {$ELSE}
  1773. function SymRegisterCallback; external ImageHlpLib name 'SymRegisterCallback';
  1774. {$ENDIF DYNAMIC_LINK}
  1775. {$IFDEF DYNAMIC_LINK}
  1776. var
  1777.   _SymRegisterFuncEntryCallback: Pointer;
  1778. function SymRegisterFunctionEntryCallback;
  1779. begin
  1780.   GetProcedureAddress(_SymRegisterFuncEntryCallback, ImageHlpLib, 'SymRegisterFunctionEntryCallback');
  1781.   asm
  1782.     mov esp, ebp
  1783.     pop ebp
  1784.     jmp [_SymRegisterFuncEntryCallback]
  1785.   end;
  1786. end;
  1787. {$ELSE}
  1788. function SymRegisterFunctionEntryCallback; external ImageHlpLib name 'SymRegisterFunctionEntryCallback';
  1789. {$ENDIF DYNAMIC_LINK}
  1790. {$IFDEF DYNAMIC_LINK}
  1791. var
  1792.   _SymSetContext: Pointer;
  1793. function SymSetContext;
  1794. begin
  1795.   GetProcedureAddress(_SymSetContext, ImageHlpLib, 'SymSetContext');
  1796.   asm
  1797.     mov esp, ebp
  1798.     pop ebp
  1799.     jmp [_SymSetContext]
  1800.   end;
  1801. end;
  1802. {$ELSE}
  1803. function SymSetContext; external ImageHlpLib name 'SymSetContext';
  1804. {$ENDIF DYNAMIC_LINK}
  1805. {$IFDEF DYNAMIC_LINK}
  1806. var
  1807.   _SymFromAddr: Pointer;
  1808. function SymFromAddr;
  1809. begin
  1810.   GetProcedureAddress(_SymFromAddr, ImageHlpLib, 'SymFromAddr');
  1811.   asm
  1812.     mov esp, ebp
  1813.     pop ebp
  1814.     jmp [_SymFromAddr]
  1815.   end;
  1816. end;
  1817. {$ELSE}
  1818. function SymFromAddr; external ImageHlpLib name 'SymFromAddr';
  1819. {$ENDIF DYNAMIC_LINK}
  1820. {$IFDEF DYNAMIC_LINK}
  1821. var
  1822.   _SymFromName: Pointer;
  1823. function SymFromName;
  1824. begin
  1825.   GetProcedureAddress(_SymFromName, ImageHlpLib, 'SymFromName');
  1826.   asm
  1827.     mov esp, ebp
  1828.     pop ebp
  1829.     jmp [_SymFromName]
  1830.   end;
  1831. end;
  1832. {$ELSE}
  1833. function SymFromName; external ImageHlpLib name 'SymFromName';
  1834. {$ENDIF DYNAMIC_LINK}
  1835. {$IFDEF DYNAMIC_LINK}
  1836. var
  1837.   _SymEnumSymbolsForAddr: Pointer;
  1838. function SymEnumSymbolsForAddr;
  1839. begin
  1840.   GetProcedureAddress(_SymEnumSymbolsForAddr, ImageHlpLib, 'SymEnumSymbolsForAddr');
  1841.   asm
  1842.     mov esp, ebp
  1843.     pop ebp
  1844.     jmp [_SymEnumSymbolsForAddr]
  1845.   end;
  1846. end;
  1847. {$ELSE}
  1848. function SymEnumSymbolsForAddr; external ImageHlpLib name 'SymEnumSymbolsForAddr';
  1849. {$ENDIF DYNAMIC_LINK}
  1850. {$IFDEF DYNAMIC_LINK}
  1851. var
  1852.   _SymEnumSymbols: Pointer;
  1853. function SymEnumSymbols;
  1854. begin
  1855.   GetProcedureAddress(_SymEnumSymbols, ImageHlpLib, 'SymEnumSymbols');
  1856.   asm
  1857.     mov esp, ebp
  1858.     pop ebp
  1859.     jmp [_SymEnumSymbols]
  1860.   end;
  1861. end;
  1862. {$ELSE}
  1863. function SymEnumSymbols; external ImageHlpLib name 'SymEnumSymbols';
  1864. {$ENDIF DYNAMIC_LINK}
  1865. {$IFDEF DYNAMIC_LINK}
  1866. var
  1867.   _SymGetTypeInfo: Pointer;
  1868. function SymGetTypeInfo;
  1869. begin
  1870.   GetProcedureAddress(_SymGetTypeInfo, ImageHlpLib, 'SymGetTypeInfo');
  1871.   asm
  1872.     mov esp, ebp
  1873.     pop ebp
  1874.     jmp [_SymGetTypeInfo]
  1875.   end;
  1876. end;
  1877. {$ELSE}
  1878. function SymGetTypeInfo; external ImageHlpLib name 'SymGetTypeInfo';
  1879. {$ENDIF DYNAMIC_LINK}
  1880. {$IFDEF DYNAMIC_LINK}
  1881. var
  1882.   _SymEnumTypes: Pointer;
  1883. function SymEnumTypes;
  1884. begin
  1885.   GetProcedureAddress(_SymEnumTypes, ImageHlpLib, 'SymEnumTypes');
  1886.   asm
  1887.     mov esp, ebp
  1888.     pop ebp
  1889.     jmp [_SymEnumTypes]
  1890.   end;
  1891. end;
  1892. {$ELSE}
  1893. function SymEnumTypes; external ImageHlpLib name 'SymEnumTypes';
  1894. {$ENDIF DYNAMIC_LINK}
  1895. {$IFDEF DYNAMIC_LINK}
  1896. var
  1897.   _SymGetTypeFromName: Pointer;
  1898. function SymGetTypeFromName;
  1899. begin
  1900.   GetProcedureAddress(_SymGetTypeFromName, ImageHlpLib, 'SymGetTypeFromName');
  1901.   asm
  1902.     mov esp, ebp
  1903.     pop ebp
  1904.     jmp [_SymGetTypeFromName]
  1905.   end;
  1906. end;
  1907. {$ELSE}
  1908. function SymGetTypeFromName; external ImageHlpLib name 'SymGetTypeFromName';
  1909. {$ENDIF DYNAMIC_LINK}
  1910. {$IFDEF DYNAMIC_LINK}
  1911. var
  1912.   _SymAddSymbol: Pointer;
  1913. function SymAddSymbol;
  1914. begin
  1915.   GetProcedureAddress(_SymAddSymbol, ImageHlpLib, 'SymAddSymbol');
  1916.   asm
  1917.     mov esp, ebp
  1918.     pop ebp
  1919.     jmp [_SymAddSymbol]
  1920.   end;
  1921. end;
  1922. {$ELSE}
  1923. function SymAddSymbol; external ImageHlpLib name 'SymAddSymbol';
  1924. {$ENDIF DYNAMIC_LINK}
  1925. {$IFDEF DYNAMIC_LINK}
  1926. var
  1927.   _SymDeleteSymbol: Pointer;
  1928. function SymDeleteSymbol;
  1929. begin
  1930.   GetProcedureAddress(_SymDeleteSymbol, ImageHlpLib, 'SymDeleteSymbol');
  1931.   asm
  1932.     mov esp, ebp
  1933.     pop ebp
  1934.     jmp [_SymDeleteSymbol]
  1935.   end;
  1936. end;
  1937. {$ELSE}
  1938. function SymDeleteSymbol; external ImageHlpLib name 'SymDeleteSymbol';
  1939. {$ENDIF DYNAMIC_LINK}
  1940. {$IFDEF DYNAMIC_LINK}
  1941. var
  1942.   _DbgHelpCreateUserDump: Pointer;
  1943. function DbgHelpCreateUserDump;
  1944. begin
  1945.   GetProcedureAddress(_DbgHelpCreateUserDump, ImageHlpLib, 'DbgHelpCreateUserDump');
  1946.   asm
  1947.     mov esp, ebp
  1948.     pop ebp
  1949.     jmp [_DbgHelpCreateUserDump]
  1950.   end;
  1951. end;
  1952. {$ELSE}
  1953. function DbgHelpCreateUserDump; external ImageHlpLib name 'DbgHelpCreateUserDump';
  1954. {$ENDIF DYNAMIC_LINK}
  1955. {$IFDEF DYNAMIC_LINK}
  1956. var
  1957.   _DbgHelpCreateUserDumpW: Pointer;
  1958. function DbgHelpCreateUserDumpW;
  1959. begin
  1960.   GetProcedureAddress(_DbgHelpCreateUserDumpW, ImageHlpLib, 'DbgHelpCreateUserDumpW');
  1961.   asm
  1962.     mov esp, ebp
  1963.     pop ebp
  1964.     jmp [_DbgHelpCreateUserDumpW]
  1965.   end;
  1966. end;
  1967. {$ELSE}
  1968. function DbgHelpCreateUserDumpW; external ImageHlpLib name 'DbgHelpCreateUserDumpW';
  1969. {$ENDIF DYNAMIC_LINK}
  1970. {$IFDEF DYNAMIC_LINK}
  1971. var
  1972.   _SymGetSymFromAddr64: Pointer;
  1973. function SymGetSymFromAddr64;
  1974. begin
  1975.   GetProcedureAddress(_SymGetSymFromAddr64, ImageHlpLib, 'SymGetSymFromAddr64');
  1976.   asm
  1977.     mov esp, ebp
  1978.     pop ebp
  1979.     jmp [_SymGetSymFromAddr64]
  1980.   end;
  1981. end;
  1982. {$ELSE}
  1983. function SymGetSymFromAddr64; external ImageHlpLib name 'SymGetSymFromAddr64';
  1984. {$ENDIF DYNAMIC_LINK}
  1985. {$IFDEF DYNAMIC_LINK}
  1986. var
  1987.   _SymGetSymFromAddr: Pointer;
  1988. function SymGetSymFromAddr;
  1989. begin
  1990.   GetProcedureAddress(_SymGetSymFromAddr, ImageHlpLib, 'SymGetSymFromAddr');
  1991.   asm
  1992.     mov esp, ebp
  1993.     pop ebp
  1994.     jmp [_SymGetSymFromAddr]
  1995.   end;
  1996. end;
  1997. {$ELSE}
  1998. function SymGetSymFromAddr; external ImageHlpLib name 'SymGetSymFromAddr';
  1999. {$ENDIF DYNAMIC_LINK}
  2000. {$IFDEF DYNAMIC_LINK}
  2001. var
  2002.   _SymGetSymFromName64: Pointer;
  2003. function SymGetSymFromName64;
  2004. begin
  2005.   GetProcedureAddress(_SymGetSymFromName64, ImageHlpLib, 'SymGetSymFromName64');
  2006.   asm
  2007.     mov esp, ebp
  2008.     pop ebp
  2009.     jmp [_SymGetSymFromName64]
  2010.   end;
  2011. end;
  2012. {$ELSE}
  2013. function SymGetSymFromName64; external ImageHlpLib name 'SymGetSymFromName64';
  2014. {$ENDIF DYNAMIC_LINK}
  2015. {$IFDEF DYNAMIC_LINK}
  2016. var
  2017.   _SymGetSymFromName: Pointer;
  2018. function SymGetSymFromName;
  2019. begin
  2020.   GetProcedureAddress(_SymGetSymFromName, ImageHlpLib, 'SymGetSymFromName');
  2021.   asm
  2022.     mov esp, ebp
  2023.     pop ebp
  2024.     jmp [_SymGetSymFromName]
  2025.   end;
  2026. end;
  2027. {$ELSE}
  2028. function SymGetSymFromName; external ImageHlpLib name 'SymGetSymFromName';
  2029. {$ENDIF DYNAMIC_LINK}
  2030. {$IFDEF DYNAMIC_LINK}
  2031. var
  2032.   _FindFileInPath: Pointer;
  2033. function FindFileInPath;
  2034. begin
  2035.   GetProcedureAddress(_FindFileInPath, ImageHlpLib, 'FindFileInPath');
  2036.   asm
  2037.     mov esp, ebp
  2038.     pop ebp
  2039.     jmp [_FindFileInPath]
  2040.   end;
  2041. end;
  2042. {$ELSE}
  2043. function FindFileInPath; external ImageHlpLib name 'FindFileInPath';
  2044. {$ENDIF DYNAMIC_LINK}
  2045. {$IFDEF DYNAMIC_LINK}
  2046. var
  2047.   _FindFileInSearchPath: Pointer;
  2048. function FindFileInSearchPath;
  2049. begin
  2050.   GetProcedureAddress(_FindFileInSearchPath, ImageHlpLib, 'FindFileInSearchPath');
  2051.   asm
  2052.     mov esp, ebp
  2053.     pop ebp
  2054.     jmp [_FindFileInSearchPath]
  2055.   end;
  2056. end;
  2057. {$ELSE}
  2058. function FindFileInSearchPath; external ImageHlpLib name 'FindFileInSearchPath';
  2059. {$ENDIF DYNAMIC_LINK}
  2060. {$IFDEF DYNAMIC_LINK}
  2061. var
  2062.   _SymEnumSym: Pointer;
  2063. function SymEnumSym;
  2064. begin
  2065.   GetProcedureAddress(_SymEnumSym, ImageHlpLib, 'SymEnumSym');
  2066.   asm
  2067.     mov esp, ebp
  2068.     pop ebp
  2069.     jmp [_SymEnumSym]
  2070.   end;
  2071. end;
  2072. {$ELSE}
  2073. function SymEnumSym; external ImageHlpLib name 'SymEnumSym';
  2074. {$ENDIF DYNAMIC_LINK}
  2075. function RVA_TO_ADDR(Mapping, Rva: Pointer): Pointer;
  2076. begin
  2077.   Result := Pointer(Cardinal(Mapping) + Cardinal(Rva));
  2078. end;
  2079. {$IFDEF DYNAMIC_LINK}
  2080. var
  2081.   _MiniDumpWriteDump: Pointer;
  2082. function MiniDumpWriteDump;
  2083. begin
  2084.   GetProcedureAddress(_MiniDumpWriteDump, ImageHlpLib, 'MiniDumpWriteDump');
  2085.   asm
  2086.     mov esp, ebp
  2087.     pop ebp
  2088.     jmp [_MiniDumpWriteDump]
  2089.   end;
  2090. end;
  2091. {$ELSE}
  2092. function MiniDumpWriteDump; external ImageHlpLib name 'MiniDumpWriteDump';
  2093. {$ENDIF DYNAMIC_LINK}
  2094. {$IFDEF DYNAMIC_LINK}
  2095. var
  2096.   _MiniDumpReadDumpStream: Pointer;
  2097. function MiniDumpReadDumpStream;
  2098. begin
  2099.   GetProcedureAddress(_MiniDumpReadDumpStream, ImageHlpLib, 'MiniDumpReadDumpStream');
  2100.   asm
  2101.     mov esp, ebp
  2102.     pop ebp
  2103.     jmp [_MiniDumpReadDumpStream]
  2104.   end;
  2105. end;
  2106. {$ELSE}
  2107. function MiniDumpReadDumpStream; external ImageHlpLib name 'MiniDumpReadDumpStream';
  2108. {$ENDIF DYNAMIC_LINK}
  2109. end.