Changeset 1436

Show
Ignore:
Timestamp:
11/11/07 16:53:28 (10 months ago)
Author:
common
Message:

libemu

  • proper linux syscall hooking, removed the int_cd code and created a linux environment
    • lookup the syscalls name from a struct, in case of syscall groups like socketcall for accept,socket,connect,... provide a helper fn within the struct which returns the proper syscall name
    • provide default syscall hooks for socketcall, dup2 and execve, stored in a struct
    • for each environment, copy the struct, create a hashtable on (syscall_name, syscall_hook)
    • use emu_env_linux_syscall_hook to overwrite default syscall hooks
  • added the linux environment to sctest
    • drawing graphs from linux shellcode is possible now
Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • libemu/trunk/configure.ac

    r1424 r1436  
    171171                include/emu/environment/Makefile 
    172172                include/emu/environment/win32/Makefile 
     173                include/emu/environment/linux/Makefile 
    173174                testsuite/Makefile 
    174175                doc/Makefile 
  • libemu/trunk/include/emu/environment/Makefile.am

    r1246 r1436  
    33AUTOMAKE_OPTIONS = foreign 
    44 
    5 SUBDIRS = win32 
     5SUBDIRS = win32 linux 
    66 
  • libemu/trunk/src/Makefile.am

    r1429 r1436  
    7777 
    7878libemu_la_SOURCES += libdasm.c libdasm.h opcode_tables.h 
     79 
    7980libemu_la_SOURCES += environment/win32/emu_env_w32.c 
    8081libemu_la_SOURCES += environment/win32/emu_env_w32_dll.c 
     
    8485libemu_la_SOURCES += environment/win32/env_w32_dll_export_ws2_32_hooks.c 
    8586 
     87libemu_la_SOURCES += environment/linux/emu_env_linux.c 
     88libemu_la_SOURCES += environment/linux/env_linux_syscall_hooks.c 
     89 
     90 
    8691libemu_la_LDFLAGS = -no-undefined -version-info @libemu_soname@ -export-symbols-regex "^emu_" 
  • libemu/trunk/src/functions/int.c

    r1430 r1436  
    2626 *******************************************************************************/ 
    2727 
    28 #include <stdint.h> 
    29  
    30 // for the socket hooks 
    31 #include <sys/socket.h> 
    32 #include <netinet/in.h> 
    33 #include <arpa/inet.h> 
    34 #include <sys/types.h> 
    35 #include <sys/socket.h> 
    36  
    37  
    3828#include "emu/emu_cpu.h" 
    3929#include "emu/emu_cpu_data.h" 
     
    4333int32_t instr_int_cd(struct emu_cpu *c, struct emu_cpu_instruction *i) 
    4434{ 
    45 //      printf("interrupt %02x %i\n",*i->imm8, *c->reg8[al]); 
    46 //      uint32_t arg0 = c->reg[ecx]; 
    47  
    48  
    49         switch ( *c->reg8[al] ) 
    50         { 
    51         case 1: 
    52                 printf("sys_exit\n"); 
    53                 break; 
    54  
    55         case 2: 
    56                 printf("sys_fork\n"); 
    57                 break; 
    58  
    59         case 3: 
    60                 printf("sys_read\n"); 
    61                 break; 
    62  
    63         case 4: 
    64                 printf("sys_write\n"); 
    65                 break; 
    66  
    67         case 5: 
    68                 printf("sys_open\n"); 
    69                 break; 
    70  
    71         case 6: 
    72                 printf("sys_close\n"); 
    73                 break; 
    74  
    75         case 7: 
    76                 printf("sys_waitpid\n"); 
    77                 break; 
    78  
    79         case 8: 
    80                 printf("sys_creat\n"); 
    81                 break; 
    82  
    83         case 9: 
    84                 printf("sys_link\n"); 
    85                 break; 
    86  
    87         case 10: 
    88                 printf("sys_unlink\n"); 
    89                 break; 
    90  
    91         case 11: // sys_execve 
    92                 { 
    93                         struct emu_string *name = emu_string_new(); 
    94                         emu_memory_read_string(emu_memory_get(c->emu), c->reg[ebx], name, 255); 
    95                         printf("int execve (const char *dateiname=%08x={%s}, const char * argv[], const char *envp[]);\n",  
    96                                    c->reg[ebx], 
    97                                    emu_string_char(name)); 
    98                 } 
    99                 break; 
    100  
    101         case 12: 
    102                 printf("sys_chdir\n"); 
    103                 break; 
    104  
    105         case 13: 
    106                 printf("sys_time\n"); 
    107                 break; 
    108  
    109         case 14: 
    110                 printf("sys_mknod\n"); 
    111                 break; 
    112  
    113         case 15: 
    114                 printf("sys_chmod\n"); 
    115                 break; 
    116  
    117         case 16: 
    118                 printf("sys_lchown\n"); 
    119                 break; 
    120  
    121         case 18: 
    122                 printf("sys_stat\n"); 
    123                 break; 
    124  
    125         case 19: 
    126                 printf("sys_lseek\n"); 
    127                 break; 
    128  
    129         case 20: 
    130                 printf("sys_getpid\n"); 
    131                 break; 
    132  
    133         case 21: 
    134                 printf("sys_mount\n"); 
    135                 break; 
    136  
    137         case 22: 
    138                 printf("sys_oldumount\n"); 
    139                 break; 
    140  
    141         case 23: 
    142                 printf("sys_setuid\n"); 
    143                 break; 
    144  
    145         case 24: 
    146                 printf("sys_getuid\n"); 
    147                 break; 
    148  
    149         case 25: 
    150                 printf("sys_stime\n"); 
    151                 break; 
    152  
    153         case 26: 
    154                 printf("sys_ptrace\n"); 
    155                 break; 
    156  
    157         case 27: 
    158                 printf("sys_alarm\n"); 
    159                 break; 
    160  
    161         case 28: 
    162                 printf("sys_fstat\n"); 
    163                 break; 
    164  
    165         case 29: 
    166                 printf("sys_pause\n"); 
    167                 break; 
    168  
    169         case 30: 
    170                 printf("sys_utime\n"); 
    171                 break; 
    172  
    173         case 33: 
    174                 printf("sys_access\n"); 
    175                 break; 
    176  
    177         case 34: 
    178                 printf("sys_nice\n"); 
    179                 break; 
    180  
    181         case 36: 
    182                 printf("sys_sync\n"); 
    183                 break; 
    184  
    185         case 37: 
    186                 printf("sys_kill\n"); 
    187                 break; 
    188  
    189         case 38: 
    190                 printf("sys_rename\n"); 
    191                 break; 
    192  
    193         case 39: 
    194                 printf("sys_mkdir\n"); 
    195                 break; 
    196  
    197         case 40: 
    198                 printf("sys_rmdir\n"); 
    199                 break; 
    200  
    201         case 41: 
    202                 printf("sys_dup\n"); 
    203                 break; 
    204  
    205         case 42: 
    206                 printf("sys_pipe\n"); 
    207                 break; 
    208  
    209         case 43: 
    210                 printf("sys_times\n"); 
    211                 break; 
    212  
    213         case 45: 
    214                 printf("sys_brk\n"); 
    215                 break; 
    216  
    217         case 46: 
    218                 printf("sys_setgid\n"); 
    219                 break; 
    220  
    221         case 47: 
    222                 printf("sys_getgid\n"); 
    223                 break; 
    224  
    225         case 48: 
    226                 printf("sys_signal\n"); 
    227                 break; 
    228  
    229         case 49: 
    230                 printf("sys_geteuid\n"); 
    231                 break; 
    232  
    233         case 50: 
    234                 printf("sys_getegid\n"); 
    235                 break; 
    236  
    237         case 51: 
    238                 printf("sys_acct\n"); 
    239                 break; 
    240  
    241         case 52: 
    242                 printf("sys_umount\n"); 
    243                 break; 
    244  
    245         case 54: 
    246                 printf("sys_ioctl\n"); 
    247                 break; 
    248  
    249         case 55: 
    250                 printf("sys_fcntl\n"); 
    251                 break; 
    252  
    253         case 57: 
    254                 printf("sys_setpgid\n"); 
    255                 break; 
    256  
    257         case 59: 
    258                 printf("sys_olduname\n"); 
    259                 break; 
    260  
    261         case 60: 
    262                 printf("sys_umask\n"); 
    263                 break; 
    264  
    265         case 61: 
    266                 printf("sys_chroot\n"); 
    267                 break; 
    268  
    269         case 62: 
    270                 printf("sys_ustat\n"); 
    271                 break; 
    272  
    273         case 63:  
    274                 printf("int dup2(int oldfd=%i, int newfd=%i);\n", c->reg[ebx], c->reg[ecx]); 
    275                 emu_cpu_reg32_set(c, eax, c->reg[ecx]); 
    276                 break; 
    277  
    278         case 64: 
    279                 printf("sys_getppid\n"); 
    280                 break; 
    281  
    282         case 65: 
    283                 printf("sys_getpgrp\n"); 
    284                 break; 
    285  
    286         case 66: 
    287                 printf("sys_setsid\n"); 
    288                 break; 
    289  
    290         case 67: 
    291                 printf("sys_sigaction\n"); 
    292                 break; 
    293  
    294         case 68: 
    295                 printf("sys_sgetmask\n"); 
    296                 break; 
    297  
    298         case 69: 
    299                 printf("sys_ssetmask\n"); 
    300                 break; 
    301  
    302         case 70: 
    303                 printf("sys_setreuid\n"); 
    304                 break; 
    305  
    306         case 71: 
    307                 printf("sys_setregid\n"); 
    308                 break; 
    309  
    310         case 72: 
    311                 printf("sys_sigsuspend\n"); 
    312                 break; 
    313  
    314         case 73: 
    315                 printf("sys_sigpending\n"); 
    316                 break; 
    317  
    318         case 74: 
    319                 printf("sys_sethostname\n"); 
    320                 break; 
    321  
    322         case 75: 
    323                 printf("sys_setrlimit\n"); 
    324                 break; 
    325  
    326         case 76: 
    327                 printf("sys_getrlimit\n"); 
    328                 break; 
    329  
    330         case 77: 
    331                 printf("sys_getrusage\n"); 
    332                 break; 
    333  
    334         case 78: 
    335                 printf("sys_gettimeofday\n"); 
    336                 break; 
    337  
    338         case 79: 
    339                 printf("sys_settimeofday\n"); 
    340                 break; 
    341  
    342         case 80: 
    343                 printf("sys_getgroups\n"); 
    344                 break; 
    345  
    346         case 81: 
    347                 printf("sys_setgroups\n"); 
    348                 break; 
    349  
    350         case 82: 
    351                 printf("old_select\n"); 
    352                 break; 
    353  
    354         case 83: 
    355                 printf("sys_symlink\n"); 
    356                 break; 
    357  
    358         case 84: 
    359                 printf("sys_lstat\n"); 
    360                 break; 
    361  
    362         case 85: 
    363                 printf("sys_readlink\n"); 
    364                 break; 
    365  
    366         case 86: 
    367                 printf("sys_uselib\n"); 
    368                 break; 
    369  
    370         case 87: 
    371                 printf("sys_swapon\n"); 
    372                 break; 
    373  
    374         case 88: 
    375                 printf("sys_reboot\n"); 
    376                 break; 
    377  
    378         case 89: 
    379                 printf("old_readdir\n"); 
    380                 break; 
    381  
    382         case 90: 
    383                 printf("old_mmap\n"); 
    384                 break; 
    385  
    386         case 91: 
    387                 printf("sys_munmap\n"); 
    388                 break; 
    389  
    390         case 92: 
    391                 printf("sys_truncate\n"); 
    392                 break; 
    393  
    394         case 93: 
    395                 printf("sys_ftruncate\n"); 
    396                 break; 
    397  
    398         case 94: 
    399                 printf("sys_fchmod\n"); 
    400                 break; 
    401  
    402         case 95: 
    403                 printf("sys_fchown\n"); 
    404                 break; 
    405  
    406         case 96: 
    407                 printf("sys_getpriority\n"); 
    408                 break; 
    409  
    410         case 97: 
    411                 printf("sys_setpriority\n"); 
    412                 break; 
    413  
    414         case 99: 
    415                 printf("sys_statfs\n"); 
    416                 break; 
    417  
    418         case 100: 
    419                 printf("sys_fstatfs\n"); 
    420                 break; 
    421  
    422         case 101: 
    423                 printf("sys_ioperm\n"); 
    424                 break; 
    425  
    426         case 102: 
    427 //              printf("sys_socketcall\n"); 
    428                 { 
    429 /* Argument list sizes for sys_socketcall */ 
    430 #define AL(x) (x) 
    431                         static unsigned char nargs[18]={AL(0),AL(3),AL(3),AL(3),AL(2),AL(3), 
    432                                 AL(3),AL(3),AL(4),AL(4),AL(4),AL(6), 
    433                                 AL(6),AL(2),AL(5),AL(5),AL(3),AL(3)}; 
    434 #undef AL 
    435  
    436                         uint32_t a[6]; 
    437                         int i; 
    438                         for (i=0;i<nargs[c->reg[ebx]];i++) 
    439                         { 
    440                                 emu_memory_read_dword(emu_memory_get(c->emu),c->reg[ecx]+4*i,a+i); 
    441                         } 
    442  
    443                         switch ( c->reg[ebx] ) 
    444                         { 
    445                         case 1: // SYS_SOCKET  
    446                                 printf("int socket(int domain=%i, int type=%i, int protocol=%i);\n", 
    447                                            a[0], 
    448                                            a[1], 
    449                                            a[2]); 
    450                                 emu_cpu_reg32_set(c, eax, 4); 
    451                                 break; 
    452  
    453                         case 2: // SYS_BIND  
    454                                 printf("sys_bind(2)\n"); 
    455                                 { 
    456                                         struct sockaddr sa; 
    457                                         memset(&sa, 0, sizeof(struct sockaddr)); 
    458                                         emu_memory_read_block(emu_memory_get(c->emu), a[1], &sa, sizeof(struct sockaddr)); 
    459  
    460                                         printf("int bind(int sockfd=%i, struct sockaddr *my_addr=%08x={host %s port %i}, int addrlen);\n", 
    461                                                    a[0], 
    462                                                    a[1], inet_ntoa(*(struct in_addr *)&((struct sockaddr_in *)&sa)->sin_addr), ntohs(((struct sockaddr_in *)&sa)->sin_port)  
    463                                                    ); 
    464                                 } 
    465                                 emu_cpu_reg32_set(c, eax, 0); 
    466                                 break; 
    467  
    468                         case 3: // SYS_CONNECT  
    469                                 { 
    470                                         struct sockaddr sa; 
    471                                         memset(&sa, 0, sizeof(struct sockaddr)); 
    472                                         emu_memory_read_block(emu_memory_get(c->emu), a[1], &sa, sizeof(struct sockaddr)); 
    473  
    474                                         printf("int connect(int sockfd=%i, struct sockaddr *my_addr=%08x={host %s port %i}, int addrlen);\n", 
    475                                                    a[0], 
    476                                                    a[1], inet_ntoa(*(struct in_addr *)&((struct sockaddr_in *)&sa)->sin_addr), ntohs(((struct sockaddr_in *)&sa)->sin_port) 
    477                                                    ); 
    478  
    479                                 } 
    480                                 break; 
    481  
    482                         case 4: // SYS_LISTEN  
    483                                 printf("int listen(int s=%i, int backlog=%i);\n",  
    484                                            a[0],  
    485                                            a[1]); 
    486                                 break; 
    487  
    488                         case 5: // SYS_ACCEPT  
    489                 printf("int accept(int s=%i, struct sockaddr *addr=%08x, int *addrlen=%08x);\n", 
    490                                            a[0], 
    491                                            a[1], 
    492                                            a[2]); 
    493                                 emu_cpu_reg32_set(c, eax, 112); 
    494                                 break; 
    495  
    496                         case 6: // SYS_GETSOCKNAME  
    497                                 printf("sys_getsockname(2)\n"); 
    498                                 break; 
    499  
    500                         case 7: // SYS_GETPEERNAME  
    501                                 printf("sys_getpeername(2)\n"); 
    502                                 break; 
    503  
    504                         case 8: // SYS_SOCKETPAIR  
    505                                 printf("sys_socketpair(2)\n"); 
    506                                 break; 
    507  
    508                         case 9: // SYS_SEND  
    509                                 printf("sys_send(2)\n"); 
    510                                 break; 
    511  
    512                         case 10: // SYS_RECV  
    513                                 printf("sys_recv(2)\n"); 
    514                                 break; 
    515  
    516                         case 11: // SYS_SENDTO  
    517                                 printf("sys_sendto(2)\n"); 
    518                                 break; 
    519  
    520                         case 12: // SYS_RECVFROM  
    521                                 printf("sys_recvfrom(2)\n"); 
    522                                 break; 
    523  
    524                         case 13: // SYS_SHUTDOWN  
    525                                 printf("sys_shutdown(2)\n"); 
    526                                 break; 
    527  
    528                         case 14: // SYS_SETSOCKOPT  
    529                                 printf("sys_setsockopt(2)\n"); 
    530                                 break; 
    531  
    532                         case 15: // SYS_GETSOCKOPT  
    533                                 printf("sys_getsockopt(2)\n"); 
    534                                 break; 
    535  
    536                         case 16: // SYS_SENDMSG  
    537                                 printf("sys_sendmsg(2)\n"); 
    538                                 break; 
    539  
    540                         case 17: // SYS_RECVMSG  
    541                                 printf("sys_recvmsg(2)\n"); 
    542                                 break; 
    543                         } 
    544                 } 
    545                 break; 
    546  
    547         case 103: 
    548                 printf("sys_syslog\n"); 
    549                 break; 
    550  
    551         case 104: 
    552                 printf("sys_setitimer\n"); 
    553                 break; 
    554  
    555         case 105: 
    556                 printf("sys_getitimer\n"); 
    557                 break; 
    558  
    559         case 106: 
    560                 printf("sys_newstat\n"); 
    561                 break; 
    562  
    563         case 107: 
    564                 printf("sys_newlstat\n"); 
    565                 break; 
    566  
    567         case 108: 
    568                 printf("sys_newfstat\n"); 
    569                 break; 
    570  
    571         case 109: 
    572                 printf("sys_uname\n"); 
    573                 break; 
    574  
    575         case 110: 
    576                 printf("sys_iopl\n"); 
    577                 break; 
    578  
    579         case 111: 
    580                 printf("sys_vhangup\n"); 
    581                 break; 
    582  
    583         case 112: 
    584                 printf("sys_idle\n"); 
    585                 break; 
    586  
    587         case 113: 
    588                 printf("sys_vm86old\n"); 
    589                 break; 
    590  
    591         case 114: 
    592                 printf("sys_wait4\n"); 
    593                 break; 
    594  
    595         case 115: 
    596                 printf("sys_swapoff\n"); 
    597                 break; 
    598  
    599         case 116: 
    600                 printf("sys_sysinfo\n"); 
    601                 break; 
    602  
    603         case 117: 
    604                 printf("sys_ipc\n"); 
    605                 break; 
    606  
    607         case 118: 
    608                 printf("sys_fsync\n"); 
    609                 break; 
    610  
    611         case 119: 
    612                 printf("sys_sigreturn\n"); 
    613                 break; 
    614  
    615         case 120: 
    616                 printf("sys_clone\n"); 
    617                 break; 
    618  
    619         case 121: 
    620                 printf("sys_setdomainname\n"); 
    621                 break; 
    622  
    623         case 122: 
    624                 printf("sys_newuname\n"); 
    625                 break; 
    626  
    627         case 123: 
    628                 printf("sys_modify_ldt\n"); 
    629                 break; 
    630  
    631         case 124: 
    632                 printf("sys_adjtimex\n"); 
    633                 break; 
    634  
    635         case 125: 
    636                 printf("sys_mprotect\n"); 
    637                 break; 
    638  
    639         case 126: 
    640                 printf("sys_sigprocmask\n"); 
    641                 break; 
    642  
    643         case 127: 
    644                 printf("sys_create_module\n"); 
    645                 break; 
    646  
    647         case 128: 
    648                 printf("sys_init_module\n"); 
    649                 break; 
    650  
    651         case 129: 
    652                 printf("sys_delete_module\n"); 
    653                 break; 
    654  
    655         case 130: 
    656                 printf("sys_get_kernel_syms\n"); 
    657                 break; 
    658  
    659         case 131: 
    660                 printf("sys_quotactl\n"); 
    661                 break; 
    662  
    663         case 132: 
    664                 printf("sys_getpgid\n"); 
    665                 break; 
    666  
    667         case 133: 
    668                 printf("sys_fchdir\n"); 
    669                 break; 
    670  
    671         case 134: 
    672                 printf("sys_bdflush\n"); 
    673                 break; 
    674  
    675         case 135: 
    676                 printf("sys_sysfs\n"); 
    677                 break; 
    678  
    679         case 136: 
    680                 printf("sys_personality\n"); 
    681                 break; 
    682  
    683         case 138: 
    684                 printf("sys_setfsuid\n"); 
    685                 break; 
    686  
    687         case 139: 
    688                 printf("sys_setfsgid\n"); 
    689                 break; 
    690  
    691         case 140: 
    692                 printf("sys_llseek\n"); 
    693                 break; 
    694  
    695         case 141: 
    696                 printf("sys_getdents\n"); 
    697                 break; 
    698  
    699         case 142: 
    700                 printf("sys_select\n"); 
    701                 break; 
    702  
    703         case 143: 
    704                 printf("sys_flock\n"); 
    705                 break; 
    706  
    707         case 144: 
    708                 printf("sys_msync\n"); 
    709                 break; 
    710  
    711         case 145: 
    712                 printf("sys_readv\n"); 
    713                 break; 
    714  
    715         case 146: 
    716                 printf("sys_writev\n"); 
    717                 break; 
    718  
    719         case 147: 
    720                 printf("sys_getsid\n"); 
    721                 break; 
    722  
    723         case 148: 
    724                 printf("sys_fdatasync\n"); 
    725                 break; 
    726  
    727         case 149: 
    728                 printf("sys_sysctl\n"); 
    729                 break; 
    730  
    731         case 150: 
    732                 printf("sys_mlock\n"); 
    733                 break; 
    734  
    735         case 151: 
    736                 printf("sys_munlock\n"); 
    737                 break; 
    738  
    739         case 152: 
    740                 printf("sys_mlockall\n"); 
    741                 break; 
    742  
    743         case 153: 
    744                 printf("sys_munlockall\n"); 
    745                 break; 
    746  
    747         case 154: 
    748                 printf("sys_sched_setparam\n"); 
    749                 break; 
    750  
    751         case 155: 
    752                 printf("sys_sched_getparam\n"); 
    753                 break; 
    754  
    755         case 156: 
    756                 printf("sys_sched_setscheduler\n"); 
    757                 break; 
    758  
    759         case 157: 
    760                 printf("sys_sched_getscheduler\n"); 
    761                 break; 
    762  
    763         case 158: 
    764                 printf("sys_sched_yield\n"); 
    765                 break; 
    766  
    767         case 159: 
    768                 printf("sys_sched_get_priority_max\n"); 
    769                 break; 
    770  
    771         case 160: 
    772                 printf("sys_sched_get_priority_min\n"); 
    773                 break; 
    774  
    775         case 161: 
    776                 printf("sys_sched_rr_get_interval\n"); 
    777                 break; 
    778  
    779         case 162: 
    780                 printf("sys_nanosleep\n"); 
    781                 break; 
    782  
    783         case 163: 
    784                 printf("sys_mremap\n"); 
    785                 break; 
    786  
    787         case 164: 
    788                 printf("sys_setresuid\n"); 
    789                 break; 
    790  
    791         case 165: 
    792                 printf("sys_getresuid\n"); 
    793                 break; 
    794  
    795         case 166: 
    796                 printf("sys_vm86\n"); 
    797                 break; 
    798  
    799         case 167: 
    800                 printf("sys_query_module\n"); 
    801                 break; 
    802  
    803         case 168: 
    804                 printf("sys_poll\n"); 
    805                 break; 
    806  
    807         case 169: 
    808                 printf("sys_nfsservctl\n"); 
    809                 break; 
    810  
    811         case 170: 
    812                 printf("sys_setresgid\n"); 
    813                 break; 
    814  
    815         case 171: 
    816                 printf("sys_getresgid\n"); 
    817                 break; 
    818  
    819         case 172: 
    820                 printf("sys_prctl\n"); 
    821                 break; 
    822  
    823         case 173: 
    824                 printf("sys_rt_sigreturn\n"); 
    825                 break; 
    826  
    827         case 174: 
    828                 printf("sys_rt_sigaction\n"); 
    829                 break; 
    830  
    831         case 175: 
    832                 printf("sys_rt_sigprocmask\n"); 
    833                 break; 
    834  
    835         case 176: 
    836                 printf("sys_rt_sigpending\n"); 
    837                 break; 
    838  
    839         case 177: 
    840                 printf("sys_rt_sigtimedwait\n"); 
    841                 break; 
    842  
    843         case 178: 
    844                 printf("sys_rt_sigqueueinfo\n"); 
    845                 break; 
    846  
    847         case 179: 
    848                 printf("sys_rt_sigsuspend\n"); 
    849                 break; 
    850  
    851         case 180: 
    852                 printf("sys_pread\n"); 
    853                 break; 
    854  
    855         case 181: 
    856                 printf("sys_pwrite\n"); 
    857                 break; 
    858  
    859         case 182: 
    860                 printf("sys_chown\n"); 
    861                 break; 
    862  
    863         case 183: 
    864                 printf("sys_getcwd\n"); 
    865                 break; 
    866  
    867         case 184: 
    868                 printf("sys_capget\n"); 
    869                 break; 
    870  
    871         case 185: 
    872                 printf("sys_capset\n"); 
    873                 break; 
    874  
    875         case 186: 
    876                 printf("sys_sigaltstack\n"); 
    877                 break; 
    878  
    879         case 187: 
    880                 printf("sys_sendfile\n"); 
    881                 break; 
    882  
    883         case 190: 
    884                 printf("sys_vfork\n"); 
    885                 break; 
    886  
    887         } 
    88835        return 0; 
    88936} 
  • libemu/trunk/testsuite/sctest.c

    r1429 r1436  
    5151#include "emu/environment/win32/emu_env_w32_dll.h" 
    5252#include "emu/environment/win32/emu_env_w32_dll_export.h" 
     53#include "emu/environment/linux/emu_env_linux.h" 
    5354#include "emu/emu_getpc.h" 
    5455#include "emu/emu_graph.h" 
     
    14981499        struct emu_string  *instr_string; 
    14991500        struct emu_env_w32_dll *dll; 
     1501        struct emu_env_linux_syscall *syscall; 
    15001502}; 
    15011503 
     
    15231525        iv->instr_string = emu_string_new(); 
    15241526        iv->dll = from->dll; 
     1527        iv->syscall = from->syscall; 
     1528 
    15251529        emu_string_append_char(iv->instr_string, from->instr_string->data); 
    15261530        return iv; 
     
    16031607 
    16041608} 
     1609 
    16051610 
    16061611int test(int n) 
     
    16111616        struct emu_memory *mem = emu_memory_get(e); 
    16121617        struct emu_env_w32 *env = emu_env_w32_new(e); 
     1618        struct emu_env_linux *lenv = emu_env_linux_new(e); 
    16131619 
    16141620        /* IAT for sqlslammer */ 
     
    17911797                                } 
    17921798 
     1799                                struct emu_env_linux_syscall *syscall =NULL; 
    17931800                                if ( ret != -1 ) 
    17941801                                { 
    17951802 
    1796                                         if ( opts.graphfile != NULL && ev->data == NULL
     1803                                        if ( ( syscall = emu_env_linux_syscall_check(lenv)) != NULL
    17971804                                        { 
    1798                                                 iv = instr_vertex_new(eipsave, emu_cpu_get(e)->instr_string); 
    1799                                                 emu_vertex_data_set(ev, iv); 
     1805                                                if ( opts.graphfile != NULL && ev->data == NULL ) 
     1806                                                { 
     1807      &n