1 /*! \file */
2 #ifndef LIBQNXR_H
3 #define LIBQNXR_H
4 
5 #include <stdint.h>
6 #ifdef _MSC_VER
7 typedef unsigned int ssize_t;
8 typedef int pid_t;
9 #else
10 #include <unistd.h>
11 #endif
12 
13 #include "arch.h"
14 #include "r_types_base.h"
15 #include "r_socket.h"
16 #include "dsmsgs.h"
17 
18 #define MSG_OK 0
19 #define MSG_NOT_SUPPORTED -1
20 #define MSG_ERROR_1 -2
21 
22 #define X86_64 ARCH_X86_64
23 #define X86_32 ARCH_X86_32
24 #define ARM_32 ARCH_ARM_32
25 #define ARM_64 ARCH_ARM_64
26 
27 typedef struct
28 	{
29 	st32 pid;
30 	st64 tid;
31 } ptid_t;
32 
33 /*!
34  * Core "object" that saves
35  * the instance of the lib
36  */
37 typedef struct libqnxr_t {
38 	char *read_buff;
39 	char *send_buff;
40 	ssize_t send_len;
41 	ssize_t read_len;
42 	ssize_t read_ptr;
43 	RSocket *sock;
44 	char host[256];
45 	int port;
46 	int connected;
47 	ut8 mid;
48 	union {
49 		ut8 data[DS_DATA_MAX_SIZE];
50 		DSMsg_union_t pkt;
51 	} tran, recv;
52 	ssize_t data_len;
53 	ut8 architecture;
54 	registers_t *registers;
55 	int channelrd;
56 	int channelwr;
57 	int target_proto_minor;
58 	int target_proto_major;
59 	int stop_flags;
60 	ut8 notify_type;
61 	ut32 stop_pc;
62 	int signal;
63 	ptid_t inferior_ptid;
64 	int waiting_for_stop;
65 } libqnxr_t;
66 
67 typedef void(pidlist_cb_t)(void *ctx, pid_t pid, char *name);
68 
69 int qnxr_init (libqnxr_t *g);
70 int qnxr_set_architecture (libqnxr_t *g, ut8 architecture);
71 int qnxr_cleanup (libqnxr_t *g);
72 int qnxr_connect (libqnxr_t *g, const char *server, int port);
73 int qnxr_disconnect (libqnxr_t *g);
74 void qnxr_pidlist (libqnxr_t *g, void *ctx, pidlist_cb_t *cb);
75 int qnxr_select (libqnxr_t *g, pid_t pid, int tid);
76 ptid_t qnxr_run (libqnxr_t *g, const char *file, char **args, char **env);
77 ptid_t qnxr_attach (libqnxr_t *g, pid_t pid);
78 ptid_t qnxr_wait (libqnxr_t *g, pid_t pid);
79 int qnxr_stop (libqnxr_t *g);
80 
81 // Commands
82 int qnxr_continue (libqnxr_t *g, int thread_id);
83 int qnxr_step (libqnxr_t *g, int thread_id);
84 int qnxr_read_registers (libqnxr_t *g);
85 
86 int qnxr_write_reg (libqnxr_t *g, const char *name, char *value, int len);
87 int qnxr_write_register (libqnxr_t *g, int index, char *value, int len);
88 int qnxr_read_memory (libqnxr_t *g, ut64 address, ut8 *data, ut64 len);
89 int qnxr_write_memory (libqnxr_t *g, ut64 address, const ut8 *data, ut64 len);
90 
91 int qnxr_set_bp (libqnxr_t *g, ut64 address, const char *conditions);
92 int qnxr_set_hwbp (libqnxr_t *g, ut64 address, const char *conditions);
93 int qnxr_remove_bp (libqnxr_t *g, ut64 address);
94 int qnxr_remove_hwbp (libqnxr_t *g, ut64 address);
95 
96 // ptid
97 extern ptid_t null_ptid;
98 int ptid_equal (ptid_t ptid1, ptid_t ptid2);
99 
100 #endif
101