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

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 _ASMCODE_H_
  18. #define _ASMCODE_H_
  19. #include "types.h"
  20. #define SIZEOF_PUSHAD (0x20)
  21. #define TEB_OFFSET ((unsigned int)0x18)
  22. #define TEB_LASTERROR ((UCHAR)0x34)
  23. #define REG_EAX ((asmcode)0x30)
  24. #define REG_EBX ((asmcode)0x33)
  25. #define REG_ECX ((asmcode)0x31)
  26. #define REG_EDX ((asmcode)0x32)
  27. #define REG_ESI ((asmcode)0x36)
  28. #define REG_EDI ((asmcode)0x37)
  29. #define REG_ESP ((asmcode)0x24)
  30. #define REG_ESP_PTR ((asmcodew)0x2404)
  31. #define REG_EBP ((asmcodew)0x0075)
  32. #define ADD_EAX ((asmcodew)0xc083)
  33. #define ADD_EBP ((asmcodew)0xc583)
  34. #define ADD_ESP ((asmcodew)0xc483)
  35. #define ADD_EDX ((asmcodew)0xc283)
  36. #define ADD_EAX_EDI_PTR ((asmcodew)0x0703)
  37. #define CALL ((asmcode)0xe8)
  38. #define CMP_EAX ((asmcodew)0x3880)
  39. #define CMP_EAX_INM ((asmcodew)0xf883)
  40. #define INT3 ((asmcode)0xcc)
  41. #define NOP ((asmcode)0x90)
  42. #define JE ((asmcode)0x74)
  43. #define JNE ((asmcode)0x75)
  44. #define JMP ((asmcode)0xe9)
  45. #define LEA ((asmcode)0x8d)
  46. #define LOCK ((asmcode)0xf0)
  47. #define MOV_EAX ((asmcode)0xb8)
  48. #define MOV_EAX_EDI_PTR ((asmcodew)0x078b)
  49. #define MOV_EAX_ESP ((asmcodew)0xc48b)
  50. #define MOV_EAX_FS ((asmcodew)0xA164)
  51. #define MOV_EAX_PTR ((asmcode)0xa1)
  52. #define MOV_EAX_PTR_EDX ((asmcodew)0x1089)
  53. #define MOV_EBP_ESP ((asmcodew)0xec8b)
  54. #define MOV_ECX ((asmcode)0xb9)
  55. #define MOV_ECX_EAX ((asmcodew)0xc88b)
  56. #define MOV_ECX_REG_PTR ((asmcodew)0x0c8b)
  57. #define MOV_ECX_ESP ((asmcodew)0xcc8b)
  58. #define MOV_EDX_ESP ((asmcodew)0xd48b)
  59. #define MOV_EDI ((asmcode)0xbf)
  60. #define MOV_EDI_ESP ((asmcodew)0xfc8b)
  61. #define MOV_EDI_PTR ((asmcodew)0x3d8b)
  62. #define MOV_EDI_PTR_EAX ((asmcodew)0x0789)
  63. #define MOV_ESP ((asmcode)0xbc)
  64. #define MOV_ESP_EAX ((asmcodew)0xe08b)
  65. #define MOV_ESP_PTR ((asmcodew)0x2404)
  66. #define MOV_REG_PTR_INM ((asmcode)0xc7)
  67. #define POPAD ((asmcode)0x61)
  68. #define POP_EAX ((asmcode)0x58)
  69. #define POP_ECX ((asmcode)0x59)
  70. #define POP_EDX ((asmcode)0x5a)
  71. #define POP_EBP ((asmcode)0x5d)
  72. #define POP_EDI ((asmcode)0x5F)
  73. #define POP_ESP ((asmcode)0x5c)
  74. #define POPFD ((asmcode)0x9d)
  75. #define PUSHAD ((asmcode)0x60)
  76. #define PUSH_EAX ((asmcode)0x50)
  77. #define PUSH_EBP ((asmcode)0x55)
  78. #define PUSH_ECX ((asmcode)0x51)
  79. #define PUSH_EDI ((asmcode)0x57)
  80. #define PUSH_EDI_PTR ((asmcodew)0x37ff)
  81. #define PUSH_EDX ((asmcode)0x52)
  82. #define PUSH_ESP ((asmcode)0x54)
  83. #define PUSH_INM ((asmcode)0x68)
  84. #define PUSH_PTR ((asmcode)0xff)
  85. #define PUSHFD ((asmcode)0x9c)
  86. #define RET ((asmcode)0xc3)
  87. #define RET_CLEAN ((asmcode)0xc2)
  88. #define SUB_EAX ((asmcodew)0xe883)
  89. #define SUB_ESP ((asmcodew)0xec81)
  90. // increment the content pointed by the inmediate
  91. #define INC_MEM ((asmcodew)0x05ff)
  92. // decrement the content pointed by the inmediate
  93. #define DEC_MEM ((asmcodew)0x0dff)
  94. #pragma pack(push, 1) //Prevent compiler from reordering the struct
  95. //Single operand class
  96. template <class OP_T>
  97. class NktAsmBase
  98. {
  99. public:
  100. OP_T opcode;
  101. };
  102. //Template Code + Operand class:
  103. template <class OP_T, class PARAM_T, OP_T code>
  104. class NktAsmOp : public NktAsmBase<OP_T>
  105. {
  106. public:
  107. NktAsmOp() { this->opcode = code; }
  108. public:
  109. PARAM_T param;
  110. };
  111. //OP: byte
  112. template <class PARAM_T, asmcode code>
  113. class NktAsmOpByte : public NktAsmOp<asmcode, PARAM_T, code> {};
  114. //OP: word
  115. template <class PARAM_T, asmcodew code>
  116. class NktAsmOpWord : public NktAsmOp<asmcodew, PARAM_T, code> {};
  117. //asm_code: structure to contain asm code.
  118. class NktAsmCode
  119. {
  120. public:
  121. NktAsmCode(const unsigned int size);
  122. NktAsmCode(const NktAsmCode& cp);
  123. ~NktAsmCode();
  124. DV_PTR GetAddress() const;
  125. SIZE_T GetSize() const;
  126. protected:
  127. unsigned int _size;
  128. asmcode* _code;
  129. private:
  130. size_t* _refCount;
  131. };
  132. #pragma pack(pop)
  133. #endif //_ASMCODE_H_