hexcore-capstone 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (332) hide show
  1. package/LICENSE +26 -0
  2. package/README.md +191 -0
  3. package/binding.gyp +168 -0
  4. package/deps/capstone/LEB128.h +38 -0
  5. package/deps/capstone/MCDisassembler.h +14 -0
  6. package/deps/capstone/MCFixedLenDisassembler.h +32 -0
  7. package/deps/capstone/MCInst.c +270 -0
  8. package/deps/capstone/MCInst.h +165 -0
  9. package/deps/capstone/MCInstrDesc.c +41 -0
  10. package/deps/capstone/MCInstrDesc.h +167 -0
  11. package/deps/capstone/MCRegisterInfo.c +151 -0
  12. package/deps/capstone/MCRegisterInfo.h +116 -0
  13. package/deps/capstone/Mapping.c +254 -0
  14. package/deps/capstone/Mapping.h +174 -0
  15. package/deps/capstone/MathExtras.h +442 -0
  16. package/deps/capstone/SStream.c +181 -0
  17. package/deps/capstone/SStream.h +40 -0
  18. package/deps/capstone/arch/AArch64/AArch64AddressingModes.h +945 -0
  19. package/deps/capstone/arch/AArch64/AArch64BaseInfo.c +77 -0
  20. package/deps/capstone/arch/AArch64/AArch64BaseInfo.h +585 -0
  21. package/deps/capstone/arch/AArch64/AArch64Disassembler.c +2280 -0
  22. package/deps/capstone/arch/AArch64/AArch64Disassembler.h +18 -0
  23. package/deps/capstone/arch/AArch64/AArch64GenAsmWriter.inc +26589 -0
  24. package/deps/capstone/arch/AArch64/AArch64GenDisassemblerTables.inc +27322 -0
  25. package/deps/capstone/arch/AArch64/AArch64GenInstrInfo.inc +13194 -0
  26. package/deps/capstone/arch/AArch64/AArch64GenRegisterInfo.inc +3814 -0
  27. package/deps/capstone/arch/AArch64/AArch64GenRegisterName.inc +714 -0
  28. package/deps/capstone/arch/AArch64/AArch64GenRegisterV.inc +673 -0
  29. package/deps/capstone/arch/AArch64/AArch64GenSubtargetInfo.inc +229 -0
  30. package/deps/capstone/arch/AArch64/AArch64GenSystemOperands.inc +2863 -0
  31. package/deps/capstone/arch/AArch64/AArch64GenSystemOperands_enum.inc +21 -0
  32. package/deps/capstone/arch/AArch64/AArch64InstPrinter.c +3029 -0
  33. package/deps/capstone/arch/AArch64/AArch64InstPrinter.h +28 -0
  34. package/deps/capstone/arch/AArch64/AArch64Mapping.c +883 -0
  35. package/deps/capstone/arch/AArch64/AArch64Mapping.h +43 -0
  36. package/deps/capstone/arch/AArch64/AArch64MappingInsn.inc +37790 -0
  37. package/deps/capstone/arch/AArch64/AArch64MappingInsnName.inc +1282 -0
  38. package/deps/capstone/arch/AArch64/AArch64MappingInsnOp.inc +26994 -0
  39. package/deps/capstone/arch/AArch64/AArch64Module.c +44 -0
  40. package/deps/capstone/arch/AArch64/AArch64Module.h +12 -0
  41. package/deps/capstone/arch/ARM/ARMAddressingModes.h +698 -0
  42. package/deps/capstone/arch/ARM/ARMBaseInfo.h +486 -0
  43. package/deps/capstone/arch/ARM/ARMDisassembler.c +5763 -0
  44. package/deps/capstone/arch/ARM/ARMDisassembler.h +18 -0
  45. package/deps/capstone/arch/ARM/ARMGenAsmWriter.inc +9545 -0
  46. package/deps/capstone/arch/ARM/ARMGenDisassemblerTables.inc +15185 -0
  47. package/deps/capstone/arch/ARM/ARMGenInstrInfo.inc +6632 -0
  48. package/deps/capstone/arch/ARM/ARMGenRegisterInfo.inc +2102 -0
  49. package/deps/capstone/arch/ARM/ARMGenRegisterName.inc +231 -0
  50. package/deps/capstone/arch/ARM/ARMGenRegisterName_digit.inc +231 -0
  51. package/deps/capstone/arch/ARM/ARMGenSubtargetInfo.inc +162 -0
  52. package/deps/capstone/arch/ARM/ARMGenSystemRegister.inc +270 -0
  53. package/deps/capstone/arch/ARM/ARMInstPrinter.c +3364 -0
  54. package/deps/capstone/arch/ARM/ARMInstPrinter.h +43 -0
  55. package/deps/capstone/arch/ARM/ARMMapping.c +551 -0
  56. package/deps/capstone/arch/ARM/ARMMapping.h +40 -0
  57. package/deps/capstone/arch/ARM/ARMMappingInsn.inc +18772 -0
  58. package/deps/capstone/arch/ARM/ARMMappingInsnName.inc +475 -0
  59. package/deps/capstone/arch/ARM/ARMMappingInsnOp.inc +10729 -0
  60. package/deps/capstone/arch/ARM/ARMModule.c +63 -0
  61. package/deps/capstone/arch/ARM/ARMModule.h +12 -0
  62. package/deps/capstone/arch/BPF/BPFConstants.h +88 -0
  63. package/deps/capstone/arch/BPF/BPFDisassembler.c +464 -0
  64. package/deps/capstone/arch/BPF/BPFDisassembler.h +27 -0
  65. package/deps/capstone/arch/BPF/BPFInstPrinter.c +285 -0
  66. package/deps/capstone/arch/BPF/BPFInstPrinter.h +16 -0
  67. package/deps/capstone/arch/BPF/BPFMapping.c +513 -0
  68. package/deps/capstone/arch/BPF/BPFMapping.h +21 -0
  69. package/deps/capstone/arch/BPF/BPFModule.c +34 -0
  70. package/deps/capstone/arch/BPF/BPFModule.h +12 -0
  71. package/deps/capstone/arch/EVM/EVMDisassembler.c +379 -0
  72. package/deps/capstone/arch/EVM/EVMDisassembler.h +12 -0
  73. package/deps/capstone/arch/EVM/EVMInstPrinter.c +20 -0
  74. package/deps/capstone/arch/EVM/EVMInstPrinter.h +17 -0
  75. package/deps/capstone/arch/EVM/EVMMapping.c +344 -0
  76. package/deps/capstone/arch/EVM/EVMMapping.h +8 -0
  77. package/deps/capstone/arch/EVM/EVMMappingInsn.inc +259 -0
  78. package/deps/capstone/arch/EVM/EVMModule.c +33 -0
  79. package/deps/capstone/arch/EVM/EVMModule.h +12 -0
  80. package/deps/capstone/arch/M680X/M680XDisassembler.c +2307 -0
  81. package/deps/capstone/arch/M680X/M680XDisassembler.h +17 -0
  82. package/deps/capstone/arch/M680X/M680XDisassemblerInternals.h +57 -0
  83. package/deps/capstone/arch/M680X/M680XInstPrinter.c +360 -0
  84. package/deps/capstone/arch/M680X/M680XInstPrinter.h +25 -0
  85. package/deps/capstone/arch/M680X/M680XModule.c +77 -0
  86. package/deps/capstone/arch/M680X/M680XModule.h +12 -0
  87. package/deps/capstone/arch/M680X/cpu12.inc +335 -0
  88. package/deps/capstone/arch/M680X/hcs08.inc +60 -0
  89. package/deps/capstone/arch/M680X/hd6301.inc +15 -0
  90. package/deps/capstone/arch/M680X/hd6309.inc +259 -0
  91. package/deps/capstone/arch/M680X/insn_props.inc +367 -0
  92. package/deps/capstone/arch/M680X/m6800.inc +277 -0
  93. package/deps/capstone/arch/M680X/m6801.inc +39 -0
  94. package/deps/capstone/arch/M680X/m6805.inc +277 -0
  95. package/deps/capstone/arch/M680X/m6808.inc +91 -0
  96. package/deps/capstone/arch/M680X/m6809.inc +352 -0
  97. package/deps/capstone/arch/M680X/m6811.inc +105 -0
  98. package/deps/capstone/arch/M68K/M68KDisassembler.c +3668 -0
  99. package/deps/capstone/arch/M68K/M68KDisassembler.h +30 -0
  100. package/deps/capstone/arch/M68K/M68KInstPrinter.c +387 -0
  101. package/deps/capstone/arch/M68K/M68KInstPrinter.h +21 -0
  102. package/deps/capstone/arch/M68K/M68KInstructionTable.inc +65540 -0
  103. package/deps/capstone/arch/M68K/M68KModule.c +42 -0
  104. package/deps/capstone/arch/M68K/M68KModule.h +12 -0
  105. package/deps/capstone/arch/MOS65XX/MOS65XXDisassembler.c +544 -0
  106. package/deps/capstone/arch/MOS65XX/MOS65XXDisassembler.h +22 -0
  107. package/deps/capstone/arch/MOS65XX/MOS65XXDisassemblerInternals.h +23 -0
  108. package/deps/capstone/arch/MOS65XX/MOS65XXModule.c +79 -0
  109. package/deps/capstone/arch/MOS65XX/MOS65XXModule.h +12 -0
  110. package/deps/capstone/arch/MOS65XX/instruction_info.inc +106 -0
  111. package/deps/capstone/arch/MOS65XX/m6502.inc +256 -0
  112. package/deps/capstone/arch/MOS65XX/m65816.inc +256 -0
  113. package/deps/capstone/arch/MOS65XX/m65c02.inc +256 -0
  114. package/deps/capstone/arch/MOS65XX/mw65c02.inc +256 -0
  115. package/deps/capstone/arch/Mips/MipsDisassembler.c +1794 -0
  116. package/deps/capstone/arch/Mips/MipsDisassembler.h +16 -0
  117. package/deps/capstone/arch/Mips/MipsGenAsmWriter.inc +5725 -0
  118. package/deps/capstone/arch/Mips/MipsGenDisassemblerTables.inc +6942 -0
  119. package/deps/capstone/arch/Mips/MipsGenInstrInfo.inc +1805 -0
  120. package/deps/capstone/arch/Mips/MipsGenRegisterInfo.inc +1679 -0
  121. package/deps/capstone/arch/Mips/MipsGenSubtargetInfo.inc +52 -0
  122. package/deps/capstone/arch/Mips/MipsInstPrinter.c +424 -0
  123. package/deps/capstone/arch/Mips/MipsInstPrinter.h +25 -0
  124. package/deps/capstone/arch/Mips/MipsMapping.c +1070 -0
  125. package/deps/capstone/arch/Mips/MipsMapping.h +25 -0
  126. package/deps/capstone/arch/Mips/MipsMappingInsn.inc +9315 -0
  127. package/deps/capstone/arch/Mips/MipsModule.c +52 -0
  128. package/deps/capstone/arch/Mips/MipsModule.h +12 -0
  129. package/deps/capstone/arch/PowerPC/PPCDisassembler.c +627 -0
  130. package/deps/capstone/arch/PowerPC/PPCDisassembler.h +17 -0
  131. package/deps/capstone/arch/PowerPC/PPCGenAsmWriter.inc +11451 -0
  132. package/deps/capstone/arch/PowerPC/PPCGenDisassemblerTables.inc +6886 -0
  133. package/deps/capstone/arch/PowerPC/PPCGenInstrInfo.inc +4772 -0
  134. package/deps/capstone/arch/PowerPC/PPCGenRegisterInfo.inc +1122 -0
  135. package/deps/capstone/arch/PowerPC/PPCGenRegisterName.inc +278 -0
  136. package/deps/capstone/arch/PowerPC/PPCGenSubtargetInfo.inc +90 -0
  137. package/deps/capstone/arch/PowerPC/PPCInstPrinter.c +1238 -0
  138. package/deps/capstone/arch/PowerPC/PPCInstPrinter.h +15 -0
  139. package/deps/capstone/arch/PowerPC/PPCMapping.c +570 -0
  140. package/deps/capstone/arch/PowerPC/PPCMapping.h +40 -0
  141. package/deps/capstone/arch/PowerPC/PPCMappingInsn.inc +13220 -0
  142. package/deps/capstone/arch/PowerPC/PPCMappingInsnName.inc +1731 -0
  143. package/deps/capstone/arch/PowerPC/PPCModule.c +45 -0
  144. package/deps/capstone/arch/PowerPC/PPCModule.h +12 -0
  145. package/deps/capstone/arch/PowerPC/PPCPredicates.h +62 -0
  146. package/deps/capstone/arch/RISCV/RISCVBaseInfo.h +106 -0
  147. package/deps/capstone/arch/RISCV/RISCVDisassembler.c +433 -0
  148. package/deps/capstone/arch/RISCV/RISCVDisassembler.h +18 -0
  149. package/deps/capstone/arch/RISCV/RISCVGenAsmWriter.inc +2651 -0
  150. package/deps/capstone/arch/RISCV/RISCVGenDisassemblerTables.inc +1776 -0
  151. package/deps/capstone/arch/RISCV/RISCVGenInsnNameMaps.inc +275 -0
  152. package/deps/capstone/arch/RISCV/RISCVGenInstrInfo.inc +470 -0
  153. package/deps/capstone/arch/RISCV/RISCVGenRegisterInfo.inc +426 -0
  154. package/deps/capstone/arch/RISCV/RISCVGenSubtargetInfo.inc +33 -0
  155. package/deps/capstone/arch/RISCV/RISCVInstPrinter.c +447 -0
  156. package/deps/capstone/arch/RISCV/RISCVInstPrinter.h +24 -0
  157. package/deps/capstone/arch/RISCV/RISCVMapping.c +366 -0
  158. package/deps/capstone/arch/RISCV/RISCVMapping.h +22 -0
  159. package/deps/capstone/arch/RISCV/RISCVMappingInsn.inc +1635 -0
  160. package/deps/capstone/arch/RISCV/RISCVModule.c +42 -0
  161. package/deps/capstone/arch/RISCV/RISCVModule.h +12 -0
  162. package/deps/capstone/arch/SH/SHDisassembler.c +2221 -0
  163. package/deps/capstone/arch/SH/SHDisassembler.h +19 -0
  164. package/deps/capstone/arch/SH/SHInsnTable.inc +66 -0
  165. package/deps/capstone/arch/SH/SHInstPrinter.c +438 -0
  166. package/deps/capstone/arch/SH/SHInstPrinter.h +23 -0
  167. package/deps/capstone/arch/SH/SHModule.c +39 -0
  168. package/deps/capstone/arch/SH/SHModule.h +12 -0
  169. package/deps/capstone/arch/SH/mktable.rb +390 -0
  170. package/deps/capstone/arch/Sparc/Sparc.h +63 -0
  171. package/deps/capstone/arch/Sparc/SparcDisassembler.c +500 -0
  172. package/deps/capstone/arch/Sparc/SparcDisassembler.h +17 -0
  173. package/deps/capstone/arch/Sparc/SparcGenAsmWriter.inc +5709 -0
  174. package/deps/capstone/arch/Sparc/SparcGenDisassemblerTables.inc +2028 -0
  175. package/deps/capstone/arch/Sparc/SparcGenInstrInfo.inc +514 -0
  176. package/deps/capstone/arch/Sparc/SparcGenRegisterInfo.inc +451 -0
  177. package/deps/capstone/arch/Sparc/SparcGenSubtargetInfo.inc +27 -0
  178. package/deps/capstone/arch/Sparc/SparcInstPrinter.c +446 -0
  179. package/deps/capstone/arch/Sparc/SparcInstPrinter.h +17 -0
  180. package/deps/capstone/arch/Sparc/SparcMapping.c +665 -0
  181. package/deps/capstone/arch/Sparc/SparcMapping.h +34 -0
  182. package/deps/capstone/arch/Sparc/SparcMappingInsn.inc +2643 -0
  183. package/deps/capstone/arch/Sparc/SparcModule.c +45 -0
  184. package/deps/capstone/arch/Sparc/SparcModule.h +12 -0
  185. package/deps/capstone/arch/SystemZ/SystemZDisassembler.c +484 -0
  186. package/deps/capstone/arch/SystemZ/SystemZDisassembler.h +17 -0
  187. package/deps/capstone/arch/SystemZ/SystemZGenAsmWriter.inc +11575 -0
  188. package/deps/capstone/arch/SystemZ/SystemZGenDisassemblerTables.inc +10262 -0
  189. package/deps/capstone/arch/SystemZ/SystemZGenInsnNameMaps.inc +2348 -0
  190. package/deps/capstone/arch/SystemZ/SystemZGenInstrInfo.inc +2820 -0
  191. package/deps/capstone/arch/SystemZ/SystemZGenRegisterInfo.inc +741 -0
  192. package/deps/capstone/arch/SystemZ/SystemZGenSubtargetInfo.inc +49 -0
  193. package/deps/capstone/arch/SystemZ/SystemZInstPrinter.c +433 -0
  194. package/deps/capstone/arch/SystemZ/SystemZInstPrinter.h +15 -0
  195. package/deps/capstone/arch/SystemZ/SystemZMCTargetDesc.c +195 -0
  196. package/deps/capstone/arch/SystemZ/SystemZMCTargetDesc.h +51 -0
  197. package/deps/capstone/arch/SystemZ/SystemZMapping.c +479 -0
  198. package/deps/capstone/arch/SystemZ/SystemZMapping.h +23 -0
  199. package/deps/capstone/arch/SystemZ/SystemZMappingInsn.inc +14175 -0
  200. package/deps/capstone/arch/SystemZ/SystemZModule.c +44 -0
  201. package/deps/capstone/arch/SystemZ/SystemZModule.h +12 -0
  202. package/deps/capstone/arch/TMS320C64x/TMS320C64xDisassembler.c +628 -0
  203. package/deps/capstone/arch/TMS320C64x/TMS320C64xDisassembler.h +19 -0
  204. package/deps/capstone/arch/TMS320C64x/TMS320C64xGenAsmWriter.inc +684 -0
  205. package/deps/capstone/arch/TMS320C64x/TMS320C64xGenDisassemblerTables.inc +1352 -0
  206. package/deps/capstone/arch/TMS320C64x/TMS320C64xGenInstrInfo.inc +298 -0
  207. package/deps/capstone/arch/TMS320C64x/TMS320C64xGenRegisterInfo.inc +277 -0
  208. package/deps/capstone/arch/TMS320C64x/TMS320C64xInstPrinter.c +572 -0
  209. package/deps/capstone/arch/TMS320C64x/TMS320C64xInstPrinter.h +15 -0
  210. package/deps/capstone/arch/TMS320C64x/TMS320C64xMapping.c +1926 -0
  211. package/deps/capstone/arch/TMS320C64x/TMS320C64xMapping.h +26 -0
  212. package/deps/capstone/arch/TMS320C64x/TMS320C64xModule.c +39 -0
  213. package/deps/capstone/arch/TMS320C64x/TMS320C64xModule.h +12 -0
  214. package/deps/capstone/arch/TriCore/TriCore.td +134 -0
  215. package/deps/capstone/arch/TriCore/TriCoreCallingConv.td +61 -0
  216. package/deps/capstone/arch/TriCore/TriCoreDisassembler.c +1655 -0
  217. package/deps/capstone/arch/TriCore/TriCoreDisassembler.h +18 -0
  218. package/deps/capstone/arch/TriCore/TriCoreGenAsmWriter.inc +3691 -0
  219. package/deps/capstone/arch/TriCore/TriCoreGenCSFeatureName.inc +22 -0
  220. package/deps/capstone/arch/TriCore/TriCoreGenCSMappingInsn.inc +8938 -0
  221. package/deps/capstone/arch/TriCore/TriCoreGenCSMappingInsnName.inc +404 -0
  222. package/deps/capstone/arch/TriCore/TriCoreGenCSMappingInsnOp.inc +7994 -0
  223. package/deps/capstone/arch/TriCore/TriCoreGenCSOpGroup.inc +32 -0
  224. package/deps/capstone/arch/TriCore/TriCoreGenDisassemblerTables.inc +4044 -0
  225. package/deps/capstone/arch/TriCore/TriCoreGenInstrInfo.inc +2693 -0
  226. package/deps/capstone/arch/TriCore/TriCoreGenRegisterInfo.inc +295 -0
  227. package/deps/capstone/arch/TriCore/TriCoreGenSubtargetInfo.inc +40 -0
  228. package/deps/capstone/arch/TriCore/TriCoreInstPrinter.c +488 -0
  229. package/deps/capstone/arch/TriCore/TriCoreInstrFormats.td +773 -0
  230. package/deps/capstone/arch/TriCore/TriCoreInstrInfo.td +1873 -0
  231. package/deps/capstone/arch/TriCore/TriCoreLinkage.h +21 -0
  232. package/deps/capstone/arch/TriCore/TriCoreMapping.c +241 -0
  233. package/deps/capstone/arch/TriCore/TriCoreMapping.h +32 -0
  234. package/deps/capstone/arch/TriCore/TriCoreModule.c +44 -0
  235. package/deps/capstone/arch/TriCore/TriCoreModule.h +11 -0
  236. package/deps/capstone/arch/TriCore/TriCoreRegisterInfo.td +153 -0
  237. package/deps/capstone/arch/WASM/WASMDisassembler.c +1009 -0
  238. package/deps/capstone/arch/WASM/WASMDisassembler.h +12 -0
  239. package/deps/capstone/arch/WASM/WASMInstPrinter.c +47 -0
  240. package/deps/capstone/arch/WASM/WASMInstPrinter.h +18 -0
  241. package/deps/capstone/arch/WASM/WASMMapping.c +333 -0
  242. package/deps/capstone/arch/WASM/WASMMapping.h +9 -0
  243. package/deps/capstone/arch/WASM/WASMModule.c +33 -0
  244. package/deps/capstone/arch/WASM/WASMModule.h +12 -0
  245. package/deps/capstone/arch/X86/X86ATTInstPrinter.c +997 -0
  246. package/deps/capstone/arch/X86/X86BaseInfo.h +50 -0
  247. package/deps/capstone/arch/X86/X86Disassembler.c +1033 -0
  248. package/deps/capstone/arch/X86/X86Disassembler.h +28 -0
  249. package/deps/capstone/arch/X86/X86DisassemblerDecoder.c +2358 -0
  250. package/deps/capstone/arch/X86/X86DisassemblerDecoder.h +725 -0
  251. package/deps/capstone/arch/X86/X86DisassemblerDecoderCommon.h +483 -0
  252. package/deps/capstone/arch/X86/X86GenAsmWriter.inc +49199 -0
  253. package/deps/capstone/arch/X86/X86GenAsmWriter1.inc +33196 -0
  254. package/deps/capstone/arch/X86/X86GenAsmWriter1_reduce.inc +2531 -0
  255. package/deps/capstone/arch/X86/X86GenAsmWriter_reduce.inc +2855 -0
  256. package/deps/capstone/arch/X86/X86GenDisassemblerTables.inc +112961 -0
  257. package/deps/capstone/arch/X86/X86GenDisassemblerTables2.inc +102151 -0
  258. package/deps/capstone/arch/X86/X86GenDisassemblerTables_reduce.inc +28047 -0
  259. package/deps/capstone/arch/X86/X86GenDisassemblerTables_reduce2.inc +18827 -0
  260. package/deps/capstone/arch/X86/X86GenInstrInfo.inc +15158 -0
  261. package/deps/capstone/arch/X86/X86GenInstrInfo_reduce.inc +1564 -0
  262. package/deps/capstone/arch/X86/X86GenRegisterInfo.inc +1549 -0
  263. package/deps/capstone/arch/X86/X86GenRegisterName.inc +292 -0
  264. package/deps/capstone/arch/X86/X86GenRegisterName1.inc +291 -0
  265. package/deps/capstone/arch/X86/X86ImmSize.inc +335 -0
  266. package/deps/capstone/arch/X86/X86InstPrinter.h +26 -0
  267. package/deps/capstone/arch/X86/X86InstPrinterCommon.c +116 -0
  268. package/deps/capstone/arch/X86/X86InstPrinterCommon.h +16 -0
  269. package/deps/capstone/arch/X86/X86IntelInstPrinter.c +1061 -0
  270. package/deps/capstone/arch/X86/X86Lookup16.inc +16874 -0
  271. package/deps/capstone/arch/X86/X86Lookup16_reduce.inc +2308 -0
  272. package/deps/capstone/arch/X86/X86Mapping.c +2266 -0
  273. package/deps/capstone/arch/X86/X86Mapping.h +96 -0
  274. package/deps/capstone/arch/X86/X86MappingInsn.inc +105977 -0
  275. package/deps/capstone/arch/X86/X86MappingInsnName.inc +1527 -0
  276. package/deps/capstone/arch/X86/X86MappingInsnName_reduce.inc +348 -0
  277. package/deps/capstone/arch/X86/X86MappingInsnOp.inc +75700 -0
  278. package/deps/capstone/arch/X86/X86MappingInsnOp_reduce.inc +7729 -0
  279. package/deps/capstone/arch/X86/X86MappingInsn_reduce.inc +10819 -0
  280. package/deps/capstone/arch/X86/X86MappingReg.inc +280 -0
  281. package/deps/capstone/arch/X86/X86Module.c +94 -0
  282. package/deps/capstone/arch/X86/X86Module.h +12 -0
  283. package/deps/capstone/arch/XCore/XCoreDisassembler.c +794 -0
  284. package/deps/capstone/arch/XCore/XCoreDisassembler.h +17 -0
  285. package/deps/capstone/arch/XCore/XCoreGenAsmWriter.inc +772 -0
  286. package/deps/capstone/arch/XCore/XCoreGenDisassemblerTables.inc +853 -0
  287. package/deps/capstone/arch/XCore/XCoreGenInstrInfo.inc +267 -0
  288. package/deps/capstone/arch/XCore/XCoreGenRegisterInfo.inc +110 -0
  289. package/deps/capstone/arch/XCore/XCoreInstPrinter.c +250 -0
  290. package/deps/capstone/arch/XCore/XCoreInstPrinter.h +18 -0
  291. package/deps/capstone/arch/XCore/XCoreMapping.c +297 -0
  292. package/deps/capstone/arch/XCore/XCoreMapping.h +26 -0
  293. package/deps/capstone/arch/XCore/XCoreMappingInsn.inc +1287 -0
  294. package/deps/capstone/arch/XCore/XCoreModule.c +41 -0
  295. package/deps/capstone/arch/XCore/XCoreModule.h +12 -0
  296. package/deps/capstone/cs.c +1664 -0
  297. package/deps/capstone/cs_priv.h +101 -0
  298. package/deps/capstone/cs_simple_types.h +886 -0
  299. package/deps/capstone/include/capstone/arm.h +991 -0
  300. package/deps/capstone/include/capstone/arm64.h +3159 -0
  301. package/deps/capstone/include/capstone/bpf.h +209 -0
  302. package/deps/capstone/include/capstone/capstone.h +875 -0
  303. package/deps/capstone/include/capstone/evm.h +188 -0
  304. package/deps/capstone/include/capstone/m680x.h +537 -0
  305. package/deps/capstone/include/capstone/m68k.h +613 -0
  306. package/deps/capstone/include/capstone/mips.h +956 -0
  307. package/deps/capstone/include/capstone/mos65xx.h +204 -0
  308. package/deps/capstone/include/capstone/platform.h +122 -0
  309. package/deps/capstone/include/capstone/ppc.h +2108 -0
  310. package/deps/capstone/include/capstone/riscv.h +531 -0
  311. package/deps/capstone/include/capstone/sh.h +465 -0
  312. package/deps/capstone/include/capstone/sparc.h +520 -0
  313. package/deps/capstone/include/capstone/systemz.h +2601 -0
  314. package/deps/capstone/include/capstone/tms320c64x.h +359 -0
  315. package/deps/capstone/include/capstone/tricore.h +567 -0
  316. package/deps/capstone/include/capstone/wasm.h +250 -0
  317. package/deps/capstone/include/capstone/x86.h +1986 -0
  318. package/deps/capstone/include/capstone/xcore.h +235 -0
  319. package/deps/capstone/include/platform.h +110 -0
  320. package/deps/capstone/include/windowsce/intrin.h +12 -0
  321. package/deps/capstone/include/windowsce/stdint.h +133 -0
  322. package/deps/capstone/utils.c +140 -0
  323. package/deps/capstone/utils.h +54 -0
  324. package/index.d.ts +448 -0
  325. package/index.js +64 -0
  326. package/index.mjs +25 -0
  327. package/package.json +82 -0
  328. package/prebuilds/win32-x64/hexcore-capstone.node +0 -0
  329. package/src/capstone_wrapper.cpp +910 -0
  330. package/src/capstone_wrapper.h +147 -0
  331. package/src/disasm_async_worker.h +215 -0
  332. package/src/main.cpp +145 -0
@@ -0,0 +1,910 @@
1
+ /*
2
+ * HexCore Capstone - Native Node.js Bindings
3
+ * Capstone Wrapper Implementation
4
+ * Copyright (c) HikariSystem. All rights reserved.
5
+ * Licensed under MIT License.
6
+ */
7
+
8
+ #include "capstone_wrapper.h"
9
+ #include "disasm_async_worker.h"
10
+ #include <cstring>
11
+
12
+ // Static constructor reference
13
+ Napi::FunctionReference CapstoneWrapper::constructor;
14
+
15
+ /**
16
+ * Initialize the class and export it
17
+ */
18
+ Napi::Object CapstoneWrapper::Init(Napi::Env env, Napi::Object exports) {
19
+ Napi::HandleScope scope(env);
20
+
21
+ Napi::Function func = DefineClass(env, "Capstone", {
22
+ InstanceMethod("disasm", &CapstoneWrapper::Disasm),
23
+ InstanceMethod("disasmAsync", &CapstoneWrapper::DisasmAsync),
24
+ InstanceMethod("setOption", &CapstoneWrapper::SetOption),
25
+ InstanceMethod("close", &CapstoneWrapper::Close),
26
+ InstanceMethod("regName", &CapstoneWrapper::RegName),
27
+ InstanceMethod("insnName", &CapstoneWrapper::InsnName),
28
+ InstanceMethod("groupName", &CapstoneWrapper::GroupName),
29
+ InstanceMethod("isOpen", &CapstoneWrapper::IsOpen),
30
+ InstanceMethod("getError", &CapstoneWrapper::GetError),
31
+ InstanceMethod("strError", &CapstoneWrapper::StrError),
32
+ });
33
+
34
+ constructor = Napi::Persistent(func);
35
+ constructor.SuppressDestruct();
36
+
37
+ exports.Set("Capstone", func);
38
+ return exports;
39
+ }
40
+
41
+ /**
42
+ * Constructor - opens Capstone handle
43
+ */
44
+ CapstoneWrapper::CapstoneWrapper(const Napi::CallbackInfo& info)
45
+ : Napi::ObjectWrap<CapstoneWrapper>(info), handle_(0), opened_(false), detailEnabled_(false) {
46
+
47
+ Napi::Env env = info.Env();
48
+
49
+ if (info.Length() < 2) {
50
+ Napi::TypeError::New(env, "Expected 2 arguments: arch and mode")
51
+ .ThrowAsJavaScriptException();
52
+ return;
53
+ }
54
+
55
+ if (!info[0].IsNumber() || !info[1].IsNumber()) {
56
+ Napi::TypeError::New(env, "Arguments must be numbers")
57
+ .ThrowAsJavaScriptException();
58
+ return;
59
+ }
60
+
61
+ arch_ = static_cast<cs_arch>(info[0].As<Napi::Number>().Int32Value());
62
+ mode_ = static_cast<cs_mode>(info[1].As<Napi::Number>().Int32Value());
63
+
64
+ cs_err err = cs_open(arch_, mode_, &handle_);
65
+ if (err != CS_ERR_OK) {
66
+ Napi::Error::New(env, std::string("Failed to open Capstone: ") + cs_strerror(err))
67
+ .ThrowAsJavaScriptException();
68
+ return;
69
+ }
70
+
71
+ opened_ = true;
72
+ }
73
+
74
+ /**
75
+ * Destructor
76
+ */
77
+ CapstoneWrapper::~CapstoneWrapper() {
78
+ if (opened_ && handle_ != 0) {
79
+ cs_close(&handle_);
80
+ opened_ = false;
81
+ }
82
+ }
83
+
84
+ /**
85
+ * Disassemble a buffer
86
+ */
87
+ Napi::Value CapstoneWrapper::Disasm(const Napi::CallbackInfo& info) {
88
+ Napi::Env env = info.Env();
89
+
90
+ if (!opened_) {
91
+ Napi::Error::New(env, "Capstone handle is closed")
92
+ .ThrowAsJavaScriptException();
93
+ return env.Null();
94
+ }
95
+
96
+ if (info.Length() < 2) {
97
+ Napi::TypeError::New(env, "Expected at least 2 arguments: buffer and address")
98
+ .ThrowAsJavaScriptException();
99
+ return env.Null();
100
+ }
101
+
102
+ // Get the code buffer
103
+ Napi::Buffer<uint8_t> codeBuffer;
104
+ const uint8_t* code;
105
+ size_t codeSize;
106
+
107
+ if (info[0].IsBuffer()) {
108
+ codeBuffer = info[0].As<Napi::Buffer<uint8_t>>();
109
+ code = codeBuffer.Data();
110
+ codeSize = codeBuffer.Length();
111
+ } else if (info[0].IsTypedArray()) {
112
+ Napi::TypedArray typedArray = info[0].As<Napi::TypedArray>();
113
+ code = static_cast<const uint8_t*>(typedArray.ArrayBuffer().Data()) + typedArray.ByteOffset();
114
+ codeSize = typedArray.ByteLength();
115
+ } else {
116
+ Napi::TypeError::New(env, "First argument must be a Buffer or Uint8Array")
117
+ .ThrowAsJavaScriptException();
118
+ return env.Null();
119
+ }
120
+
121
+ // Get base address
122
+ if (!info[1].IsNumber()) {
123
+ Napi::TypeError::New(env, "Second argument (address) must be a number")
124
+ .ThrowAsJavaScriptException();
125
+ return env.Null();
126
+ }
127
+ uint64_t address = static_cast<uint64_t>(info[1].As<Napi::Number>().Int64Value());
128
+
129
+ // Get max instructions (optional)
130
+ size_t count = 0; // 0 means disassemble all
131
+ if (info.Length() > 2 && info[2].IsNumber()) {
132
+ count = static_cast<size_t>(info[2].As<Napi::Number>().Uint32Value());
133
+ }
134
+
135
+ // Disassemble
136
+ cs_insn* insn;
137
+ size_t numInsns = cs_disasm(handle_, code, codeSize, address, count, &insn);
138
+
139
+ // Convert to JavaScript array
140
+ Napi::Array result = Napi::Array::New(env, numInsns);
141
+
142
+ for (size_t i = 0; i < numInsns; i++) {
143
+ result.Set(static_cast<uint32_t>(i), InstructionToObject(env, &insn[i]));
144
+ }
145
+
146
+ // Free Capstone-allocated memory
147
+ if (numInsns > 0) {
148
+ cs_free(insn, numInsns);
149
+ }
150
+
151
+ return result;
152
+ }
153
+
154
+ /**
155
+ * Disassemble a buffer asynchronously (non-blocking)
156
+ * Returns a Promise that resolves to an array of instructions
157
+ */
158
+ Napi::Value CapstoneWrapper::DisasmAsync(const Napi::CallbackInfo& info) {
159
+ Napi::Env env = info.Env();
160
+
161
+ if (!opened_) {
162
+ Napi::Error::New(env, "Capstone handle is closed")
163
+ .ThrowAsJavaScriptException();
164
+ return env.Null();
165
+ }
166
+
167
+ if (info.Length() < 2) {
168
+ Napi::TypeError::New(env, "Expected at least 2 arguments: buffer and address")
169
+ .ThrowAsJavaScriptException();
170
+ return env.Null();
171
+ }
172
+
173
+ // Get the code buffer and copy it (worker will own the data)
174
+ std::vector<uint8_t> codeVec;
175
+
176
+ if (info[0].IsBuffer()) {
177
+ Napi::Buffer<uint8_t> codeBuffer = info[0].As<Napi::Buffer<uint8_t>>();
178
+ codeVec.assign(codeBuffer.Data(), codeBuffer.Data() + codeBuffer.Length());
179
+ } else if (info[0].IsTypedArray()) {
180
+ Napi::TypedArray typedArray = info[0].As<Napi::TypedArray>();
181
+ const uint8_t* data = static_cast<const uint8_t*>(typedArray.ArrayBuffer().Data()) + typedArray.ByteOffset();
182
+ codeVec.assign(data, data + typedArray.ByteLength());
183
+ } else {
184
+ Napi::TypeError::New(env, "First argument must be a Buffer or Uint8Array")
185
+ .ThrowAsJavaScriptException();
186
+ return env.Null();
187
+ }
188
+
189
+ // Get base address
190
+ if (!info[1].IsNumber()) {
191
+ Napi::TypeError::New(env, "Second argument (address) must be a number")
192
+ .ThrowAsJavaScriptException();
193
+ return env.Null();
194
+ }
195
+ uint64_t address = static_cast<uint64_t>(info[1].As<Napi::Number>().Int64Value());
196
+
197
+ // Get max instructions (optional)
198
+ size_t count = 0;
199
+ if (info.Length() > 2 && info[2].IsNumber()) {
200
+ count = static_cast<size_t>(info[2].As<Napi::Number>().Uint32Value());
201
+ }
202
+
203
+ // Create and queue the async worker
204
+ DisasmAsyncWorker* worker = new DisasmAsyncWorker(
205
+ env,
206
+ handle_,
207
+ arch_,
208
+ std::move(codeVec),
209
+ address,
210
+ count,
211
+ detailEnabled_
212
+ );
213
+
214
+ worker->Queue();
215
+ return worker->GetPromise();
216
+ }
217
+
218
+ /**
219
+ * Convert a single instruction to a JavaScript object
220
+ */
221
+ Napi::Object CapstoneWrapper::InstructionToObject(Napi::Env env, cs_insn* insn) {
222
+ Napi::Object obj = Napi::Object::New(env);
223
+
224
+ obj.Set("id", Napi::Number::New(env, insn->id));
225
+ obj.Set("address", Napi::Number::New(env, static_cast<double>(insn->address)));
226
+ obj.Set("size", Napi::Number::New(env, insn->size));
227
+ obj.Set("mnemonic", Napi::String::New(env, insn->mnemonic));
228
+ obj.Set("opStr", Napi::String::New(env, insn->op_str));
229
+
230
+ // Copy bytes
231
+ Napi::Buffer<uint8_t> bytes = Napi::Buffer<uint8_t>::Copy(env, insn->bytes, insn->size);
232
+ obj.Set("bytes", bytes);
233
+
234
+ // Add detail if available
235
+ if (insn->detail != nullptr) {
236
+ obj.Set("detail", DetailToObject(env, insn));
237
+ }
238
+
239
+ return obj;
240
+ }
241
+
242
+ /**
243
+ * Convert instruction detail to JavaScript object
244
+ */
245
+ Napi::Object CapstoneWrapper::DetailToObject(Napi::Env env, cs_insn* insn) {
246
+ Napi::Object obj = Napi::Object::New(env);
247
+ cs_detail* detail = insn->detail;
248
+
249
+ // Registers read
250
+ Napi::Array regsRead = Napi::Array::New(env, detail->regs_read_count);
251
+ for (uint8_t i = 0; i < detail->regs_read_count; i++) {
252
+ regsRead.Set(i, Napi::Number::New(env, detail->regs_read[i]));
253
+ }
254
+ obj.Set("regsRead", regsRead);
255
+
256
+ // Registers written
257
+ Napi::Array regsWrite = Napi::Array::New(env, detail->regs_write_count);
258
+ for (uint8_t i = 0; i < detail->regs_write_count; i++) {
259
+ regsWrite.Set(i, Napi::Number::New(env, detail->regs_write[i]));
260
+ }
261
+ obj.Set("regsWrite", regsWrite);
262
+
263
+ // Groups
264
+ Napi::Array groups = Napi::Array::New(env, detail->groups_count);
265
+ for (uint8_t i = 0; i < detail->groups_count; i++) {
266
+ groups.Set(i, Napi::Number::New(env, detail->groups[i]));
267
+ }
268
+ obj.Set("groups", groups);
269
+
270
+ // Architecture-specific detail
271
+ switch (arch_) {
272
+ case CS_ARCH_X86:
273
+ obj.Set("x86", X86DetailToObject(env, &detail->x86));
274
+ break;
275
+ case CS_ARCH_ARM:
276
+ obj.Set("arm", ArmDetailToObject(env, &detail->arm));
277
+ break;
278
+ case CS_ARCH_ARM64:
279
+ obj.Set("arm64", Arm64DetailToObject(env, &detail->arm64));
280
+ break;
281
+ case CS_ARCH_MIPS:
282
+ obj.Set("mips", MipsDetailToObject(env, &detail->mips));
283
+ break;
284
+ case CS_ARCH_PPC:
285
+ obj.Set("ppc", PpcDetailToObject(env, &detail->ppc));
286
+ break;
287
+ case CS_ARCH_SPARC:
288
+ obj.Set("sparc", SparcDetailToObject(env, &detail->sparc));
289
+ break;
290
+ case CS_ARCH_SYSZ:
291
+ obj.Set("sysz", SyszDetailToObject(env, &detail->sysz));
292
+ break;
293
+ case CS_ARCH_XCORE:
294
+ obj.Set("xcore", XcoreDetailToObject(env, &detail->xcore));
295
+ break;
296
+ case CS_ARCH_M68K:
297
+ obj.Set("m68k", M68kDetailToObject(env, &detail->m68k));
298
+ break;
299
+ default:
300
+ break;
301
+ }
302
+
303
+ return obj;
304
+ }
305
+
306
+ /**
307
+ * Convert x86 detail to JavaScript object
308
+ */
309
+ Napi::Object CapstoneWrapper::X86DetailToObject(Napi::Env env, cs_x86* x86) {
310
+ Napi::Object obj = Napi::Object::New(env);
311
+
312
+ // Prefix bytes
313
+ Napi::Array prefix = Napi::Array::New(env, 4);
314
+ for (int i = 0; i < 4; i++) {
315
+ prefix.Set(i, Napi::Number::New(env, x86->prefix[i]));
316
+ }
317
+ obj.Set("prefix", prefix);
318
+
319
+ // Opcode
320
+ Napi::Array opcode = Napi::Array::New(env, 4);
321
+ for (int i = 0; i < 4; i++) {
322
+ opcode.Set(i, Napi::Number::New(env, x86->opcode[i]));
323
+ }
324
+ obj.Set("opcode", opcode);
325
+
326
+ obj.Set("rexPrefix", Napi::Number::New(env, x86->rex));
327
+ obj.Set("addrSize", Napi::Number::New(env, x86->addr_size));
328
+ obj.Set("modRM", Napi::Number::New(env, x86->modrm));
329
+ obj.Set("sib", Napi::Number::New(env, x86->sib));
330
+ obj.Set("disp", Napi::Number::New(env, static_cast<double>(x86->disp)));
331
+ obj.Set("sibIndex", Napi::Number::New(env, x86->sib_index));
332
+ obj.Set("sibScale", Napi::Number::New(env, x86->sib_scale));
333
+ obj.Set("sibBase", Napi::Number::New(env, x86->sib_base));
334
+ obj.Set("xopCC", Napi::Number::New(env, x86->xop_cc));
335
+ obj.Set("sseCC", Napi::Number::New(env, x86->sse_cc));
336
+ obj.Set("avxCC", Napi::Number::New(env, x86->avx_cc));
337
+ obj.Set("avxSAE", Napi::Boolean::New(env, x86->avx_sae));
338
+ obj.Set("avxRM", Napi::Number::New(env, x86->avx_rm));
339
+ obj.Set("eflags", Napi::Number::New(env, static_cast<double>(x86->eflags)));
340
+
341
+ // Operands
342
+ Napi::Array operands = Napi::Array::New(env, x86->op_count);
343
+ for (uint8_t i = 0; i < x86->op_count; i++) {
344
+ cs_x86_op* op = &x86->operands[i];
345
+ Napi::Object opObj = Napi::Object::New(env);
346
+
347
+ opObj.Set("type", Napi::Number::New(env, op->type));
348
+ opObj.Set("size", Napi::Number::New(env, op->size));
349
+ opObj.Set("access", Napi::Number::New(env, op->access));
350
+ opObj.Set("avxBcast", Napi::Number::New(env, op->avx_bcast));
351
+ opObj.Set("avxZeroOpmask", Napi::Boolean::New(env, op->avx_zero_opmask));
352
+
353
+ switch (op->type) {
354
+ case X86_OP_REG:
355
+ opObj.Set("reg", Napi::Number::New(env, op->reg));
356
+ break;
357
+ case X86_OP_IMM:
358
+ opObj.Set("imm", Napi::Number::New(env, static_cast<double>(op->imm)));
359
+ break;
360
+ case X86_OP_MEM:
361
+ {
362
+ Napi::Object mem = Napi::Object::New(env);
363
+ mem.Set("segment", Napi::Number::New(env, op->mem.segment));
364
+ mem.Set("base", Napi::Number::New(env, op->mem.base));
365
+ mem.Set("index", Napi::Number::New(env, op->mem.index));
366
+ mem.Set("scale", Napi::Number::New(env, op->mem.scale));
367
+ mem.Set("disp", Napi::Number::New(env, static_cast<double>(op->mem.disp)));
368
+ opObj.Set("mem", mem);
369
+ }
370
+ break;
371
+ default:
372
+ break;
373
+ }
374
+
375
+ operands.Set(i, opObj);
376
+ }
377
+ obj.Set("operands", operands);
378
+
379
+ return obj;
380
+ }
381
+
382
+ /**
383
+ * Convert ARM detail to JavaScript object
384
+ */
385
+ Napi::Object CapstoneWrapper::ArmDetailToObject(Napi::Env env, cs_arm* arm) {
386
+ Napi::Object obj = Napi::Object::New(env);
387
+
388
+ obj.Set("usermode", Napi::Boolean::New(env, arm->usermode));
389
+ obj.Set("vectorSize", Napi::Number::New(env, arm->vector_size));
390
+ obj.Set("vectorData", Napi::Number::New(env, arm->vector_data));
391
+ obj.Set("cpsMode", Napi::Number::New(env, arm->cps_mode));
392
+ obj.Set("cpsFlag", Napi::Number::New(env, arm->cps_flag));
393
+ obj.Set("cc", Napi::Number::New(env, arm->cc));
394
+ obj.Set("updateFlags", Napi::Boolean::New(env, arm->update_flags));
395
+ obj.Set("writeback", Napi::Boolean::New(env, arm->writeback));
396
+ obj.Set("memBarrier", Napi::Number::New(env, arm->mem_barrier));
397
+
398
+ // Operands (simplified)
399
+ Napi::Array operands = Napi::Array::New(env, arm->op_count);
400
+ for (uint8_t i = 0; i < arm->op_count; i++) {
401
+ cs_arm_op* op = &arm->operands[i];
402
+ Napi::Object opObj = Napi::Object::New(env);
403
+ opObj.Set("type", Napi::Number::New(env, op->type));
404
+ opObj.Set("access", Napi::Number::New(env, op->access));
405
+
406
+ switch (op->type) {
407
+ case ARM_OP_REG:
408
+ opObj.Set("reg", Napi::Number::New(env, op->reg));
409
+ break;
410
+ case ARM_OP_IMM:
411
+ case ARM_OP_PIMM:
412
+ case ARM_OP_CIMM:
413
+ opObj.Set("imm", Napi::Number::New(env, op->imm));
414
+ break;
415
+ case ARM_OP_FP:
416
+ opObj.Set("fp", Napi::Number::New(env, op->fp));
417
+ break;
418
+ default:
419
+ break;
420
+ }
421
+
422
+ operands.Set(i, opObj);
423
+ }
424
+ obj.Set("operands", operands);
425
+
426
+ return obj;
427
+ }
428
+
429
+ /**
430
+ * Convert ARM64 detail to JavaScript object
431
+ */
432
+ Napi::Object CapstoneWrapper::Arm64DetailToObject(Napi::Env env, cs_arm64* arm64) {
433
+ Napi::Object obj = Napi::Object::New(env);
434
+
435
+ obj.Set("cc", Napi::Number::New(env, arm64->cc));
436
+ obj.Set("updateFlags", Napi::Boolean::New(env, arm64->update_flags));
437
+ obj.Set("writeback", Napi::Boolean::New(env, arm64->writeback));
438
+
439
+ // Operands (simplified)
440
+ Napi::Array operands = Napi::Array::New(env, arm64->op_count);
441
+ for (uint8_t i = 0; i < arm64->op_count; i++) {
442
+ cs_arm64_op* op = &arm64->operands[i];
443
+ Napi::Object opObj = Napi::Object::New(env);
444
+ opObj.Set("type", Napi::Number::New(env, op->type));
445
+ opObj.Set("access", Napi::Number::New(env, op->access));
446
+
447
+ switch (op->type) {
448
+ case ARM64_OP_REG:
449
+ opObj.Set("reg", Napi::Number::New(env, op->reg));
450
+ break;
451
+ case ARM64_OP_IMM:
452
+ case ARM64_OP_CIMM:
453
+ opObj.Set("imm", Napi::Number::New(env, static_cast<double>(op->imm)));
454
+ break;
455
+ case ARM64_OP_FP:
456
+ opObj.Set("fp", Napi::Number::New(env, op->fp));
457
+ break;
458
+ default:
459
+ break;
460
+ }
461
+
462
+ operands.Set(i, opObj);
463
+ }
464
+ obj.Set("operands", operands);
465
+
466
+ return obj;
467
+ }
468
+
469
+ /**
470
+ * Convert MIPS detail to JavaScript object
471
+ */
472
+ Napi::Object CapstoneWrapper::MipsDetailToObject(Napi::Env env, cs_mips* mips) {
473
+ Napi::Object obj = Napi::Object::New(env);
474
+
475
+ // Operands
476
+ Napi::Array operands = Napi::Array::New(env, mips->op_count);
477
+ for (uint8_t i = 0; i < mips->op_count; i++) {
478
+ cs_mips_op* op = &mips->operands[i];
479
+ Napi::Object opObj = Napi::Object::New(env);
480
+ opObj.Set("type", Napi::Number::New(env, op->type));
481
+
482
+ switch (op->type) {
483
+ case MIPS_OP_REG:
484
+ opObj.Set("reg", Napi::Number::New(env, op->reg));
485
+ break;
486
+ case MIPS_OP_IMM:
487
+ opObj.Set("imm", Napi::Number::New(env, static_cast<double>(op->imm)));
488
+ break;
489
+ case MIPS_OP_MEM:
490
+ {
491
+ Napi::Object mem = Napi::Object::New(env);
492
+ mem.Set("base", Napi::Number::New(env, op->mem.base));
493
+ mem.Set("disp", Napi::Number::New(env, static_cast<double>(op->mem.disp)));
494
+ opObj.Set("mem", mem);
495
+ }
496
+ break;
497
+ default:
498
+ break;
499
+ }
500
+
501
+ operands.Set(i, opObj);
502
+ }
503
+ obj.Set("operands", operands);
504
+
505
+ return obj;
506
+ }
507
+
508
+ /**
509
+ * Convert PPC detail to JavaScript object
510
+ */
511
+ Napi::Object CapstoneWrapper::PpcDetailToObject(Napi::Env env, cs_ppc* ppc) {
512
+ Napi::Object obj = Napi::Object::New(env);
513
+
514
+ obj.Set("bc", Napi::Number::New(env, ppc->bc));
515
+ obj.Set("bh", Napi::Number::New(env, ppc->bh));
516
+ obj.Set("updateCr0", Napi::Boolean::New(env, ppc->update_cr0));
517
+
518
+ Napi::Array operands = Napi::Array::New(env, ppc->op_count);
519
+ for (uint8_t i = 0; i < ppc->op_count; i++) {
520
+ cs_ppc_op* op = &ppc->operands[i];
521
+ Napi::Object opObj = Napi::Object::New(env);
522
+ opObj.Set("type", Napi::Number::New(env, op->type));
523
+
524
+ switch (op->type) {
525
+ case PPC_OP_REG:
526
+ opObj.Set("reg", Napi::Number::New(env, op->reg));
527
+ break;
528
+ case PPC_OP_IMM:
529
+ opObj.Set("imm", Napi::Number::New(env, static_cast<double>(op->imm)));
530
+ break;
531
+ case PPC_OP_MEM:
532
+ {
533
+ Napi::Object mem = Napi::Object::New(env);
534
+ mem.Set("base", Napi::Number::New(env, op->mem.base));
535
+ mem.Set("disp", Napi::Number::New(env, static_cast<double>(op->mem.disp)));
536
+ opObj.Set("mem", mem);
537
+ }
538
+ break;
539
+ case PPC_OP_CRX:
540
+ {
541
+ Napi::Object crx = Napi::Object::New(env);
542
+ crx.Set("scale", Napi::Number::New(env, op->crx.scale));
543
+ crx.Set("reg", Napi::Number::New(env, op->crx.reg));
544
+ crx.Set("cond", Napi::Number::New(env, op->crx.cond));
545
+ opObj.Set("crx", crx);
546
+ }
547
+ break;
548
+ default:
549
+ break;
550
+ }
551
+ operands.Set(i, opObj);
552
+ }
553
+ obj.Set("operands", operands);
554
+ return obj;
555
+ }
556
+
557
+ /**
558
+ * Convert SPARC detail to JavaScript object
559
+ */
560
+ Napi::Object CapstoneWrapper::SparcDetailToObject(Napi::Env env, cs_sparc* sparc) {
561
+ Napi::Object obj = Napi::Object::New(env);
562
+
563
+ obj.Set("cc", Napi::Number::New(env, sparc->cc));
564
+ obj.Set("hint", Napi::Number::New(env, sparc->hint));
565
+
566
+ Napi::Array operands = Napi::Array::New(env, sparc->op_count);
567
+ for (uint8_t i = 0; i < sparc->op_count; i++) {
568
+ cs_sparc_op* op = &sparc->operands[i];
569
+ Napi::Object opObj = Napi::Object::New(env);
570
+ opObj.Set("type", Napi::Number::New(env, op->type));
571
+
572
+ switch (op->type) {
573
+ case SPARC_OP_REG:
574
+ opObj.Set("reg", Napi::Number::New(env, op->reg));
575
+ break;
576
+ case SPARC_OP_IMM:
577
+ opObj.Set("imm", Napi::Number::New(env, static_cast<double>(op->imm)));
578
+ break;
579
+ case SPARC_OP_MEM:
580
+ {
581
+ Napi::Object mem = Napi::Object::New(env);
582
+ mem.Set("base", Napi::Number::New(env, op->mem.base));
583
+ mem.Set("index", Napi::Number::New(env, op->mem.index));
584
+ mem.Set("disp", Napi::Number::New(env, op->mem.disp));
585
+ opObj.Set("mem", mem);
586
+ }
587
+ break;
588
+ default:
589
+ break;
590
+ }
591
+ operands.Set(i, opObj);
592
+ }
593
+ obj.Set("operands", operands);
594
+ return obj;
595
+ }
596
+
597
+ /**
598
+ * Convert SYSZ detail to JavaScript object
599
+ */
600
+ Napi::Object CapstoneWrapper::SyszDetailToObject(Napi::Env env, cs_sysz* sysz) {
601
+ Napi::Object obj = Napi::Object::New(env);
602
+
603
+ obj.Set("cc", Napi::Number::New(env, sysz->cc));
604
+
605
+ Napi::Array operands = Napi::Array::New(env, sysz->op_count);
606
+ for (uint8_t i = 0; i < sysz->op_count; i++) {
607
+ cs_sysz_op* op = &sysz->operands[i];
608
+ Napi::Object opObj = Napi::Object::New(env);
609
+ opObj.Set("type", Napi::Number::New(env, op->type));
610
+
611
+ switch (op->type) {
612
+ case SYSZ_OP_REG:
613
+ opObj.Set("reg", Napi::Number::New(env, op->reg));
614
+ break;
615
+ case SYSZ_OP_IMM:
616
+ opObj.Set("imm", Napi::Number::New(env, static_cast<double>(op->imm)));
617
+ break;
618
+ case SYSZ_OP_MEM:
619
+ {
620
+ Napi::Object mem = Napi::Object::New(env);
621
+ mem.Set("base", Napi::Number::New(env, op->mem.base));
622
+ mem.Set("index", Napi::Number::New(env, op->mem.index));
623
+ mem.Set("length", Napi::Number::New(env, op->mem.length));
624
+ mem.Set("disp", Napi::Number::New(env, static_cast<double>(op->mem.disp)));
625
+ opObj.Set("mem", mem);
626
+ }
627
+ break;
628
+ default:
629
+ break;
630
+ }
631
+ operands.Set(i, opObj);
632
+ }
633
+ obj.Set("operands", operands);
634
+ return obj;
635
+ }
636
+
637
+ /**
638
+ * Convert XCORE detail to JavaScript object
639
+ */
640
+ Napi::Object CapstoneWrapper::XcoreDetailToObject(Napi::Env env, cs_xcore* xcore) {
641
+ Napi::Object obj = Napi::Object::New(env);
642
+
643
+ Napi::Array operands = Napi::Array::New(env, xcore->op_count);
644
+ for (uint8_t i = 0; i < xcore->op_count; i++) {
645
+ cs_xcore_op* op = &xcore->operands[i];
646
+ Napi::Object opObj = Napi::Object::New(env);
647
+ opObj.Set("type", Napi::Number::New(env, op->type));
648
+
649
+ switch (op->type) {
650
+ case XCORE_OP_REG:
651
+ opObj.Set("reg", Napi::Number::New(env, op->reg));
652
+ break;
653
+ case XCORE_OP_IMM:
654
+ opObj.Set("imm", Napi::Number::New(env, op->imm));
655
+ break;
656
+ case XCORE_OP_MEM:
657
+ {
658
+ Napi::Object mem = Napi::Object::New(env);
659
+ mem.Set("base", Napi::Number::New(env, op->mem.base));
660
+ mem.Set("index", Napi::Number::New(env, op->mem.index));
661
+ mem.Set("disp", Napi::Number::New(env, op->mem.disp));
662
+ mem.Set("direct", Napi::Number::New(env, op->mem.direct));
663
+ opObj.Set("mem", mem);
664
+ }
665
+ break;
666
+ default:
667
+ break;
668
+ }
669
+ operands.Set(i, opObj);
670
+ }
671
+ obj.Set("operands", operands);
672
+ return obj;
673
+ }
674
+
675
+ /**
676
+ * Convert M68K detail to JavaScript object
677
+ */
678
+ Napi::Object CapstoneWrapper::M68kDetailToObject(Napi::Env env, cs_m68k* m68k) {
679
+ Napi::Object obj = Napi::Object::New(env);
680
+
681
+ obj.Set("opSize", Napi::Number::New(env, m68k->op_size.type));
682
+
683
+ Napi::Array operands = Napi::Array::New(env, m68k->op_count);
684
+ for (uint8_t i = 0; i < m68k->op_count; i++) {
685
+ cs_m68k_op* op = &m68k->operands[i];
686
+ Napi::Object opObj = Napi::Object::New(env);
687
+ opObj.Set("type", Napi::Number::New(env, op->type));
688
+ opObj.Set("addressMode", Napi::Number::New(env, op->address_mode));
689
+
690
+ switch (op->type) {
691
+ case M68K_OP_REG:
692
+ opObj.Set("reg", Napi::Number::New(env, op->reg));
693
+ break;
694
+ case M68K_OP_IMM:
695
+ opObj.Set("imm", Napi::Number::New(env, static_cast<double>(op->imm)));
696
+ break;
697
+ case M68K_OP_MEM:
698
+ {
699
+ Napi::Object mem = Napi::Object::New(env);
700
+ mem.Set("baseReg", Napi::Number::New(env, op->mem.base_reg));
701
+ mem.Set("indexReg", Napi::Number::New(env, op->mem.index_reg));
702
+ mem.Set("inBaseReg", Napi::Number::New(env, op->mem.in_base_reg));
703
+ mem.Set("inDisp", Napi::Number::New(env, op->mem.in_disp));
704
+ mem.Set("outDisp", Napi::Number::New(env, op->mem.out_disp));
705
+ mem.Set("disp", Napi::Number::New(env, static_cast<double>(op->mem.disp)));
706
+ mem.Set("scale", Napi::Number::New(env, op->mem.scale));
707
+ mem.Set("bitfield", Napi::Number::New(env, op->mem.bitfield));
708
+ mem.Set("width", Napi::Number::New(env, op->mem.width));
709
+ mem.Set("offset", Napi::Number::New(env, op->mem.offset));
710
+ mem.Set("indexSize", Napi::Number::New(env, op->mem.index_size));
711
+ opObj.Set("mem", mem);
712
+ }
713
+ break;
714
+ case M68K_OP_FP_DOUBLE:
715
+ opObj.Set("fpDouble", Napi::Number::New(env, op->dimm));
716
+ break;
717
+ case M68K_OP_FP_SINGLE:
718
+ opObj.Set("fpSingle", Napi::Number::New(env, op->simm));
719
+ break;
720
+ case M68K_OP_REG_BITS:
721
+ opObj.Set("regBits", Napi::Number::New(env, op->register_bits));
722
+ break;
723
+ case M68K_OP_REG_PAIR:
724
+ {
725
+ Napi::Object regPair = Napi::Object::New(env);
726
+ regPair.Set("reg0", Napi::Number::New(env, op->reg_pair.reg_0));
727
+ regPair.Set("reg1", Napi::Number::New(env, op->reg_pair.reg_1));
728
+ opObj.Set("regPair", regPair);
729
+ }
730
+ break;
731
+ default:
732
+ break;
733
+ }
734
+ operands.Set(i, opObj);
735
+ }
736
+ obj.Set("operands", operands);
737
+ return obj;
738
+ }
739
+
740
+ /**
741
+ * Set Capstone option
742
+ */
743
+ Napi::Value CapstoneWrapper::SetOption(const Napi::CallbackInfo& info) {
744
+ Napi::Env env = info.Env();
745
+
746
+ if (!opened_) {
747
+ Napi::Error::New(env, "Capstone handle is closed")
748
+ .ThrowAsJavaScriptException();
749
+ return env.Null();
750
+ }
751
+
752
+ if (info.Length() < 2 || !info[0].IsNumber() || !info[1].IsNumber()) {
753
+ Napi::TypeError::New(env, "Expected 2 number arguments: type and value")
754
+ .ThrowAsJavaScriptException();
755
+ return env.Null();
756
+ }
757
+
758
+ cs_opt_type type = static_cast<cs_opt_type>(info[0].As<Napi::Number>().Int32Value());
759
+ size_t value = static_cast<size_t>(info[1].As<Napi::Number>().Int64Value());
760
+
761
+ cs_err err = cs_option(handle_, type, value);
762
+ if (err != CS_ERR_OK) {
763
+ Napi::Error::New(env, std::string("Failed to set option: ") + cs_strerror(err))
764
+ .ThrowAsJavaScriptException();
765
+ return Napi::Boolean::New(env, false);
766
+ }
767
+
768
+ // Track detail mode for async worker
769
+ if (type == CS_OPT_DETAIL) {
770
+ detailEnabled_ = (value == CS_OPT_ON);
771
+ }
772
+
773
+ return Napi::Boolean::New(env, true);
774
+ }
775
+
776
+ /**
777
+ * Close the Capstone handle
778
+ */
779
+ Napi::Value CapstoneWrapper::Close(const Napi::CallbackInfo& info) {
780
+ Napi::Env env = info.Env();
781
+
782
+ if (opened_ && handle_ != 0) {
783
+ cs_close(&handle_);
784
+ opened_ = false;
785
+ }
786
+
787
+ return env.Undefined();
788
+ }
789
+
790
+ /**
791
+ * Get register name
792
+ */
793
+ Napi::Value CapstoneWrapper::RegName(const Napi::CallbackInfo& info) {
794
+ Napi::Env env = info.Env();
795
+
796
+ if (!opened_) {
797
+ Napi::Error::New(env, "Capstone handle is closed")
798
+ .ThrowAsJavaScriptException();
799
+ return env.Null();
800
+ }
801
+
802
+ if (info.Length() < 1 || !info[0].IsNumber()) {
803
+ Napi::TypeError::New(env, "Expected register ID as number")
804
+ .ThrowAsJavaScriptException();
805
+ return env.Null();
806
+ }
807
+
808
+ unsigned int regId = info[0].As<Napi::Number>().Uint32Value();
809
+ const char* name = cs_reg_name(handle_, regId);
810
+
811
+ if (name == nullptr) {
812
+ return env.Null();
813
+ }
814
+
815
+ return Napi::String::New(env, name);
816
+ }
817
+
818
+ /**
819
+ * Get instruction name
820
+ */
821
+ Napi::Value CapstoneWrapper::InsnName(const Napi::CallbackInfo& info) {
822
+ Napi::Env env = info.Env();
823
+
824
+ if (!opened_) {
825
+ Napi::Error::New(env, "Capstone handle is closed")
826
+ .ThrowAsJavaScriptException();
827
+ return env.Null();
828
+ }
829
+
830
+ if (info.Length() < 1 || !info[0].IsNumber()) {
831
+ Napi::TypeError::New(env, "Expected instruction ID as number")
832
+ .ThrowAsJavaScriptException();
833
+ return env.Null();
834
+ }
835
+
836
+ unsigned int insnId = info[0].As<Napi::Number>().Uint32Value();
837
+ const char* name = cs_insn_name(handle_, insnId);
838
+
839
+ if (name == nullptr) {
840
+ return env.Null();
841
+ }
842
+
843
+ return Napi::String::New(env, name);
844
+ }
845
+
846
+ /**
847
+ * Get group name
848
+ */
849
+ Napi::Value CapstoneWrapper::GroupName(const Napi::CallbackInfo& info) {
850
+ Napi::Env env = info.Env();
851
+
852
+ if (!opened_) {
853
+ Napi::Error::New(env, "Capstone handle is closed")
854
+ .ThrowAsJavaScriptException();
855
+ return env.Null();
856
+ }
857
+
858
+ if (info.Length() < 1 || !info[0].IsNumber()) {
859
+ Napi::TypeError::New(env, "Expected group ID as number")
860
+ .ThrowAsJavaScriptException();
861
+ return env.Null();
862
+ }
863
+
864
+ unsigned int groupId = info[0].As<Napi::Number>().Uint32Value();
865
+ const char* name = cs_group_name(handle_, groupId);
866
+
867
+ if (name == nullptr) {
868
+ return env.Null();
869
+ }
870
+
871
+ return Napi::String::New(env, name);
872
+ }
873
+
874
+ /**
875
+ * Check if handle is open
876
+ */
877
+ Napi::Value CapstoneWrapper::IsOpen(const Napi::CallbackInfo& info) {
878
+ return Napi::Boolean::New(info.Env(), opened_);
879
+ }
880
+
881
+ /**
882
+ * Get last error code
883
+ */
884
+ Napi::Value CapstoneWrapper::GetError(const Napi::CallbackInfo& info) {
885
+ Napi::Env env = info.Env();
886
+
887
+ if (!opened_) {
888
+ return Napi::Number::New(env, CS_ERR_HANDLE);
889
+ }
890
+
891
+ return Napi::Number::New(env, cs_errno(handle_));
892
+ }
893
+
894
+ /**
895
+ * Get error message string
896
+ */
897
+ Napi::Value CapstoneWrapper::StrError(const Napi::CallbackInfo& info) {
898
+ Napi::Env env = info.Env();
899
+
900
+ cs_err err;
901
+ if (info.Length() > 0 && info[0].IsNumber()) {
902
+ err = static_cast<cs_err>(info[0].As<Napi::Number>().Int32Value());
903
+ } else if (opened_) {
904
+ err = cs_errno(handle_);
905
+ } else {
906
+ err = CS_ERR_HANDLE;
907
+ }
908
+
909
+ return Napi::String::New(env, cs_strerror(err));
910
+ }