Utils.h
上传用户:kittypts
上传日期:2018-02-11
资源大小:241k
文件大小:3k
源码类别:

PlugIns编程

开发平台:

Visual C++

  1. /*
  2. *
  3. *  This file is
  4. *    Copyright (C) 2006-2008 Nektra S.A.
  5. *  
  6. *  This program is free software; you can redistribute it and/or modify
  7. *  it under the terms of the GNU Lesser General Public License as published by
  8. *  the Free Software Foundation; either version 2, or (at your option)
  9. *  any later version.
  10. *  
  11. *  This program is distributed in the hope that it will be useful,
  12. *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14. *  GNU General Public License for more details.
  15. *  
  16. */
  17. #ifndef _Utils_H_
  18. #define _Utils_H_
  19. #include "VirtualCode.h"
  20. #include "SegmentRange.h"
  21. #include "FunctionWrapper.h"
  22. #define EV_NAME_SIZE 64
  23. namespace NktUtils
  24. {
  25. /**
  26. Finds the minimum set of instructions to remove to install a jump code. 
  27. */
  28. const SIZE_T GetMinJmpSize(const DV_PTR code, SIZE_T jmp_size);
  29. /**
  30. Updates relative indirections in code.
  31. */
  32. void UpdateIndirections(NktVirtualCode& code, const unsigned int prev_base, const unsigned int new_base);
  33. /**
  34. Update indirections in contained code and append jump to specified address.
  35. returns min jump size.
  36. */
  37. void AppendUpdatedJmp(NktVirtualCode& code, const void* dest);
  38. /**
  39. Writes a memory location with the provided code.
  40. */
  41. BOOL WriteMem(const NktVirtualCode& code, void* dest, DWORD pid = GetCurrentProcessId());
  42. /**
  43. Suspends all running threads in a process. <br>
  44. Calling threads is never suspended.
  45. @returns list id of the suspended threads.
  46. */
  47. void SuspendThreads(NktSegmentRange range, OUT NktIdList& suspendedThreads, DWORD processId = GetCurrentProcessId());
  48. /**
  49. Resume suspended threads.
  50. */
  51. void ResumeThreads(NktIdList& suspendedThreads);
  52. /**
  53. Creates code to make a call to a provided funtion.
  54. */
  55. NktVirtualCode CreateCall(const NktFunctionWrapper& fnc, LPCVOID pThis = NULL, bool useJmp = false);
  56. void CreateCall(const NktFunctionWrapper& fnc, OUT NktVirtualCode& code, LPCVOID pThis = NULL, bool useJmp = false);
  57. /**
  58. Creates clean code for a function (if necesary).
  59. */
  60. NktVirtualCode CreateClean(const NktFunctionWrapper& fnc);
  61. void CreateClean(const NktFunctionWrapper& fnc, SIZE_T size, OUT NktVirtualCode& code);
  62. /**
  63. SimpleCallFunction
  64. */
  65. INT_PTR SimpleCallFunction(const NktFunctionWrapper& f, LPCVOID pms, SIZE_T szBytes, LPCVOID pThis = NULL);
  66. /**
  67. Call any function with the specified params.
  68. It will also store LastError, flags & return in EAX.
  69. NOTICE: regBuffer CANNOT be NULL.
  70. FIXME: NO __fastcall support.
  71. */
  72. void CallFunction(const NktFunctionWrapper& fnc, NktRegisters* regBuffer, const void* params = NULL, SIZE_T szBytes = 0);
  73. /**
  74. Debug: Print registers.
  75. */
  76. void DbgPrintRegisters(NktRegisters* reg);
  77. /**
  78. Generate a unique string for the calling thread.
  79. */
  80. int __fastcall GetThreadString(WCHAR* buffer);
  81. };
  82. #endif //_Utils_H_