* Major refactoring in r_syscall

- Requires rebuild, still not fully tested
  - Use r_pair (nosql db) to store all this info
  - Added lot of new platform descriptions for RSyscall
This commit is contained in:
pancake 2011-09-04 05:33:59 +02:00
parent 2c92c7d172
commit 833abfa19b
24 changed files with 1966 additions and 2097 deletions

View File

@ -83,6 +83,7 @@ install-doc-symlink:
install: install-doc install-man
cd libr && ${MAKE} install PARENT=1 PREFIX=${PREFIX} DESTDIR=${DESTDIR}
cd binr && ${MAKE} install PREFIX=${PREFIX} DESTDIR=${DESTDIR}
cd libr/syscall/d ; ${MAKE} install PREFIX=${PREFIX} DESTDIR=${DESTDIR}
install-pkgconfig-symlink:
@${INSTALL_DIR} ${DESTDIR}/${LIBDIR}/pkgconfig
@ -91,10 +92,12 @@ install-pkgconfig-symlink:
symstall install-symlink: install-man-symlink install-doc-symlink install-pkgconfig-symlink
cd libr && ${MAKE} install-symlink PREFIX=${PREFIX} DESTDIR=${DESTDIR}
cd binr && ${MAKE} install-symlink PREFIX=${PREFIX} DESTDIR=${DESTDIR}
cd libr/syscall/d ; ${MAKE} install-symlink PREFIX=${PREFIX} DESTDIR=${DESTDIR}
deinstall uninstall:
cd libr && ${MAKE} uninstall PARENT=1 PREFIX=${PREFIX} DESTDIR=${DESTDIR}
cd binr && ${MAKE} uninstall PARENT=1 PREFIX=${PREFIX} DESTDIR=${DESTDIR}
cd libr/db/d && ${MAKE} uninstall PARENT=1 PREFIX=${PREFIX} DESTDIR=${DESTDIR}
@echo
@echo "Run 'make purge' to also remove installed files from previous versions of r2"
@echo

View File

@ -2,8 +2,6 @@
#include <r_db.h>
#include <r_util.h>
//#undef UT32_MAX
//#undef UT64_MAX
#include "sdb/src/sdb.h"
/*
@ -14,15 +12,29 @@ var out = p.get ("foo")
R_API RPair *r_pair_new () {
RPair *p = R_NEW0 (RPair);
p->file = NULL;
p->sdb = NULL;
p->ht = r_hashtable_new ();
p->dbs = r_list_new ();
p->dbs->free = (RListFree)sdb_free;
return p;
}
R_API RPair *r_pair_new_from_file (const char *file) {
RPair *p = r_pair_new ();
p->file = strdup (file);
p->sdb = sdb_new (file, 0);
return p;
}
R_API void r_pair_free (RPair *p) {
if (p==NULL) return;
r_hashtable_free (p->ht);
r_list_destroy (p->dbs);
if (p->file) {
free (p->file);
sdb_free (p->sdb);
}
free (p->dir);
free (p);
}
@ -52,7 +64,6 @@ static Sdb *pair_sdb_new(RPair *p, const char *dom, ut32 hdom) {
r_sys_rmkdir (p->dir);
r_sys_chdir (p->dir);
}
sdb = sdb_new (dom, 0);
if (old) {
r_sys_chdir (old);
@ -66,9 +77,12 @@ static Sdb *pair_sdb_new(RPair *p, const char *dom, ut32 hdom) {
R_API char *r_pair_get (RPair *p, const char *name) {
Sdb *sdb;
ut32 hdom;
char *dom, *key, *okey = strdup (name);
char *dom, *key, *okey;
key = okey;
if (p->file)
return sdb_get (p->sdb, name);
key = okey = strdup (name);
dom = r_str_lchr (okey, '.');
if (dom) {
char *tmp = okey;
@ -88,8 +102,13 @@ R_API char *r_pair_get (RPair *p, const char *name) {
R_API void r_pair_set (RPair *p, const char *name, const char *value) {
Sdb *sdb;
ut32 hdom;
char *dom, *key = strdup (name);
char *dom, *key;
if (p->file) {
sdb_set (p->sdb, name, value);
return;
}
key = strdup (name);
dom = r_str_lchr (key, '.');
if (dom) {
char *okey = key;
@ -105,8 +124,13 @@ R_API void r_pair_set (RPair *p, const char *name, const char *value) {
}
R_API RList *r_pair_list (RPair *p, const char *domain) {
ut32 hdom = r_str_hash (domain);
Sdb *s = r_hashtable_lookup (p->ht, hdom);
Sdb *s;
if (p->file) {
s = p->sdb;
} else {
ut32 hdom = r_str_hash (domain);
s = r_hashtable_lookup (p->ht, hdom);
}
if (s) {
RList *list = r_list_new ();
char key[SDB_KEYSIZE];
@ -138,9 +162,6 @@ R_API void r_pair_set_sync_dir (RPair *p, const char *dir) {
p->dir = strdup (dir);
}
// use sync dir
//R_API void r_pair_load (RPair *p) { /* TODO */ }
R_API void r_pair_reset (RPair *p) {
Sdb *s;
RListIter *iter;
@ -152,6 +173,10 @@ R_API void r_pair_sync (RPair *p) {
Sdb *s;
char *old = NULL;
RListIter *iter;
if (p->file) {
sdb_sync (p->sdb);
return;
}
if (p->dir) {
old = r_sys_getdir ();
r_sys_rmkdir (p->dir);

View File

@ -7,6 +7,8 @@
// TODO: add support for network. (udp). memcache, with hooks
typedef struct r_pair_t {
char *dir;
char *file;
void *sdb;
RHashTable *ht;
RList *dbs;
} RPair;
@ -66,6 +68,7 @@ R_API RPairItem *r_pair_item_new ();
R_API void r_pair_item_free (RPairItem*);
R_API RPair *r_pair_new ();
R_API RPair *r_pair_new_from_file (const char *file);
R_API void r_pair_free (RPair *p);
R_API void r_pair_delete (RPair *p, const char *name);
R_API char *r_pair_get (RPair *p, const char *name);

View File

@ -4,6 +4,7 @@
#define _INCLUDE_R_SYSCALL_H_
#include <r_types.h>
#include <r_db.h>
#include <list.h>
#define R_SYSCALL_ARGS 6
@ -32,6 +33,7 @@ typedef struct r_syscall_t {
RSyscallRegs *regs;
RSyscallItem *sysptr;
RSyscallPort *sysport;
RPair *syspair;
// TODO: deprecate
PrintfCallback printf;
} RSyscall;
@ -69,7 +71,7 @@ R_API int r_syscall_setup_file(RSyscall *ctx, const char *path);
R_API RSyscallItem *r_syscall_get(RSyscall *ctx, int num, int swi);
R_API int r_syscall_get_num(RSyscall *ctx, const char *str);
R_API RSyscallItem *r_syscall_get_n(RSyscall *ctx, int n); // broken iterator.. must remove
R_API const char *r_syscall_get_i(RSyscall *ctx, int num, int swi); // XXX const char *
R_API char *r_syscall_get_i(RSyscall *ctx, int num, int swi);
R_API const char *r_syscall_reg(RSyscall *s, int idx, int num);
R_API void r_syscall_list(RSyscall *ctx);
#endif

View File

@ -1,6 +1,8 @@
NAME=r_syscall
DEPS=r_util
OBJ=syscall.o freebsd.o netbsd.o linux.o darwin.o win7.o ioports.o openbsd.o
DEPS=r_util r_db
#OBJ=syscall.o freebsd.o netbsd.o linux.o darwin.o win7.o ioports.o openbsd.o
OBJ=syscall.o ioports.o
CFLAGS+=-DLIL_ENDIAN=1 -D__UNIX__ -Wall -g
include ../rules.mk

View File

@ -1,10 +1,45 @@
FILES=netbsd-x86-32
F=
F+= linux-x86-32
F+= linux-arm-32
F+= linux-mips-32
F+= linux-sparc-32
F+= darwin-x86-32
F+= netbsd-x86-32
F+= freebsd-x86-32
F+= openbsd-x86-32
F+= windows-x86-32
all:
@for a in ${FILES} ; do \
echo " SDB $$a.sdb" ; \
sh gen.sh < $$a | sdb $$a.sdb = ; \
# XXX: use config.mk
PREFIX?=/usr
DESTDIR?=
SDB=../../db/sdb/src/sdb
all: ${SDB}
@for a in ${F} ; do \
echo " SDB $$a.sdb" ; \
sh gen.sh < $$a | ${SDB} $$a.sdb = ; \
done
clean:
rm -f *.sdb
${SDB}:
cd ../../db/sdb/src && ${MAKE}
.PHONY: all clean install install-symlink symstall
linux-x86-32.sdb:
${MAKE}
install: linux-x86-32.sdb
mkdir -p ${PREFIX}/lib/radare2/syscall
cp -f *.sdb ${PREFIX}/lib/radare2/syscall
CWD=$(shell pwd)
symstall install-symlink:
mkdir -p ${PREFIX}/lib/radare2/syscall
for a in *.sdb ; do ln -fs ${CWD}/$$a ${PREFIX}/lib/radare2/syscall/$$a ; done
uninstall:
rm -rf ${PREFIX}/lib/radare2/syscall

View File

@ -0,0 +1,107 @@
_=0x80
syscall=0x80,0,4,
exit=0x80,1,1,
fork=0x80,2,0,
read=0x80,3,3,
write=0x80,4,3,
open=0x80,5,3,
close=0x80,6,1,
wait4=0x80,7,3,
old_creat=0x80,8,2,
link=0x80,9,2,
unlink=0x80,10,1,
old_execve=0x80,11,3,
chdir=0x80,12,1,
fchdir=0x80,13,1,
mknod=0x80,14,1,
chmod=0x80,15,1,
chown=0x80,16,1,
break=0x80,17,1,
old_fsstat=0x80,18,1,
old_lseek=0x80,19,1,
getpid=0x80,20,0,
mount=0x80,21,0,
unmount=0x80,22,0,
setuid=0x80,23,1,
getuid=0x80,24,0,
ptrace=0x80,26,4,
recvmsg=0x80,27,4,
sendmsg=0x80,28,4,
recvfrom=0x80,29,4,
accept=0x80,30,4,
getpeername=0x80,31,3,
getsockname=0x80,32,3,
access=0x80,33,2,
chflags=0x80,34,2,
fchflags=0x80,35,2,
sync=0x80,36,0,
kill=0x80,37,2,
dup=0x80,41,2,
pipe=0x80,42,1,
getepid=0x80,43,0,
profil=0x80,44,4,/*
ktrace=0x80,45,4,
getgid=0x80,47,0,
signal=0x80,48,2,
getlogin=0x80,49,0,/*
setlogin=0x80,50,1,/*
acct=0x80,51,1,/*
sigaltstack=0x80,53,2,/*
ioctl=0x80,54,3,
reboot=0x80,55,1,
revoke=0x80,56,1,/*
symlink=0x80,57,2,
readlink=0x80,58,1,
execve=0x80,59,2,
umask=0x80,60,1,
chroot=0x80,61,1,
mmap=0x80,90,6,
munmap=0x80,91,1,
socketcall=0x80,102,2,
sigreturn=0x80,119,1,
clone=0x80,120,4,
mprotect=0x80,125,3,
rt_sigaction=0x80,174,3,
rt_sigprocmask=0x80,175,3,
sysctl=0x80,149,1,
mmap2=0x80,192,6,
fstat64=0x80,197,2,
fcntl64=0x80,221,3,
gettid=0x80,224,0,
set_thread_area=0x80,243,2,
get_thread_area=0x80,244,2,
exit_group=0x80,252,1,
mach_reply_port=0x81,26,1,
thread_self_trap=0x81,27,1,
task_self_trap=0x81,28,1,
host_self_trap=0x81,29,1,
mach_msg_trap=0x81,31,1,
mach_msg_overwrite_trap=0x81,32,1,
semaphore_signal_trap=0x81,33,1,
semaphore_signal_all_trap=0x81,34,1,
semaphore_signal_thread_trap=0x81,35,1,
semaphore_wait_trap=0x81,36,1,
semaphore_wait_signal_trap=0x81,37,1,
semaphore_timedwait_trap=0x81,38,1,
semaphore_timedwait_signal_trap=0x81,39,1,
init_process=0x81,41,1,
map_fd=0x81,43,1,
task_for_pid=0x81,45,1,
pid_for_task=0x81,46,1,
macx_swapon=0x81,48,1,
macx_swapoff=0x81,49,1,
macx_triggers=0x81,51,1,
macx_backing_store_suspend=0x81,52,1,
macx_backing_store_recovery=0x81,53,1,
swtch_pri=0x81,59,1,
swtch=0x81,60,1,
thread_switch=0x81,61,1,
clock_sleep_trap=0x81,62,1,
mach_timebase_info_trap=0x81,89,1,
mach_wait_until_trap=0x81,90,1,
mk_timer_create_trap=0x81,91,1,
mk_timer_destroy_trap=0x81,92,1,
mk_timer_arm_trap=0x81,93,1,
mk_timer_cancel_trap=0x81,94,1,
mk_timebase_info_trap=0x81,95,1,
iokit_user_client_trap=0x81,100,1,

View File

@ -0,0 +1,73 @@
_=0x80
syscall=0x80,0,4,sysnum
exit=0x80,1,1,
fork=0x80,2,0,
read=0x80,3,3,
write=0x80,4,3,
open=0x80,5,3,
close=0x80,6,1,
wait4=0x80,7,3,
old_creat=0x80,8,2,
link=0x80,9,2,
unlink=0x80,10,1,
old_execve=0x80,11,3,
chdir=0x80,12,1,
fchdir=0x80,13,1,
mknod=0x80,14,1,
chmod=0x80,15,1,
chown=0x80,16,1,
break=0x80,17,1,
old_fsstat=0x80,18,1,
old_lseek=0x80,19,1,
getpid=0x80,20,0,
mount=0x80,21,0,
unmount=0x80,22,0,
setuid=0x80,23,1,
getuid=0x80,24,0,
ptrace=0x80,26,4,
recvmsg=0x80,27,4,
sendmsg=0x80,28,4,
recvfrom=0x80,29,4,
accept=0x80,30,4,
getpeername=0x80,31,3,
getsockname=0x80,32,3,
access=0x80,33,2,
chflags=0x80,34,2,
fchflags=0x80,35,2,
sync=0x80,36,0,
kill=0x80,37,2,
dup=0x80,41,2,
pipe=0x80,42,1,
getepid=0x80,43,0,
profil=0x80,44,4,/*
ktrace=0x80,45,4,
getgid=0x80,47,0,
signal=0x80,48,2,
getlogin=0x80,49,0,/*
setlogin=0x80,50,1,/*
acct=0x80,51,1,/*
sigaltstack=0x80,53,2,/*
ioctl=0x80,54,3,
reboot=0x80,55,1,
revoke=0x80,56,1,/*
symlink=0x80,57,2,
readlink=0x80,58,1,
execve=0x80,59,2,
umask=0x80,60,1,
chroot=0x80,61,1,
mmap=0x80,90,6,
munmap=0x80,91,1,
socketcall=0x80,102,2,
sigreturn=0x80,119,1,
clone=0x80,120,4,
mprotect=0x80,125,3,
rt_sigaction=0x80,174,3,
rt_sigprocmask=0x80,175,3,
sysctl=0x80,149,1,
mmap2=0x80,192,6,
fstat64=0x80,197,2,
fcntl64=0x80,221,3,
gettid=0x80,224,0,
set_thread_area=0x80,243,2,
get_thread_area=0x80,244,2,
exit_group=0x80,252,1,

View File

@ -1,4 +1,5 @@
#!/bin/sh
echo "_=0x80"
awk -F '(=|,)' '{
# 0x80.1=exit
print $2"."$3"="$1

View File

@ -0,0 +1,44 @@
_=0x900000
exit=0x900000,1,1,i
fork=0x900000,2,0,
read=0x900000,3,3,ipi
write=0x900000,4,3,izi
open=0x900000,5,3,zxx
close=0x900000,6,1,i
waitpid=0x900000,7,3,ipx
creat=0x900000,8,2,zx
link=0x900000,9,2,zz
unlink=0x900000,10,1,z
execve=0x900000,11,3,zzz
chdir=0x900000,12,1,z
time=0x900000,13,1,p
mknod=0x900000,14,1,zxi
chmod=0x900000,15,1,zx
lchown=0x900000,16,1,zii
getpid=0x900000,20,0,
setuid=0x900000,23,1,i
getuid=0x900000,24,0,
ptrace=0x900000,26,4,
utime=0x900000,30,2,
access=0x900000,33,2,
kill=0x900000,37,2,
dup=0x900000,41,2,
brk=0x900000,45,1,
signal=0x900000,48,2,
ioctl=0x900000,54,3,
mmap=0x900000,90,6,
munmap=0x900000,91,1,
socketcall=0x900000,102,2,
sigreturn=0x900000,119,1,
clone=0x900000,120,4,
mprotect=0x900000,125,3,
rt_sigaction=0x900000,174,3,
rt_sigprocmask=0x900000,175,3,
sysctl=0x900000,149,1,
mmap2=0x900000,192,6,
fstat64=0x900000,197,2,
fcntl64=0x900000,221,3,
gettid=0x900000,224,0,
set_thread_area=0x900000,243,2,
get_thread_area=0x900000,244,2,
exit_group=0x900000,252,1,

View File

@ -0,0 +1,45 @@
_=4000
syscall=4000,1,1,i
exit=4001,1,1,i
fork=4002,2,0,
read=4003,3,3,ipi
write=4004,4,3,izi
open=4005,5,3,zxx
close=4006,6,1,i
waitpid=4007,7,3,ipx
creat=4008,8,2,zx
link=4009,9,2,zz
unlink=4010,10,1,z
execve=4011,11,3,zzz
chdir=4012,12,1,z
time=4013,13,1,p
mknod=4014,14,1,zxi
chmod=4015,15,1,zx
lchown=4016,16,1,zii
getpid=4020,20,0,
setuid=4023,23,1,i
getuid=4024,24,0,
ptrace=4026,26,4,
utime=4030,30,2,
access=4033,33,2,
kill=4037,37,2,
dup=4041,41,2,
brk=4045,45,1,
signal=4048,48,2,
ioctl=4054,54,3,
mmap=4090,90,6,
munmap=4091,91,1,
socketcall=4000+102,102,2,
sigreturn=4000+119,119,1,
clone=4000+120,120,4,
mprotect=4000+125,125,3,
rt_sigaction=4000+174,174,3,
rt_sigprocmask=4000+175,175,3,
sysctl=4000+149,149,1,
mmap2=4000+192,192,6,
fstat64=4000+197,197,2,
fcntl64=4000+221,221,3,
gettid=4000+224,224,0,
set_thread_area=4000+243,243,2,
get_thread_area=4000+244,244,2,
exit_group=4000+252,252,1,

View File

@ -0,0 +1,34 @@
_=0x10
exit=0x10,1,1,i
fork=0x10,2,0,
read=0x10,3,3,ipi
write=0x10,4,3,izi
open=0x10,5,3,zxx
close=0x10,6,1,i
waitpid=0x10,7,3,ipx
creat=0x10,8,2,zx
link=0x10,9,2,zz
unlink=0x10,10,1,z
execve=0x10,11,3,zzz
chdir=0x10,12,1,z
getpid=0x10,20,0,
setuid=0x10,23,1,i
getuid=0x10,24,0,
ptrace=0x10,26,4,
utime=0x10,30,2,
access=0x10,33,2,
kill=0x10,37,2,
dup=0x10,41,2,
brk=0x10,45,1,
signal=0x10,48,2,
ioctl=0x10,54,3,
mmap=0x10,90,6,
munmap=0x10,91,1,
socketcall=0x10,102,2,
sigreturn=0x10,119,1,
clone=0x10,120,4,
mprotect=0x10,125,3,
rt_sigaction=0x10,174,3,
rt_sigprocmask=0x10,175,3,
sysctl=0x10,149,1,
mmap2=0x10,192,6,

View File

@ -0,0 +1,40 @@
_=0x80
exit=0x80,1,1,i
fork=0x80,2,0,
read=0x80,3,3,ipi
write=0x80,4,3,izi
open=0x80,5,3,zxx
close=0x80,6,1,i
waitpid=0x80,7,3,ipx
creat=0x80,8,2,zx
link=0x80,9,2,zz
unlink=0x80,10,1,z
execve=0x80,11,3,zzz
chdir=0x80,12,1,z
getpid=0x80,20,0,
setuid=0x80,23,1,i
getuid=0x80,24,0,
ptrace=0x80,26,4,
utime=0x80,30,2,
access=0x80,33,2,
kill=0x80,37,2,
dup=0x80,41,2,
brk=0x80,45,1,
signal=0x80,48,2,
ioctl=0x80,54,3,
mmap=0x80,90,6,
munmap=0x80,91,1,
socketcall=0x80,102,2,
sigreturn=0x80,119,1,
clone=0x80,120,4,
mprotect=0x80,125,3,
rt_sigaction=0x80,174,3,
rt_sigprocmask=0x80,175,3,
sysctl=0x80,149,1,
mmap2=0x80,192,6,
fstat64=0x80,197,2,
fcntl64=0x80,221,3,
gettid=0x80,224,0,
set_thread_area=0x80,243,2,
get_thread_area=0x80,244,2,
exit_group=0x80,252,1,

View File

@ -1,4 +1,52 @@
syscall=0x80,0,4
exit=0x80,1,1,i
fork=0x80,2,0
read=0x80,3,3,ipi
_=0x80
syscall=0x80,0,4,
exit=0x80,1,1,
fork=0x80,2,0,
read=0x80,3,3,
write=0x80,4,3,
open=0x80,5,3,
close=0x80,6,1,
wait4=0x80,7,3,
compat_43_ocreat=0x80,8,2,
link=0x80,9,2,
unlink=0x80,10,1,
//=execve,0x80,11,3
chdir=0x80,12,1,
fchdir=0x80,13,1,
mknod=0x80,14,1,
chmod=0x80,15,1,
chown=0x80,16,1,
break=0x80,17,1,
getpid=0x80,20,0,
mount=0x80,21,0,
unmount=0x80,22,0,
setuid=0x80,23,1,
getuid=0x80,24,0,
ptrace=0x80,26,4,
recvmsg=0x80,27,4,
sendmsg=0x80,28,4,
recvfrom=0x80,29,4,
accept=0x80,30,4,
access=0x80,33,2,
dup=0x80,41,2,
ktrace=0x80,45,1,
signal=0x80,48,2,
utime=0x80,30,2,
kill=0x80,37,2,
ioctl=0x80,54,3,
mmap=0x80,90,6,
munmap=0x80,91,1,
socketcall=0x80,102,2,
sigreturn=0x80,119,1,
clone=0x80,120,4,
mprotect=0x80,125,3,
rt_sigaction=0x80,174,3,
rt_sigprocmask=0x80,175,3,
sysctl=0x80,149,1,
mmap2=0x80,192,6,
fstat64=0x80,197,2,
fcntl64=0x80,221,3,
gettid=0x80,224,0,
set_thread_area=0x80,243,2,
get_thread_area=0x80,244,2,
exit_group=0x80,252,1,

View File

@ -0,0 +1,189 @@
syscall=0x80,0,2,
exit=0x80,1,1,
fork=0x80,2,0,
read=0x80,3,3,
write=0x80,4,3,
open=0x80,5,3,
close=0x80,6,1,
wait4=0x80,7,4,
link=0x80,9,2,
unlink=0x80,10,1,
chdir=0x80,12,1,
fchdir=0x80,13,1,
mknod=0x80,14,3,
chmod=0x80,15,2,
chown=0x80,16,3,
break=0x80,17,1,
getpid=0x80,20,0,
mount=0x80,21,4,
unmount=0x80,22,2,
setuid=0x80,23,1,
getuid=0x80,24,0,
geteuid=0x80,25,0,
ptrace=0x80,26,4,
recvmsg=0x80,27,3,
sendmsg=0x80,28,3,
recvfrom=0x80,29,6,
accept=0x80,30,3,
getpeername=0x80,31,3,
getsockname=0x80,32,3,
access=0x80,33,2,
chflags=0x80,34,2,
fchflags=0x80,35,2,
sync=0x80,36,0,
kill=0x80,37,2,
getppid=0x80,39,0,
dup=0x80,41,1,
opipe=0x80,42,0,
getegid=0x80,43,0,
profil=0x80,44,4,
ktrace=0x80,45,4,
sigaction=0x80,46,3,
getgid=0x80,47,0,
sigprocmask=0x80,48,2,
getlogin=0x80,49,2,
setlogin=0x80,50,1,
acct=0x80,51,1,
sigpending=0x80,52,0,
osigaltstack=0x80,53,2,
ioctl=0x80,54,3,
reboot=0x80,55,1,
revoke=0x80,56,1,
symlink=0x80,57,2,
readlink=0x80,58,3,
execve=0x80,59,3,
umask=0x80,60,1,
chroot=0x80,61,1,
vfork=0x80,66,0,
sbrk=0x80,69,1,
sstk=0x80,70,1,
munmap=0x80,73,2,
mprotect=0x80,74,3,
madvise=0x80,75,3,
mincore=0x80,78,3,
getgroups=0x80,79,2,
setgroups=0x80,80,2,
getpgrp=0x80,81,0,
setpgid=0x80,82,2,
setitimer=0x80,83,3,
getitimer=0x80,86,2,
dup2=0x80,90,2,
fcntl=0x80,92,3,
select=0x80,93,5,
fsync=0x80,95,1,
setpriority=0x80,96,3,
socket=0x80,97,3,
connect=0x80,98,3,
getpriority=0x80,100,2,
sigreturn=0x80,103,1,
bind=0x80,104,3,
setsockopt=0x80,105,5,
listen=0x80,106,2,
sigsuspend=0x80,111,1,
gettimeofday=0x80,116,2,
getrusage=0x80,117,2,
getsockopt=0x80,118,5,
readv=0x80,120,3,
writev=0x80,121,3,
settimeofday=0x80,122,2,
fchown=0x80,123,3,
fchmod=0x80,124,2,
setreuid=0x80,126,2,
setregid=0x80,127,2,
rename=0x80,128,2,
flock=0x80,131,2,
mkfifo=0x80,132,2,
sendto=0x80,133,6,
shutdown=0x80,134,2,
socketpair=0x80,135,4,
mkdir=0x80,136,2,
rmdir=0x80,137,1,
utimes=0x80,138,2,
adjtime=0x80,140,2,
setsid=0x80,147,0,
quotactl=0x80,148,4,
nfssvc=0x80,155,2,
getfh=0x80,161,2,
sysarch=0x80,165,2,
pread=0x80,173,5,
pwrite=0x80,174,5,
setgid=0x80,181,1,
setegid=0x80,182,1,
seteuid=0x80,183,1,
lfs_bmapv=0x80,184,3,
lfs_markv=0x80,185,3,
lfs_segclean=0x80,186,2,
lfs_segwait=0x80,187,2,
pathconf=0x80,191,2,
fpathconf=0x80,192,2,
swapctl=0x80,193,3,
getrlimit=0x80,194,2,
setrlimit=0x80,195,2,
getdirentries=0x80,196,4,
mmap=0x80,197,7,
__syscall=0x80,198,2,
lseek=0x80,199,4,
truncate=0x80,200,3,
ftruncate=0x80,201,3,
__sysctl=0x80,202,6,
mlock=0x80,203,2,
munlock=0x80,204,2,
futimes=0x80,206,2,
getpgid=0x80,207,1,
nnpfspioctl=0x80,208,5,
semget=0x80,221,3,
msgget=0x80,225,2,
msgsnd=0x80,226,4,
msgrcv=0x80,227,5,
shmat=0x80,228,3,
shmdt=0x80,230,1,
clock_gettime=0x80,232,2,
clock_settime=0x80,233,2,
clock_getres=0x80,234,2,
nanosleep=0x80,240,2,
minherit=0x80,250,3,
rfork=0x80,251,1,
poll=0x80,252,3,
issetugid=0x80,253,0,
lchown=0x80,254,3,
getsid=0x80,255,1,
msync=0x80,256,3,
pipe=0x80,263,1,
fhopen=0x80,264,2,
preadv=0x80,267,5,
pwritev=0x80,268,5,
kqueue=0x80,269,0,
kevent=0x80,270,6,
mlockall=0x80,271,1,
munlockall=0x80,272,0,
getpeereid=0x80,273,3,
getresuid=0x80,281,3,
setresuid=0x80,282,3,
getresgid=0x80,283,3,
setresgid=0x80,284,3,
mquery=0x80,286,7,
closefrom=0x80,287,1,
sigaltstack=0x80,288,2,
shmget=0x80,289,3,
semop=0x80,290,3,
stat=0x80,291,2,
fstat=0x80,292,2,
lstat=0x80,293,2,
fhstat=0x80,294,2,
__semctl=0x80,295,4,
shmctl=0x80,296,3,
msgctl=0x80,297,3,
sched_yield=0x80,298,0,
getthrid=0x80,299,0,
thrsleep=0x80,300,4,
thrwakeup=0x80,301,2,
threxit=0x80,302,1,
thrsigdivert=0x80,303,3,
__getcwd=0x80,304,2,
adjfreq=0x80,305,2,
getfsstat=0x80,306,3,
statfs=0x80,307,2,
fstatfs=0x80,308,2,
fhstatfs=0x80,309,2,
setrtable=0x80,310,1,
getrtable=0x80,311,0,

2
libr/syscall/d/par.sh Executable file
View File

@ -0,0 +1,2 @@
#!/bin/sh
grep '{ "'|tr '{",}' ' ' |sed -e 's,NULL,,g' | awk '{ print $1"="$2","$3","$4","$5}'

File diff suppressed because it is too large Load Diff

View File

@ -1,230 +0,0 @@
#include "r_syscall.h"
/* syscall-bsd */
/* int 0x80 */
RSyscallItem syscalls_darwin_x86[] = {
{ "syscall", 0x80, 0, 4 },
{ "exit", 0x80, 1, 1 },
{ "fork", 0x80, 2, 0 },
{ "read", 0x80, 3, 3 },
{ "write", 0x80, 4, 3 },
{ "open", 0x80, 5, 3 },
{ "close", 0x80, 6, 1 },
{ "wait4", 0x80, 7, 3 },
{ "old_creat", 0x80, 8, 2 },
{ "link", 0x80, 9, 2 },
{ "unlink", 0x80, 10, 1 },
{ "old_execve", 0x80, 11, 3},
{ "chdir", 0x80, 12, 1},
{ "fchdir", 0x80, 13, 1},
{ "mknod", 0x80, 14, 1},
{ "chmod", 0x80, 15, 1},
{ "chown", 0x80, 16, 1},
{ "break", 0x80, 17, 1},
{ "old_fsstat", 0x80, 18, 1},
{ "old_lseek", 0x80, 19, 1},
{ "getpid", 0x80, 20, 0},
{ "mount", 0x80, 21, 0},
{ "unmount", 0x80, 22, 0},
{ "setuid", 0x80, 23, 1},
{ "getuid", 0x80, 24, 0},
{ "ptrace", 0x80, 26, 4},
{ "recvmsg", 0x80, 27, 4},
{ "sendmsg", 0x80, 28, 4},
{ "recvfrom", 0x80, 29, 4},
{ "accept", 0x80, 30, 4},
{ "getpeername", 0x80, 31, 3},
{ "getsockname", 0x80, 32, 3},
{ "access", 0x80, 33, 2},
{ "chflags", 0x80, 34, 2},
{ "fchflags", 0x80, 35, 2},
{ "sync", 0x80, 36, 0},
{ "kill", 0x80, 37, 2},
{ "dup", 0x80, 41, 2},
{ "pipe", 0x80, 42, 1},
{ "getepid", 0x80, 43, 0},
{ "profil", 0x80, 44, 4}, /* LOLSOME! THIS IS LIKE linux oprofile! we need to hack on it! */
{ "ktrace", 0x80, 45, 4},
{ "getgid", 0x80, 47, 0},
{ "signal", 0x80, 48, 2},
{ "getlogin", 0x80, 49, 0}, /* like getuid but returns a string */
{ "setlogin", 0x80, 50, 1}, /* like setuid but passing a string */
{ "acct", 0x80, 51, 1}, /* given a string for file */
{ "sigaltstack", 0x80, 53, 2}, /* alterate stack context for signals */
{ "ioctl", 0x80, 54, 3 },
{ "reboot", 0x80, 55, 1},
{ "revoke", 0x80, 56, 1}, /* given a string invalidates the access to a file */
{ "symlink", 0x80, 57, 2},
{ "readlink", 0x80, 58, 1},
{ "execve", 0x80, 59, 2},
{ "umask", 0x80, 60, 1},
{ "chroot", 0x80, 61, 1},
{ "mmap", 0x80, 90, 6},
{ "munmap", 0x80, 91, 1},
{ "socketcall", 0x80, 102, 2 },
{ "sigreturn", 0x80, 119, 1 },
{ "clone", 0x80, 120, 4 },
{ "mprotect", 0x80, 125, 3},
{ "rt_sigaction", 0x80, 174, 3},
{ "rt_sigprocmask", 0x80, 175, 3},
{ "sysctl", 0x80, 149, 1 },
{ "mmap2", 0x80, 192, 6},
{ "fstat64", 0x80, 197, 2},
{ "fcntl64", 0x80, 221, 3},
{ "gettid", 0x80, 224, 0},
{ "set_thread_area", 0x80, 243, 2},
{ "get_thread_area", 0x80, 244, 2},
{ "exit_group", 0x80, 252, 1},
// TODO: read doc/xtra/xnu-* */
/* int 0x81 */
//struct syscall_t syscalls_darwin_xnu_x86[] = {
{ "mach_reply_port", 0x81, 26 ,1},
{ "thread_self_trap", 0x81, 27 ,1},
{ "task_self_trap", 0x81, 28 ,1},
{ "host_self_trap", 0x81, 29 ,1},
{ "mach_msg_trap", 0x81, 31 ,1},
{ "mach_msg_overwrite_trap", 0x81, 32 ,1},
{ "semaphore_signal_trap", 0x81, 33 ,1},
{ "semaphore_signal_all_trap", 0x81, 34 ,1},
{ "semaphore_signal_thread_trap", 0x81, 35 ,1},
{ "semaphore_wait_trap", 0x81, 36 ,1},
{ "semaphore_wait_signal_trap", 0x81, 37 ,1},
{ "semaphore_timedwait_trap", 0x81, 38 ,1},
{ "semaphore_timedwait_signal_trap", 0x81, 39 ,1},
{ "init_process", 0x81, 41 ,1},
{ "map_fd", 0x81, 43 ,1},
{ "task_for_pid", 0x81, 45 ,1},
{ "pid_for_task", 0x81, 46 ,1},
{ "macx_swapon", 0x81, 48 ,1},
{ "macx_swapoff", 0x81, 49 ,1},
{ "macx_triggers", 0x81, 51 ,1},
{ "macx_backing_store_suspend", 0x81, 52 ,1},
{ "macx_backing_store_recovery", 0x81, 53 ,1},
{ "swtch_pri", 0x81, 59 ,1},
{ "swtch", 0x81, 60 ,1},
{ "thread_switch", 0x81, 61 ,1},
{ "clock_sleep_trap", 0x81, 62 ,1},
{ "mach_timebase_info_trap", 0x81, 89 ,1},
{ "mach_wait_until_trap", 0x81, 90 ,1},
{ "mk_timer_create_trap", 0x81, 91 ,1},
{ "mk_timer_destroy_trap", 0x81, 92 ,1},
{ "mk_timer_arm_trap", 0x81, 93 ,1},
{ "mk_timer_cancel_trap", 0x81, 94 ,1},
{ "mk_timebase_info_trap", 0x81, 95 ,1},
{ "iokit_user_client_trap", 0x81, 100 ,1},
{ NULL, 0x81, 0, 0 }
};
/* XXX : copypasted from x86.. some of them are ok.. but table must be reviewed */
RSyscallItem syscalls_darwin_arm[] = {
{ "syscall", 0x80, 0, 4 },
{ "exit", 0x80, 1, 1 },
{ "fork", 0x80, 2, 0 },
{ "read", 0x80, 3, 3 },
{ "write", 0x80, 4, 3 },
{ "open", 0x80, 5, 3 },
{ "close", 0x80, 6, 1 },
{ "wait4", 0x80, 7, 3 },
{ "old_creat", 0x80, 8, 2 },
{ "link", 0x80, 9, 2 },
{ "unlink", 0x80, 10, 1 },
{ "old_execve", 0x80, 11, 3},
{ "chdir", 0x80, 12, 1},
{ "fchdir", 0x80, 13, 1},
{ "mknod", 0x80, 14, 1},
{ "chmod", 0x80, 15, 1},
{ "chown", 0x80, 16, 1},
{ "break", 0x80, 17, 1},
{ "old_fsstat", 0x80, 18, 1},
{ "old_lseek", 0x80, 19, 1},
{ "getpid", 0x80, 20, 0},
{ "mount", 0x80, 21, 0},
{ "unmount", 0x80, 22, 0},
{ "setuid", 0x80, 23, 1},
{ "getuid", 0x80, 24, 0},
{ "ptrace", 0x80, 26, 4},
{ "recvmsg", 0x80, 27, 4},
{ "sendmsg", 0x80, 28, 4},
{ "recvfrom", 0x80, 29, 4},
{ "accept", 0x80, 30, 4},
{ "getpeername", 0x80, 31, 3},
{ "getsockname", 0x80, 32, 3},
{ "access", 0x80, 33, 2},
{ "chflags", 0x80, 34, 2},
{ "fchflags", 0x80, 35, 2},
{ "sync", 0x80, 36, 0},
{ "kill", 0x80, 37, 2},
{ "dup", 0x80, 41, 2},
{ "pipe", 0x80, 42, 1},
{ "getepid", 0x80, 43, 0},
{ "profil", 0x80, 44, 4}, /* LOLSOME! THIS IS LIKE linux oprofile! we need to hack on it! */
{ "ktrace", 0x80, 45, 4},
{ "getgid", 0x80, 47, 0},
{ "signal", 0x80, 48, 2},
{ "getlogin", 0x80, 49, 0}, /* like getuid but returns a string */
{ "setlogin", 0x80, 50, 1}, /* like setuid but passing a string */
{ "acct", 0x80, 51, 1}, /* given a string for file */
{ "sigaltstack", 0x80, 53, 2}, /* alterate stack context for signals */
{ "ioctl", 0x80, 54, 3 },
{ "reboot", 0x80, 55, 1},
{ "revoke", 0x80, 56, 1}, /* given a string invalidates the access to a file */
{ "symlink", 0x80, 57, 2},
{ "readlink", 0x80, 58, 1},
{ "execve", 0x80, 59, 2},
{ "umask", 0x80, 60, 1},
{ "chroot", 0x80, 61, 1},
{ "mmap", 0x80, 90, 6},
{ "munmap", 0x80, 91, 1},
{ "socketcall", 0x80, 102, 2 },
{ "sigreturn", 0x80, 119, 1 },
{ "clone", 0x80, 120, 4 },
{ "mprotect", 0x80, 125, 3},
{ "rt_sigaction", 0x80, 174, 3},
{ "rt_sigprocmask", 0x80, 175, 3},
{ "sysctl", 0x80, 149, 1 },
{ "mmap2", 0x80, 192, 6},
{ "fstat64", 0x80, 197, 2},
{ "fcntl64", 0x80, 221, 3},
{ "gettid", 0x80, 224, 0},
{ "set_thread_area", 0x80, 243, 2},
{ "get_thread_area", 0x80, 244, 2},
{ "exit_group", 0x80, 252, 1},
// TODO: read doc/xtra/xnu-* */
/* int 0x81 */
//struct syscall_t syscalls_darwin_xnu_x86[] = {
{ "mach_reply_port", 0x81, 26 ,1},
{ "thread_self_trap", 0x81, 27 ,1},
{ "task_self_trap", 0x81, 28 ,1},
{ "host_self_trap", 0x81, 29 ,1},
{ "mach_msg_trap", 0x81, 31 ,1},
{ "mach_msg_overwrite_trap", 0x81, 32 ,1},
{ "semaphore_signal_trap", 0x81, 33 ,1},
{ "semaphore_signal_all_trap", 0x81, 34 ,1},
{ "semaphore_signal_thread_trap", 0x81, 35 ,1},
{ "semaphore_wait_trap", 0x81, 36 ,1},
{ "semaphore_wait_signal_trap", 0x81, 37 ,1},
{ "semaphore_timedwait_trap", 0x81, 38 ,1},
{ "semaphore_timedwait_signal_trap", 0x81, 39 ,1},
{ "init_process", 0x81, 41 ,1},
{ "map_fd", 0x81, 43 ,1},
{ "task_for_pid", 0x81, 45 ,1},
{ "pid_for_task", 0x81, 46 ,1},
{ "macx_swapon", 0x81, 48 ,1},
{ "macx_swapoff", 0x81, 49 ,1},
{ "macx_triggers", 0x81, 51 ,1},
{ "macx_backing_store_suspend", 0x81, 52 ,1},
{ "macx_backing_store_recovery", 0x81, 53 ,1},
{ "swtch_pri", 0x81, 59 ,1},
{ "swtch", 0x81, 60 ,1},
{ "thread_switch", 0x81, 61 ,1},
{ "clock_sleep_trap", 0x81, 62 ,1},
{ "mach_timebase_info_trap", 0x81, 89 ,1},
{ "mach_wait_until_trap", 0x81, 90 ,1},
{ "mk_timer_create_trap", 0x81, 91 ,1},
{ "mk_timer_destroy_trap", 0x81, 92 ,1},
{ "mk_timer_arm_trap", 0x81, 93 ,1},
{ "mk_timer_cancel_trap", 0x81, 94 ,1},
{ "mk_timebase_info_trap", 0x81, 95 ,1},
{ "iokit_user_client_trap", 0x81, 100 ,1},
{ NULL, 0x81, 0, 0 }
};

View File

@ -1,80 +0,0 @@
#include <r_syscall.h>
/* there are LOT of magic syscalls in freebsd...ill really have to look on it */
/* jail, jail_attach, utrace, kqueue->EV_FILTER_PROC->NOTE_FORK, nfsclnt */
/* syscall-freebsd */
RSyscallItem syscalls_freebsd_x86[] = {
{ "syscall", 0x80, 0, 4 , "sysnum" },
{ "exit", 0x80, 1, 1 },
{ "fork", 0x80, 2, 0 },
{ "read", 0x80, 3, 3 },
{ "write", 0x80, 4, 3 },
{ "open", 0x80, 5, 3 },
{ "close", 0x80, 6, 1 },
{ "wait4", 0x80, 7, 3 },
{ "old_creat", 0x80, 8, 2 },
{ "link", 0x80, 9, 2 },
{ "unlink", 0x80, 10, 1 },
{ "old_execve", 0x80, 11, 3},
{ "chdir", 0x80, 12, 1},
{ "fchdir", 0x80, 13, 1},
{ "mknod", 0x80, 14, 1},
{ "chmod", 0x80, 15, 1},
{ "chown", 0x80, 16, 1},
{ "break", 0x80, 17, 1},
{ "old_fsstat", 0x80, 18, 1},
{ "old_lseek", 0x80, 19, 1},
{ "getpid", 0x80, 20, 0},
{ "mount", 0x80, 21, 0},
{ "unmount", 0x80, 22, 0},
{ "setuid", 0x80, 23, 1},
{ "getuid", 0x80, 24, 0},
{ "ptrace", 0x80, 26, 4},
{ "recvmsg", 0x80, 27, 4},
{ "sendmsg", 0x80, 28, 4},
{ "recvfrom", 0x80, 29, 4},
{ "accept", 0x80, 30, 4},
{ "getpeername", 0x80, 31, 3},
{ "getsockname", 0x80, 32, 3},
{ "access", 0x80, 33, 2},
{ "chflags", 0x80, 34, 2},
{ "fchflags", 0x80, 35, 2},
{ "sync", 0x80, 36, 0},
{ "kill", 0x80, 37, 2},
{ "dup", 0x80, 41, 2},
{ "pipe", 0x80, 42, 1},
{ "getepid", 0x80, 43, 0},
{ "profil", 0x80, 44, 4}, /* LOLSOME! THIS IS LIKE linux oprofile! we need to hack on it! */
{ "ktrace", 0x80, 45, 4},
{ "getgid", 0x80, 47, 0},
{ "signal", 0x80, 48, 2},
{ "getlogin", 0x80, 49, 0}, /* like getuid but returns a string */
{ "setlogin", 0x80, 50, 1}, /* like setuid but passing a string */
{ "acct", 0x80, 51, 1}, /* given a string for file */
{ "sigaltstack", 0x80, 53, 2}, /* alterate stack context for signals */
{ "ioctl", 0x80, 54, 3 },
{ "reboot", 0x80, 55, 1},
{ "revoke", 0x80, 56, 1}, /* given a string invalidates the access to a file */
{ "symlink", 0x80, 57, 2},
{ "readlink", 0x80, 58, 1},
{ "execve", 0x80, 59, 2},
{ "umask", 0x80, 60, 1},
{ "chroot", 0x80, 61, 1},
{ "mmap", 0x80, 90, 6},
{ "munmap", 0x80, 91, 1},
{ "socketcall", 0x80, 102, 2 },
{ "sigreturn", 0x80, 119, 1 },
{ "clone", 0x80, 120, 4 },
{ "mprotect", 0x80, 125, 3},
{ "rt_sigaction", 0x80, 174, 3},
{ "rt_sigprocmask", 0x80, 175, 3},
{ "sysctl", 0x80, 149, 1 },
{ "mmap2", 0x80, 192, 6},
{ "fstat64", 0x80, 197, 2},
{ "fcntl64", 0x80, 221, 3},
{ "gettid", 0x80, 224, 0},
{ "set_thread_area", 0x80, 243, 2},
{ "get_thread_area", 0x80, 244, 2},
{ "exit_group", 0x80, 252, 1},
{ NULL, 0x80, 0, 0 }
};

View File

@ -1,189 +0,0 @@
#include "r_syscall.h"
/* syscall-linux */
RSyscallItem syscalls_linux_x86[] = {
{ "exit", 0x80, 1, 1, "i" },
{ "fork", 0x80, 2, 0, NULL },
{ "read", 0x80, 3, 3, "ipi" },
{ "write", 0x80, 4, 3, "izi" },
{ "open", 0x80, 5, 3, "zxx" },
{ "close", 0x80, 6, 1, "i" },
{ "waitpid", 0x80, 7, 3, "ipx"},
{ "creat", 0x80, 8, 2, "zx" },
{ "link", 0x80, 9, 2, "zz" },
{ "unlink", 0x80, 10, 1, "z" },
{ "execve", 0x80, 11, 3, "zzz" }, // XXX this is char**
{ "chdir", 0x80, 12, 1, "z" },
{ "getpid", 0x80, 20, 0, NULL},
{ "setuid", 0x80, 23, 1, "i" },
{ "getuid", 0x80, 24, 0, NULL },
{ "ptrace", 0x80, 26, 4 },
{ "utime", 0x80, 30, 2 },
{ "access", 0x80, 33, 2 },
{ "kill", 0x80, 37,2 },
{ "dup", 0x80, 41, 2 },
{ "brk", 0x80, 45, 1 },
{ "signal", 0x80, 48, 2 },
{ "ioctl", 0x80, 54, 3 },
{ "mmap", 0x80, 90, 6 },
{ "munmap", 0x80, 91, 1 },
{ "socketcall", 0x80, 102, 2 },
{ "sigreturn", 0x80, 119, 1 },
{ "clone", 0x80, 120, 4 },
{ "mprotect", 0x80, 125, 3},
{ "rt_sigaction", 0x80, 174, 3},
{ "rt_sigprocmask", 0x80, 175, 3},
{ "sysctl", 0x80, 149, 1 },
{ "mmap2", 0x80, 192, 6},
{ "fstat64", 0x80, 197, 2},
{ "fcntl64", 0x80, 221, 3},
{ "gettid", 0x80, 224, 0},
{ "set_thread_area", 0x80, 243, 2},
{ "get_thread_area", 0x80, 244, 2},
{ "exit_group", 0x80, 252, 1},
{ NULL, 0, 0, 0 }
};
RSyscallItem syscalls_linux_sh[] = {{NULL,0,0,0} };
// http://lxr.oss.org.cn/source/include/asm-arm/unistd.h
/* syscall-linux */
// XXX: same as in linux-x86 ?
RSyscallItem syscalls_linux_arm[] = {
{ "exit", 0x900000, 1, 1, "i" },
{ "fork", 0x900000, 2, 0, NULL },
{ "read", 0x900000, 3, 3, "ipi" },
{ "write", 0x900000, 4, 3, "izi" },
{ "open", 0x900000, 5, 3, "zxx" },
{ "close", 0x900000, 6, 1, "i" },
{ "waitpid", 0x900000, 7, 3, "ipx"},
{ "creat", 0x900000, 8, 2, "zx" },
{ "link", 0x900000, 9, 2, "zz" },
{ "unlink", 0x900000, 10, 1, "z" },
{ "execve", 0x900000, 11, 3, "zzz" }, // XXX this is char**
{ "chdir", 0x900000, 12, 1, "z" },
{ "time", 0x900000, 13, 1, "p" },
{ "mknod", 0x900000, 14, 1, "zxi" },
{ "chmod", 0x900000, 15, 1, "zx" },
{ "lchown", 0x900000, 16, 1, "zii" },
{ "getpid", 0x900000, 20, 0, NULL},
{ "setuid", 0x900000, 23, 1, "i" },
{ "getuid", 0x900000, 24, 0, NULL },
{ "ptrace", 0x900000, 26, 4 },
{ "utime", 0x900000, 30, 2 },
{ "access", 0x900000, 33, 2 },
{ "kill", 0x900000, 37,2 },
{ "dup", 0x900000, 41, 2 },
{ "brk", 0x900000, 45, 1 },
{ "signal", 0x900000, 48, 2 },
{ "ioctl", 0x900000, 54, 3 },
{ "mmap", 0x900000, 90, 6 },
{ "munmap", 0x900000, 91, 1 },
{ "socketcall", 0x900000, 102, 2 },
{ "sigreturn", 0x900000, 119, 1 },
{ "clone", 0x900000, 120, 4 },
{ "mprotect", 0x900000, 125, 3},
{ "rt_sigaction", 0x900000, 174, 3},
{ "rt_sigprocmask", 0x900000, 175, 3},
{ "sysctl", 0x900000, 149, 1 },
{ "mmap2", 0x900000, 192, 6},
{ "fstat64", 0x900000, 197, 2},
{ "fcntl64", 0x900000, 221, 3},
{ "gettid", 0x900000, 224, 0},
{ "set_thread_area", 0x900000, 243, 2},
{ "get_thread_area", 0x900000, 244, 2},
{ "exit_group", 0x900000, 252, 1},
{ NULL, 0, 0, 0 }
};
RSyscallItem syscalls_linux_mips[] = {
{ "syscall", 4000, 1, 1, "i" },
{ "exit", 4001, 1, 1, "i" },
{ "fork", 4002, 2, 0, NULL },
{ "read", 4003, 3, 3, "ipi" },
{ "write", 4004, 4, 3, "izi" },
{ "open", 4005, 5, 3, "zxx" },
{ "close", 4006, 6, 1, "i" },
{ "waitpid", 4007, 7, 3, "ipx"},
{ "creat", 4008, 8, 2, "zx" },
{ "link", 4009, 9, 2, "zz" },
{ "unlink", 4010, 10, 1, "z" },
{ "execve", 4011, 11, 3, "zzz" }, // XXX this is char**
{ "chdir", 4012, 12, 1, "z" },
{ "time", 4013, 13, 1, "p" },
{ "mknod", 4014, 14, 1, "zxi" },
{ "chmod", 4015, 15, 1, "zx" },
{ "lchown", 4016, 16, 1, "zii" },
{ "getpid", 4020, 20, 0, NULL},
{ "setuid", 4023, 23, 1, "i" },
{ "getuid", 4024, 24, 0, NULL },
{ "ptrace", 4026, 26, 4 },
{ "utime", 4030, 30, 2 },
{ "access", 4033, 33, 2 },
{ "kill", 4037, 37,2 },
{ "dup", 4041, 41, 2 },
{ "brk", 4045, 45, 1 },
{ "signal", 4048, 48, 2 },
{ "ioctl", 4054, 54, 3 },
{ "mmap", 4090, 90, 6 },
{ "munmap", 4091, 91, 1 },
{ "socketcall", 4000+102, 102, 2 },
{ "sigreturn", 4000+119, 119, 1 },
{ "clone", 4000+120, 120, 4 },
{ "mprotect", 4000+125, 125, 3},
{ "rt_sigaction", 4000+174, 174, 3},
{ "rt_sigprocmask", 4000+175, 175, 3},
{ "sysctl", 4000+149, 149, 1 },
{ "mmap2", 4000+192, 192, 6},
{ "fstat64", 4000+197, 197, 2},
{ "fcntl64", 4000+221, 221, 3},
{ "gettid", 4000+224, 224, 0},
{ "set_thread_area", 4000+243, 243, 2},
{ "get_thread_area", 4000+244, 244, 2},
{ "exit_group", 4000+252, 252, 1},
{ NULL }
};
// TODO: needs to be implemented
#if 0
#define SP_TRAP_SOLARIS 0x88 /* Solaris System Call */
#define SP_TRAP_NETBSD 0x89 /* NetBSD System Call */
#define SP_TRAP_LINUX 0x90 /* Linux System Call */
#define LINUX_32BIT_SYSCALL_TRAP 0x10 /* linux ok ?? -- http://www.48bits.com/papers/sparc_shellcodes.txt */
#endif
RSyscallItem syscalls_linux_sparc[] = {
{ "exit", 0x10, 1, 1, "i" },
{ "fork", 0x10, 2, 0, NULL },
{ "read", 0x10, 3, 3, "ipi" },
{ "write", 0x10, 4, 3, "izi" },
{ "open", 0x10, 5, 3, "zxx" },
{ "close", 0x10, 6, 1, "i" },
{ "waitpid", 0x10, 7, 3, "ipx"},
{ "creat", 0x10, 8, 2, "zx" },
{ "link", 0x10, 9, 2, "zz" },
{ "unlink", 0x10, 10, 1, "z" },
{ "execve", 0x10, 11, 3, "zzz" }, // XXX this is char**
{ "chdir", 0x10, 12, 1, "z" },
{ "getpid", 0x10, 20, 0, NULL},
{ "setuid", 0x10, 23, 1, "i" },
{ "getuid", 0x10, 24, 0, NULL },
{ "ptrace", 0x10, 26, 4 },
{ "utime", 0x10, 30, 2 },
{ "access", 0x10, 33, 2 },
{ "kill", 0x10, 37,2 },
{ "dup", 0x10, 41, 2 },
{ "brk", 0x10, 45, 1 },
{ "signal", 0x10, 48, 2 },
{ "ioctl", 0x10, 54, 3 },
{ "mmap", 0x10, 90, 6 },
{ "munmap", 0x10, 91, 1 },
{ "socketcall", 0x10, 102, 2 },
{ "sigreturn", 0x10, 119, 1 },
{ "clone", 0x10, 120, 4 },
{ "mprotect", 0x10, 125, 3},
{ "rt_sigaction", 0x10, 174, 3},
{ "rt_sigprocmask", 0x10, 175, 3},
{ "sysctl", 0x10, 149, 1 },
{ "mmap2", 0x10, 192, 6},
{ NULL }
};

View File

@ -1,57 +0,0 @@
#include "r_syscall.h"
/* syscall-netbsd */
RSyscallItem syscalls_netbsd_x86[] = {
{ "syscall", 0x80, 0, 4 },
{ "exit", 0x80, 1, 1 },
{ "fork", 0x80, 2, 0 },
{ "read", 0x80, 3, 3 },
{ "write", 0x80, 4, 3 },
{ "open", 0x80, 5, 3 },
{ "close", 0x80, 6, 1 },
{ "wait4", 0x80, 7, 3 },
{ "compat_43_ocreat", 0x80, 8, 2 },
{ "link", 0x80, 9, 2 },
{ "unlink", 0x80, 10, 1 },
//{ "execve", 0x80, 11, 3},
{ "chdir", 0x80, 12, 1},
{ "fchdir", 0x80, 13, 1},
{ "mknod", 0x80, 14, 1},
{ "chmod", 0x80, 15, 1},
{ "chown", 0x80, 16, 1},
{ "break", 0x80, 17, 1},
{ "getpid", 0x80, 20, 0},
{ "mount", 0x80, 21, 0},
{ "unmount", 0x80, 22, 0},
{ "setuid", 0x80, 23, 1},
{ "getuid", 0x80, 24, 0},
{ "ptrace", 0x80, 26, 4},
{ "recvmsg", 0x80, 27, 4},
{ "sendmsg", 0x80, 28, 4},
{ "recvfrom", 0x80, 29, 4},
{ "accept", 0x80, 30, 4},
{ "access", 0x80, 33, 2},
{ "dup", 0x80, 41, 2},
{ "ktrace", 0x80, 45, 1},
{ "signal", 0x80, 48, 2},
{ "utime", 0x80, 30, 2 },
{ "kill", 0x80, 37,2 },
{ "ioctl", 0x80, 54, 3 },
{ "mmap", 0x80, 90, 6},
{ "munmap", 0x80, 91, 1},
{ "socketcall", 0x80, 102, 2 },
{ "sigreturn", 0x80, 119, 1 },
{ "clone", 0x80, 120, 4 },
{ "mprotect", 0x80, 125, 3},
{ "rt_sigaction", 0x80, 174, 3},
{ "rt_sigprocmask", 0x80, 175, 3},
{ "sysctl", 0x80, 149, 1 },
{ "mmap2", 0x80, 192, 6},
{ "fstat64", 0x80, 197, 2},
{ "fcntl64", 0x80, 221, 3},
{ "gettid", 0x80, 224, 0},
{ "set_thread_area", 0x80, 243, 2},
{ "get_thread_area", 0x80, 244, 2},
{ "exit_group", 0x80, 252, 1},
{ NULL, 0x80, 0, 0 }
};

View File

@ -1,195 +0,0 @@
#include "r_syscall.h"
/* syscall-openbsd */
RSyscallItem syscalls_openbsd_x86[] = {
{ "syscall", 0x80, 0, 2 },
{ "exit", 0x80, 1, 1 },
{ "fork", 0x80, 2, 0 },
{ "read", 0x80, 3, 3 },
{ "write", 0x80, 4, 3 },
{ "open", 0x80, 5, 3 },
{ "close", 0x80, 6, 1 },
{ "wait4", 0x80, 7, 4 },
{ "link", 0x80, 9, 2 },
{ "unlink", 0x80, 10, 1 },
{ "chdir", 0x80, 12, 1 },
{ "fchdir", 0x80, 13, 1 },
{ "mknod", 0x80, 14, 3 },
{ "chmod", 0x80, 15, 2 },
{ "chown", 0x80, 16, 3 },
{ "break", 0x80, 17, 1 },
{ "getpid", 0x80, 20, 0 },
{ "mount", 0x80, 21, 4 },
{ "unmount", 0x80, 22, 2 },
{ "setuid", 0x80, 23, 1 },
{ "getuid", 0x80, 24, 0 },
{ "geteuid", 0x80, 25, 0 },
{ "ptrace", 0x80, 26, 4 },
{ "recvmsg", 0x80, 27, 3 },
{ "sendmsg", 0x80, 28, 3 },
{ "recvfrom", 0x80, 29, 6 },
{ "accept", 0x80, 30, 3 },
{ "getpeername", 0x80, 31, 3 },
{ "getsockname", 0x80, 32, 3 },
{ "access", 0x80, 33, 2 },
{ "chflags", 0x80, 34, 2 },
{ "fchflags", 0x80, 35, 2 },
{ "sync", 0x80, 36, 0 },
{ "kill", 0x80, 37, 2 },
{ "getppid", 0x80, 39, 0 },
{ "dup", 0x80, 41, 1 },
{ "opipe", 0x80, 42, 0 },
{ "getegid", 0x80, 43, 0 },
{ "profil", 0x80, 44, 4 },
{ "ktrace", 0x80, 45, 4 },
{ "sigaction", 0x80, 46, 3 },
{ "getgid", 0x80, 47, 0 },
{ "sigprocmask", 0x80, 48, 2 },
{ "getlogin", 0x80, 49, 2 },
{ "setlogin", 0x80, 50, 1 },
{ "acct", 0x80, 51, 1 },
{ "sigpending", 0x80, 52, 0 },
{ "osigaltstack", 0x80, 53, 2 },
{ "ioctl", 0x80, 54, 3 },
{ "reboot", 0x80, 55, 1 },
{ "revoke", 0x80, 56, 1 },
{ "symlink", 0x80, 57, 2 },
{ "readlink", 0x80, 58, 3 },
{ "execve", 0x80, 59, 3 },
{ "umask", 0x80, 60, 1 },
{ "chroot", 0x80, 61, 1 },
{ "vfork", 0x80, 66, 0 },
{ "sbrk", 0x80, 69, 1 },
{ "sstk", 0x80, 70, 1 },
{ "munmap", 0x80, 73, 2 },
{ "mprotect", 0x80, 74, 3 },
{ "madvise", 0x80, 75, 3 },
{ "mincore", 0x80, 78, 3 },
{ "getgroups", 0x80, 79, 2 },
{ "setgroups", 0x80, 80, 2 },
{ "getpgrp", 0x80, 81, 0 },
{ "setpgid", 0x80, 82, 2 },
{ "setitimer", 0x80, 83, 3 },
{ "getitimer", 0x80, 86, 2 },
{ "dup2", 0x80, 90, 2 },
{ "fcntl", 0x80, 92, 3 },
{ "select", 0x80, 93, 5 },
{ "fsync", 0x80, 95, 1 },
{ "setpriority", 0x80, 96, 3 },
{ "socket", 0x80, 97, 3 },
{ "connect", 0x80, 98, 3 },
{ "getpriority", 0x80, 100, 2 },
{ "sigreturn", 0x80, 103, 1 },
{ "bind", 0x80, 104, 3 },
{ "setsockopt", 0x80, 105, 5 },
{ "listen", 0x80, 106, 2 },
{ "sigsuspend", 0x80, 111, 1 },
{ "gettimeofday", 0x80, 116, 2 },
{ "getrusage", 0x80, 117, 2 },
{ "getsockopt", 0x80, 118, 5 },
{ "readv", 0x80, 120, 3 },
{ "writev", 0x80, 121, 3 },
{ "settimeofday", 0x80, 122, 2 },
{ "fchown", 0x80, 123, 3 },
{ "fchmod", 0x80, 124, 2 },
{ "setreuid", 0x80, 126, 2 },
{ "setregid", 0x80, 127, 2 },
{ "rename", 0x80, 128, 2 },
{ "flock", 0x80, 131, 2 },
{ "mkfifo", 0x80, 132, 2 },
{ "sendto", 0x80, 133, 6 },
{ "shutdown", 0x80, 134, 2 },
{ "socketpair", 0x80, 135, 4 },
{ "mkdir", 0x80, 136, 2 },
{ "rmdir", 0x80, 137, 1 },
{ "utimes", 0x80, 138, 2 },
{ "adjtime", 0x80, 140, 2 },
{ "setsid", 0x80, 147, 0 },
{ "quotactl", 0x80, 148, 4 },
{ "nfssvc", 0x80, 155, 2 },
{ "getfh", 0x80, 161, 2 },
{ "sysarch", 0x80, 165, 2 },
{ "pread", 0x80, 173, 5 },
{ "pwrite", 0x80, 174, 5 },
{ "setgid", 0x80, 181, 1 },
{ "setegid", 0x80, 182, 1 },
{ "seteuid", 0x80, 183, 1 },
{ "lfs_bmapv", 0x80, 184, 3 },
{ "lfs_markv", 0x80, 185, 3 },
{ "lfs_segclean", 0x80, 186, 2 },
{ "lfs_segwait", 0x80, 187, 2 },
{ "pathconf", 0x80, 191, 2 },
{ "fpathconf", 0x80, 192, 2 },
{ "swapctl", 0x80, 193, 3 },
{ "getrlimit", 0x80, 194, 2 },
{ "setrlimit", 0x80, 195, 2 },
{ "getdirentries", 0x80, 196, 4 },
{ "mmap", 0x80, 197, 7 },
{ "__syscall", 0x80, 198, 2 },
{ "lseek", 0x80, 199, 4 },
{ "truncate", 0x80, 200, 3 },
{ "ftruncate", 0x80, 201, 3 },
{ "__sysctl", 0x80, 202, 6 },
{ "mlock", 0x80, 203, 2 },
{ "munlock", 0x80, 204, 2 },
{ "futimes", 0x80, 206, 2 },
{ "getpgid", 0x80, 207, 1 },
{ "nnpfspioctl", 0x80, 208, 5 },
{ "semget", 0x80, 221, 3 },
{ "msgget", 0x80, 225, 2 },
{ "msgsnd", 0x80, 226, 4 },
{ "msgrcv", 0x80, 227, 5 },
{ "shmat", 0x80, 228, 3 },
{ "shmdt", 0x80, 230, 1 },
{ "clock_gettime", 0x80, 232, 2 },
{ "clock_settime", 0x80, 233, 2 },
{ "clock_getres", 0x80, 234, 2 },
{ "nanosleep", 0x80, 240, 2 },
{ "minherit", 0x80, 250, 3 },
{ "rfork", 0x80, 251, 1 },
{ "poll", 0x80, 252, 3 },
{ "issetugid", 0x80, 253, 0 },
{ "lchown", 0x80, 254, 3 },
{ "getsid", 0x80, 255, 1 },
{ "msync", 0x80, 256, 3 },
{ "pipe", 0x80, 263, 1 },
{ "fhopen", 0x80, 264, 2 },
{ "preadv", 0x80, 267, 5 },
{ "pwritev", 0x80, 268, 5 },
{ "kqueue", 0x80, 269, 0 },
{ "kevent", 0x80, 270, 6 },
{ "mlockall", 0x80, 271, 1 },
{ "munlockall", 0x80, 272, 0 },
{ "getpeereid", 0x80, 273, 3 },
{ "getresuid", 0x80, 281, 3 },
{ "setresuid", 0x80, 282, 3 },
{ "getresgid", 0x80, 283, 3 },
{ "setresgid", 0x80, 284, 3 },
{ "mquery", 0x80, 286, 7 },
{ "closefrom", 0x80, 287, 1 },
{ "sigaltstack", 0x80, 288, 2 },
{ "shmget", 0x80, 289, 3 },
{ "semop", 0x80, 290, 3 },
{ "stat", 0x80, 291, 2 },
{ "fstat", 0x80, 292, 2 },
{ "lstat", 0x80, 293, 2 },
{ "fhstat", 0x80, 294, 2 },
{ "__semctl", 0x80, 295, 4 },
{ "shmctl", 0x80, 296, 3 },
{ "msgctl", 0x80, 297, 3 },
{ "sched_yield", 0x80, 298, 0 },
{ "getthrid", 0x80, 299, 0 },
{ "thrsleep", 0x80, 300, 4 },
{ "thrwakeup", 0x80, 301, 2 },
{ "threxit", 0x80, 302, 1 },
{ "thrsigdivert", 0x80, 303, 3 },
{ "__getcwd", 0x80, 304, 2 },
{ "adjfreq", 0x80, 305, 2 },
{ "getfsstat", 0x80, 306, 3 },
{ "statfs", 0x80, 307, 2 },
{ "fstatfs", 0x80, 308, 2 },
{ "fhstatfs", 0x80, 309, 2 },
{ "setrtable", 0x80, 310, 1 },
{ "getrtable", 0x80, 311, 0 },
{ NULL }
};

View File

@ -2,29 +2,19 @@
#include <r_types.h>
#include <r_util.h>
#include <r_db.h>
#include <r_syscall.h>
#include <stdio.h>
#include <string.h>
#include "fastcall.h"
extern RSyscallItem syscalls_openbsd_x86[];
extern RSyscallItem syscalls_linux_sh[];
extern RSyscallItem syscalls_linux_sparc[];
extern RSyscallItem syscalls_netbsd_x86[];
extern RSyscallItem syscalls_linux_x86[];
extern RSyscallItem syscalls_linux_mips[];
extern RSyscallItem syscalls_linux_arm[];
extern RSyscallItem syscalls_freebsd_x86[];
extern RSyscallItem syscalls_darwin_x86[];
extern RSyscallItem syscalls_darwin_arm[];
extern RSyscallItem syscalls_win7_x86[];
extern RSyscallPort sysport_x86[];
R_API RSyscall* r_syscall_new() {
RSyscall *rs = R_NEW (RSyscall);
if (rs) {
rs->fd = NULL;
rs->sysptr = syscalls_linux_x86;
rs->sysptr = NULL; //syscalls_linux_x86;
rs->sysport = sysport_x86;
rs->printf = (PrintfCallback)printf;
rs->regs = fastcall_x86;
@ -44,78 +34,40 @@ R_API const char *r_syscall_reg(RSyscall *s, int idx, int num) {
}
R_API int r_syscall_setup(RSyscall *ctx, const char *arch, const char *os, int bits) {
char file[64];
#define SYSCALLPATH "lib/radare2/syscall"
if (os == NULL)
os = R_SYS_OS;
if (arch == NULL)
arch = R_SYS_ARCH;
/// XXX: spaghetti here
if (!strcmp (os, "any")) {
// ignored
return R_TRUE;
}
// TODO: use r_str_hash.. like in r_egg
if (!strcmp (arch, "mips")) {
ctx->regs = fastcall_mips;
if (!strcmp (os, "linux"))
ctx->sysptr = syscalls_linux_mips;
else {
eprintf ("r_syscall_setup: Unknown arch '%s'\n", arch);
return R_FALSE;
}
} else
if (!strcmp (arch, "sparc")) {
if (!strcmp (os, "linux"))
ctx->sysptr = syscalls_linux_sparc;
else
if (!strcmp (os, "openbsd"))
ctx->sysptr = syscalls_linux_sparc; //XXX
else return R_FALSE;
} else
if (!strcmp (arch, "arm")) {
ctx->regs = fastcall_arm;
if (!strcmp (os, "linux"))
ctx->sysptr = syscalls_linux_arm;
else
if (!strcmp (os, "macos") || !strcmp (os, "darwin") || !strcmp (os, "osx"))
ctx->sysptr = syscalls_darwin_arm;
else {
eprintf ("r_syscall_setup: Unknown OS '%s'\n", os);
return R_FALSE;
}
} else
if (!strcmp (arch, "x86")) {
ctx->regs = fastcall_x86;
// TODO: use bits
if (!strcmp (os, "linux"))
ctx->sysptr = syscalls_linux_x86;
else if (!strcmp (os, "netbsd"))
ctx->sysptr = syscalls_netbsd_x86;
else if (!strcmp (os, "freebsd"))
ctx->sysptr = syscalls_freebsd_x86;
else if (!strcmp (os, "openbsd"))
ctx->sysptr = syscalls_openbsd_x86;
else if ((!strcmp (os, "darwin")) || (!strcmp (os, "macos")) || (!strcmp (os, "osx")))
ctx->sysptr = syscalls_darwin_x86;
else if (!strcmp (os, "windows") || (!strcmp (os, "w32"))) //win7
ctx->sysptr = syscalls_win7_x86;
else {
eprintf ("r_syscall_setup: Unknown os '%s'\n", os);
return R_FALSE;
}
} else
if (!strcmp (arch,"sh")){
if (!strcmp (arch,"sh")) {
ctx->regs = fastcall_sh;
if (!strcmp (os, "linux"))
ctx->sysptr = syscalls_linux_sh;
else {
eprintf ("r_syscall_setup: Unknown os '%s'\n",os);
return R_FALSE;
}
} else {
eprintf ("r_syscall_setup: Unknown os/arch '%s'/'%s'\n", os, arch);
}
snprintf (file, sizeof (file), PREFIX"/%s/%s-%s-%d.sdb",
SYSCALLPATH, os, arch, bits);
if (!r_file_exist (file)) {
eprintf ("Cannot find '%s'\n", file);
return R_FALSE;
}
r_pair_free (ctx->syspair);
ctx->syspair = r_pair_new_from_file (file);
if (ctx->fd)
fclose (ctx->fd);
ctx->fd = NULL;
@ -138,6 +90,14 @@ R_API RSyscallItem *r_syscall_item_new_from_string(const char *name, const char
r_str_split (o, ',');
/*
return r_syscall_item_new (name,
r_num_get (NULL, r_str_word_get0 (o, 0)),
r_num_get (NULL, r_str_word_get0 (o, 1)),
r_num_get (NULL, r_str_word_get0 (o, 2)),
r_str_word_get0 (o, 3));
*/
si->name = strdup (name);
si->swi = r_num_get (NULL, r_str_word_get0 (o, 0));
si->num = r_num_get (NULL, r_str_word_get0 (o, 1));
@ -154,46 +114,57 @@ R_API void r_syscall_item_free(RSyscallItem *si) {
}
R_API RSyscallItem *r_syscall_get(RSyscall *ctx, int num, int swi) {
int i;
#if 0
char *s = r_pair_getf ("0x%x.%d", swi, num);
if (s) {
return parsesyscall(s);
}
#endif
for (i=0; ctx->sysptr[i].name; i++) {
if (num == ctx->sysptr[i].num && \
(swi == -1 || swi == ctx->sysptr[i].swi))
return &ctx->sysptr[i];
}
return NULL;
char *ret, *ret2, foo[32];
RSyscallItem *si;
if (!ctx->syspair)
return NULL;
snprintf (foo, sizeof (foo), "0x%x.%d", swi, num);
ret = r_pair_get (ctx->syspair, foo);
ret2 = r_pair_get (ctx->syspair, ret);
free (ret);
si = r_syscall_item_new_from_string (foo, ret2);
free (ret2);
return si;
}
R_API int r_syscall_get_num(RSyscall *ctx, const char *str) {
char *o;
int i;
for (i=0; ctx->sysptr[i].name; i++)
if (!strcmp (str, ctx->sysptr[i].name))
return ctx->sysptr[i].num;
return 0;
if (!ctx->syspair)
return 0;
o = r_pair_get (ctx->syspair, str);
if (o && *o) {
r_str_split (o, ',');
i = r_num_get (NULL, r_str_word_get0 (o, 1));
}
free (o);
return i;
}
// we can probably wrap all this with r_list getters
/* XXX: ugly iterator implementation */
R_API RSyscallItem *r_syscall_get_n(RSyscall *ctx, int n) {
int i;
for (i=0; ctx->sysptr[i].name && i!=n; i++)
return &ctx->sysptr[i];
return NULL;
RList *l;
if (!ctx->syspair)
return NULL;
l = r_pair_list (ctx->syspair, NULL);
// XXX: memory leak !!
return r_list_get_n (l, n);
}
R_API const char *r_syscall_get_i(RSyscall *ctx, int num, int swi) {
int i;
for (i=0; ctx->sysptr[i].name; i++) {
if (num == ctx->sysptr[i].num && \
(swi == -1 || swi == ctx->sysptr[i].swi))
return ctx->sysptr[i].name;
R_API char *r_syscall_get_i(RSyscall *ctx, int num, int swi) {
char *ret, foo[32];
if (!ctx->syspair)
return NULL;
if (swi==-1) {
char *def = r_pair_get (ctx->syspair, "_");
if (def && *def) {
swi = r_num_get (NULL, def);
} else swi = 0x80; // XXX hardcoded
}
return NULL;
snprintf (foo, sizeof (foo), "0x%x.%d", swi, num);
ret = r_pair_get (ctx->syspair, foo);
return ret;
}
R_API const char *r_syscall_get_io(RSyscall *ctx, int ioport) {
@ -207,6 +178,7 @@ R_API const char *r_syscall_get_io(RSyscall *ctx, int ioport) {
R_API void r_syscall_list(RSyscall *ctx) {
int i;
// TODO: use r_pair here
for (i=0; ctx->sysptr[i].name; i++) {
ctx->printf ("%02x: %d = %s\n",
ctx->sysptr[i].swi, ctx->sysptr[i].num, ctx->sysptr[i].name);

File diff suppressed because it is too large Load Diff