Changeset 1660

Show
Ignore:
Timestamp:
07/21/08 00:44:51 (1 month ago)
Author:
common
Message:

libemu

  • use emu_profile_argument_add_sockaddr_ptr where possible to save some lines
Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • libemu/trunk/src/environment/linux/env_linux_syscall_hooks.c

    r1607 r1660  
    198198                        memset(&sa, 0, sizeof(struct sockaddr)); 
    199199                        emu_memory_read_block(emu_memory_get(c->emu), a[1], &sa, sizeof(struct sockaddr)); 
    200  
    201                         if ( sa.sa_family == AF_INET ) 
    202                         { 
    203                                 struct sockaddr_in *si = (struct sockaddr_in *)&sa; 
    204                                 emu_profile_argument_add_ptr(env->profile, "sockaddr_in *", "my_addr", a[1]); 
    205                                 emu_profile_argument_struct_start(env->profile, "", ""); 
    206                                 emu_profile_argument_add_int(env->profile, "short", "sin_family", si->sin_family); 
    207                                 emu_profile_argument_add_port(env->profile, "unsigned short", "sin_port", si->sin_port); 
    208                                 emu_profile_argument_struct_start(env->profile, "in_addr", "sin_addr"); 
    209                                 emu_profile_argument_add_ip(env->profile, "unsigned long", "s_addr", si->sin_addr.s_addr); 
    210                                 emu_profile_argument_struct_end(env->profile); 
    211                                 emu_profile_argument_add_string(env->profile, "char", "sin_zero", "       "); 
    212                                 emu_profile_argument_struct_end(env->profile); 
    213  
    214                         } 
    215                         else 
    216                         { 
    217                                 emu_profile_argument_add_ptr(env->profile, "sockaddr *", "my_addr", a[1]); 
    218                                 emu_profile_argument_struct_start(env->profile, "", ""); 
    219                                 emu_profile_argument_struct_end(env->profile); 
    220                         } 
    221  
    222  
    223  
     200                        emu_profile_argument_add_sockaddr_ptr(env->profile, "my_addr", a[1], sa); 
    224201                        emu_profile_argument_add_int(env->profile, "int", "addrlen", a[2]); 
    225202 
     
    248225                        emu_memory_read_block(emu_memory_get(c->emu), a[1], &sa, sizeof(struct sockaddr)); 
    249226 
    250                         if (sa.sa_family == AF_INET) 
    251                         { 
    252                                 struct sockaddr_in *si = (struct sockaddr_in *)&sa; 
    253                                 emu_profile_argument_add_ptr(env->profile, "sockaddr_in *", "serv_addr", a[1]); 
    254                                 emu_profile_argument_struct_start(env->profile, "", ""); 
    255                                 emu_profile_argument_add_int(env->profile, "short", "sin_family", si->sin_family); 
    256                                 emu_profile_argument_add_port(env->profile, "unsigned short", "sin_port", si->sin_port); 
    257                                 emu_profile_argument_struct_start(env->profile, "in_addr", "sin_addr"); 
    258                                 emu_profile_argument_add_ip(env->profile, "unsigned long", "s_addr", si->sin_addr.s_addr); 
    259                                 emu_profile_argument_struct_end(env->profile); 
    260                                 emu_profile_argument_add_string(env->profile, "char", "sin_zero", "       "); 
    261                                 emu_profile_argument_struct_end(env->profile); 
    262  
    263                         }else 
    264                         { 
    265  
    266                                 emu_profile_argument_add_ptr(env->profile, "sockaddr *", "serv_addr", a[1]); 
    267                                 emu_profile_argument_struct_start(env->profile, "", ""); 
    268                                 emu_profile_argument_struct_end(env->profile); 
    269                         } 
     227                        emu_profile_argument_add_sockaddr_ptr(env->profile, "serv_addr", a[1], sa); 
    270228 
    271229                        emu_profile_argument_add_int(env->profile, "int", "addrlen", a[2]); 
  • libemu/trunk/src/environment/win32/env_w32_dll_export_ws2_32_hooks.c

    r1655 r1660  
    130130 
    131131 
    132         uint32_t name; 
    133         POP_DWORD(c, &name); 
     132        uint32_t p_name; 
     133        POP_DWORD(c, &p_name); 
    134134         
    135135         
     
    137137        struct sockaddr sa; 
    138138         
    139         emu_memory_read_block(emu_memory_get(env->emu), name, &sa, sizeof(struct sockaddr)); 
    140         if (sa.sa_family == AF_INET) 
    141         { 
    142                 struct sockaddr_in *si = (struct sockaddr_in *)&sa; 
    143                 emu_profile_argument_add_ptr(env->profile, "sockaddr_in *", "name", name); 
    144                 emu_profile_argument_struct_start(env->profile, "", ""); 
    145                 emu_profile_argument_add_short(env->profile, "short", "sin_family", si->sin_family); 
    146                 emu_profile_argument_add_port(env->profile, "unsigned short", "sin_port", si->sin_port); 
    147                 emu_profile_argument_struct_start(env->profile, "in_addr", "sin_addr"); 
    148                 emu_profile_argument_add_ip(env->profile, "unsigned long", "s_addr", si->sin_addr.s_addr); 
    149                 emu_profile_argument_struct_end(env->profile); 
    150                 emu_profile_argument_add_string(env->profile, "char", "sin_zero", "       "); 
    151                 emu_profile_argument_struct_end(env->profile); 
    152  
    153         }else 
    154         { 
    155                 emu_profile_argument_struct_start(env->profile, "sockaddr *", "name"); 
    156                 emu_profile_argument_struct_end(env->profile); 
    157         } 
    158  
     139        emu_memory_read_block(emu_memory_get(env->emu), p_name, &sa, sizeof(struct sockaddr)); 
     140        emu_profile_argument_add_sockaddr_ptr(env->profile, "name", p_name, sa); 
    159141 
    160142 
     
    163145        emu_profile_argument_add_int(env->profile, "int", "namelen", namelen); 
    164146 
    165         logDebug(env->emu, "bind(s=%i, name=%x, namelen=%i\n", s, name, namelen); 
     147        logDebug(env->emu, "bind(s=%i, name=%x, namelen=%i\n", s, p_name, namelen); 
    166148 
    167149 
     
    246228        emu_profile_argument_add_int(env->profile, "SOCKET", "s", s); 
    247229 
    248         uint32_t name; 
    249         POP_DWORD(c, &name); 
     230        uint32_t p_name; 
     231        POP_DWORD(c, &p_name); 
    250232        struct sockaddr sa; 
    251233 
    252         emu_memory_read_block(emu_memory_get(env->emu), name, &sa, sizeof(struct sockaddr)); 
    253         if (sa.sa_family == AF_INET) 
    254         { 
    255                 struct sockaddr_in *si = (struct sockaddr_in *)&sa; 
    256                 emu_profile_argument_add_ptr(env->profile, "sockaddr_in *", "name", name); 
    257                 emu_profile_argument_struct_start(env->profile, "", ""); 
    258                 emu_profile_argument_add_short(env->profile, "short", "sin_family", si->sin_family); 
    259                 emu_profile_argument_add_port(env->profile, "unsigned short", "sin_port", si->sin_port); 
    260                 emu_profile_argument_struct_start(env->profile, "in_addr", "sin_addr"); 
    261                 emu_profile_argument_add_ip(env->profile, "unsigned long", "s_addr", si->sin_addr.s_addr); 
    262                 emu_profile_argument_struct_end(env->profile); 
    263                 emu_profile_argument_add_string(env->profile, "char", "sin_zero", "       "); 
    264                 emu_profile_argument_struct_end(env->profile); 
    265  
    266         }else 
    267         { 
    268                 emu_profile_argument_struct_start(env->profile, "sockaddr *", "name"); 
    269                 emu_profile_argument_struct_end(env->profile); 
    270         } 
     234        emu_memory_read_block(emu_memory_get(env->emu), p_name, &sa, sizeof(struct sockaddr)); 
     235        emu_profile_argument_add_sockaddr_ptr(env->profile, "name", p_name, sa); 
    271236 
    272237        uint32_t namelen; 
     
    340305        return 0; 
    341306} 
     307 
     308#define emu_assert(emu, x) \ 
     309if (x) \ 
     310{ \ 
     311        printf("Insane value at %s:%i\n", __FILE__, __LINE__); \ 
     312} 
     313 
    342314 
    343315int32_t env_w32_hook_recv(struct emu_env *env, struct emu_env_hook *hook) 
     
    379351 
    380352        uint32_t xlen = len; 
    381         char *buffer = (char *)malloc(len); 
    382         memset(buffer, 0, len); 
     353        if (xlen < 0 || xlen > 4096) 
     354        { 
     355 
     356                printf("BUG\n"); 
     357                xlen = 4069; 
     358        } 
     359 
     360        emu_assert(env->emu, len < 0 || len > 4096); 
     361 
     362        char *buffer = (char *)malloc(xlen); 
     363        memset(buffer, 0, xlen); 
    383364 
    384365        uint32_t returnvalue; 
     
    388369                                                                                           s, 
    389370                                                                                           buffer, 
    390                                                                                            len, 
     371                                                                                           xlen, 
    391372                                                                                           flags); 
    392373        }else 
     
    395376                        returnvalue = 0; 
    396377                else 
    397                         returnvalue = len; 
     378                        returnvalue = xlen; 
    398379        } 
    399380        emu_cpu_reg32_set(c, eax, returnvalue); 
     
    423404 
    424405        POP_DWORD(c, &eip_save); 
     406        emu_profile_function_add(env->profile, "send"); 
    425407/* 
    426408int send( 
     
    433415        uint32_t s; 
    434416        POP_DWORD(c, &s); 
    435  
    436         uint32_t buf; 
    437         POP_DWORD(c, &buf); 
     417        emu_profile_argument_add_int(env->profile, "SOCKET", "s", s); 
     418 
     419        uint32_t p_buf; 
     420        POP_DWORD(c, &p_buf); 
     421        emu_profile_argument_add_ptr(env->profile, "const char *", "buf", p_buf); 
    438422 
    439423        uint32_t len; 
     
    443427        POP_DWORD(c, &flags); 
    444428 
     429 
    445430        char *buffer = (char *)malloc(len); 
    446         logDebug(env->emu, "send(%i, 0x%08x, %i,  %i)\n", s, buf, len, flags); 
    447         emu_memory_read_block(emu_memory_get(env->emu), buf, buffer, len); 
     431        logDebug(env->emu, "send(%i, 0x%08x, %i,  %i)\n", s, p_buf, len, flags); 
     432        emu_memory_read_block(emu_memory_get(env->emu), p_buf, buffer, len); 
     433        emu_profile_argument_add_bytea(env->profile, "", "", (void *)buffer, len); 
     434 
     435         
     436        emu_profile_argument_add_int(env->profile, "int", "len", len); 
     437        emu_profile_argument_add_int(env->profile, "int", "flags", flags); 
    448438 
    449439 
     
    521511        struct sockaddr sa; 
    522512        emu_memory_read_block(emu_memory_get(env->emu), p_to, &sa, sizeof(struct sockaddr)); 
    523         if (sa.sa_family == AF_INET) 
    524         { 
    525                 struct sockaddr_in *si = (struct sockaddr_in *)&sa; 
    526                 emu_profile_argument_add_ptr(env->profile, "sockaddr_in *", "name", p_to); 
    527                 emu_profile_argument_struct_start(env->profile, "", ""); 
    528                 emu_profile_argument_add_short(env->profile, "short", "sin_family", si->sin_family); 
    529                 emu_profile_argument_add_port(env->profile, "unsigned short", "sin_port", si->sin_port); 
    530                 emu_profile_argument_struct_start(env->profile, "in_addr", "sin_addr"); 
    531                 emu_profile_argument_add_ip(env->profile, "unsigned long", "s_addr", si->sin_addr.s_addr); 
    532                 emu_profile_argument_struct_end(env->profile); 
    533                 emu_profile_argument_add_string(env->profile, "char", "sin_zero", "       "); 
    534                 emu_profile_argument_struct_end(env->profile); 
    535  
    536         }else 
    537         { 
    538                 emu_profile_argument_struct_start(env->profile, "sockaddr *", "name"); 
    539                 emu_profile_argument_struct_end(env->profile); 
    540         } 
     513        emu_profile_argument_add_sockaddr_ptr(env->profile, "name", p_to, sa); 
    541514 
    542515