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