• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
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 
12 typedef unsigned char u1;
13 typedef unsigned short u2;
14 typedef unsigned int u4;
15 typedef 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  */
get1(unsigned const char * pSrc)28 INLINE u1 get1(unsigned const char* pSrc)
29 {
30     return *pSrc;
31 }
32 
33 /*
34  * Get 2 big-endian bytes.
35  */
get2BE(unsigned char const * pSrc)36 INLINE 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  */
get4BE(unsigned char const * pSrc)49 INLINE 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  */
get8BE(unsigned char const * pSrc)64 INLINE 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  */
84 int 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  */
95 typedef enum { kHexDumpLocal, kHexDumpMem } HexDumpMode;
96 void printHexDump(const void* vaddr, size_t length);
97 void printHexDump2(const void* vaddr, size_t length, const char* prefix);
98 void printHexDumpEx(FILE* fp, const void* vaddr, size_t length,
99     HexDumpMode mode, const char* prefix);
100 
101 #endif /*_JDWPSPY_COMMON*/
102