File: main.cpp

package info (click to toggle)
distorm3 3.5.2b-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,964 kB
  • sloc: ansic: 11,882; python: 5,245; cs: 1,751; java: 1,484; cpp: 147; makefile: 116
file content (44 lines) | stat: -rw-r--r-- 1,393 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
// diStorm64 library sample
// http://ragestorm.net/distorm/
// Arkon, Stefan, 2005


#include <stdio.h>
#include <stdlib.h>

#pragma comment(lib, "../../distorm.lib")

#include "../../include/distorm.h"

// The number of the array of instructions the decoder function will use to return the disassembled instructions.
// Play with this value for performance...
#define MAX_INSTRUCTIONS (1000)

int main(int argc, char **argv)
{
	_DecodeResult res;
	_DInst decodedInstructions[1000];
	_DecodedInst di;
	unsigned int decodedInstructionsCount = 0, i = 0;
	_OffsetType offset = 0;
	unsigned int dver = distorm_version();
	printf("diStorm version: %d.%d.%d\n", (dver >> 16), ((dver) >> 8) & 0xff, dver & 0xff);

	unsigned char rawData[] = {
		0x0f, 0x01, 0xcb
	};

	_CodeInfo ci = { 0 };
	ci.codeLen = sizeof(rawData);
	ci.code = rawData;
	ci.dt = Decode32Bits;
	ci.features = 0;
	distorm_decompose(&ci, decodedInstructions, 1000, &decodedInstructionsCount);
	//distorm_decode(0, rawData, sizeof(rawData), Decode32Bits, &di, 1, &decodedInstructionsCount);
	for (int i = 0; i < decodedInstructionsCount; i++) {
		distorm_format(&ci, &decodedInstructions[i], &di);
		printf("%08I64x (%02d) %-24s %s%s%s\r\n", di.offset, di.size, (char*)di.instructionHex.p, (char*)di.mnemonic.p, di.operands.length != 0 ? " " : "", (char*)di.operands.p);
	}

	return 0;
}