mirror of
https://github.com/radareorg/radare2.git
synced 2025-02-14 11:01:07 +00:00
Add getbase callback for io (#8392)
This commit is contained in:
parent
60dc5db0bf
commit
50c2965d4a
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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))) {
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user