Add getbase callback for io (#8392)

This commit is contained in:
SkUaTeR 2017-08-31 19:52:07 +02:00 committed by radare
parent 60dc5db0bf
commit 50c2965d4a
5 changed files with 35 additions and 8 deletions

View File

@ -1523,14 +1523,7 @@ R_API ut64 r_debug_get_baddr(RDebug *dbg, const char *file) {
return 0LL;
}
#if __WINDOWS__
typedef struct {
int pid;
int tid;
ut64 winbase;
PROCESS_INFORMATION pi;
} RIOW32Dbg;
return ((RIOW32Dbg*)dbg->iob.io->desc->data)->winbase;
//return r_num_get (NULL, winbase_str);
return r_io_desc_get_base (dbg->iob.io->desc);
#else
r_debug_select (dbg, pid, tid);
r_debug_map_sync (dbg);

View File

@ -138,6 +138,7 @@ typedef struct r_io_plugin_t {
bool (*is_blockdevice)(RIODesc *desc);
int (*getpid)(RIODesc *desc);
int (*gettid)(RIODesc *desc);
ut64 (*getbase)(RIODesc *desc);
bool (*resize)(RIO *io, RIODesc *fd, ut64 size);
int (*extend)(RIO *io, RIODesc *fd, ut64 size);
bool (*accept)(RIO *io, RIODesc *desc, int fd);
@ -386,6 +387,7 @@ R_API bool r_io_desc_exchange (RIO *io, int fd, int fdx); //this should get 2 de
R_API bool r_io_desc_is_dbg (RIODesc *desc);
R_API int r_io_desc_get_pid (RIODesc *desc);
R_API int r_io_desc_get_tid (RIODesc *desc);
R_API ut64 r_io_desc_get_base (RIODesc *desc);
R_API int r_io_desc_read_at (RIODesc *desc, ut64 addr, ut8 *buf, int len);
R_API int r_io_desc_write_at (RIODesc *desc, ut64 addr, const ut8 *buf, int len);
R_API bool r_io_desc_fini (RIO *io);
@ -456,6 +458,7 @@ R_API int r_io_fd_write_at (RIO *io, int fd, ut64 addr, const ut8 *buf, int len)
R_API bool r_io_fd_is_dbg (RIO *io, int fd);
R_API int r_io_fd_get_pid (RIO *io, int fd);
R_API int r_io_fd_get_tid (RIO *io, int fd);
R_API int r_io_fd_get_base (RIO *io, int fd);
R_API const char *r_io_fd_get_name (RIO *io, int fd);
R_API int r_io_fd_get_current(RIO *io);
R_API bool r_io_use_fd (RIO *io, int fd);

View File

@ -287,6 +287,23 @@ R_API int r_io_desc_get_tid(RIODesc *desc) {
return desc->plugin->gettid (desc);
}
R_API ut64 r_io_desc_get_base (RIODesc *desc) {
//-1 and -2 are reserved
if (!desc) {
return -3;
}
if (!desc->plugin) {
return -4;
}
if (!desc->plugin->isdbg) {
return -5;
}
if (!desc->plugin->getbase) {
return -6;
}
return desc->plugin->getbase (desc);
}
R_API int r_io_desc_read_at(RIODesc *desc, ut64 addr, ut8 *buf, int len) {
if (desc && buf && (r_io_desc_seek (desc, addr, R_IO_SEEK_SET) == addr)) {
return r_io_desc_read (desc, buf, len);

View File

@ -92,6 +92,14 @@ R_API int r_io_fd_get_tid(RIO *io, int fd) {
return r_io_desc_get_tid (desc);
}
R_API int r_io_fd_get_base (RIO *io, int fd) {
RIODesc *desc;
if (!io || !io->files) {
return -2;
}
desc = r_io_desc_get (io, fd);
return r_io_desc_get_base (desc);
}
R_API const char *r_io_fd_get_name(RIO *io, int fd) {
RIODesc *desc;
if (!io || !io->files || !(desc = r_io_desc_get (io, fd))) {

View File

@ -143,6 +143,11 @@ static int __gettid (RIODesc *fd) {
return iow? iow->tid: -1;
}
static int __getbase (RIODesc *fd) {
RIOW32Dbg *iow = (RIOW32Dbg *)(fd ? fd->data : NULL);
return iow ? iow->winbase: -1;
}
RIOPlugin r_io_plugin_w32dbg = {
.name = "w32dbg",
.desc = "w32dbg io",
@ -156,6 +161,7 @@ RIOPlugin r_io_plugin_w32dbg = {
.write = __write,
.getpid = __getpid,
.gettid = __gettid,
.getbase = __getbase,
.isdbg = true
};
#else