blob: ddaba9c5906d5bfa9767cabb101c98ca00ac11d7 [file] [log] [blame]
Brian Carlstrom34c06312011-12-05 09:38:27 -08001/*
2 * Copyright 2006 The Android Open Source Project
3 *
4 * jdwpspy common stuff.
5 */
6#ifndef _JDWPSPY_COMMON
7#define _JDWPSPY_COMMON
8
9#include <stdio.h>
10#include <sys/types.h>
11
12typedef unsigned char u1;
13typedef unsigned short u2;
14typedef unsigned int u4;
15typedef unsigned long long u8;
16
17#define NELEM(x) (sizeof(x) / sizeof((x)[0]))
18
19#ifndef _JDWP_MISC_INLINE
20# define INLINE extern inline
21#else
22# define INLINE
23#endif
24
25/*
26 * Get 1 byte. (Included to make the code more legible.)
27 */
28INLINE u1 get1(unsigned const char* pSrc)
29{
30 return *pSrc;
31}
32
33/*
34 * Get 2 big-endian bytes.
35 */
36INLINE u2 get2BE(unsigned char const* pSrc)
37{
38 u2 result;
39
40 result = *pSrc++ << 8;
41 result |= *pSrc++;
42
43 return result;
44}
45
46/*
47 * Get 4 big-endian bytes.
48 */
49INLINE u4 get4BE(unsigned char const* pSrc)
50{
51 u4 result;
52
53 result = *pSrc++ << 24;
54 result |= *pSrc++ << 16;
55 result |= *pSrc++ << 8;
56 result |= *pSrc++;
57
58 return result;
59}
60
61/*
62 * Get 8 big-endian bytes.
63 */
64INLINE u8 get8BE(unsigned char const* pSrc)
65{
66 u8 result;
67
68 result = (u8) *pSrc++ << 56;
69 result |= (u8) *pSrc++ << 48;
70 result |= (u8) *pSrc++ << 40;
71 result |= (u8) *pSrc++ << 32;
72 result |= (u8) *pSrc++ << 24;
73 result |= (u8) *pSrc++ << 16;
74 result |= (u8) *pSrc++ << 8;
75 result |= (u8) *pSrc++;
76
77 return result;
78}
79
80
81/*
82 * Start here.
83 */
84int run(const char* connectHost, int connectPort, int listenPort);
85
86/*
87 * Print a hex dump to the specified file pointer.
88 *
89 * "local" mode prints a hex dump starting from offset 0 (roughly equivalent
90 * to "xxd -g1").
91 *
92 * "mem" mode shows the actual memory address, and will offset the start
93 * so that the low nibble of the address is always zero.
94 */
95typedef enum { kHexDumpLocal, kHexDumpMem } HexDumpMode;
96void printHexDump(const void* vaddr, size_t length);
97void printHexDump2(const void* vaddr, size_t length, const char* prefix);
98void printHexDumpEx(FILE* fp, const void* vaddr, size_t length,
99 HexDumpMode mode, const char* prefix);
100
101#endif /*_JDWPSPY_COMMON*/