Changeset 1660
- Timestamp:
- 07/21/08 00:44:51 (1 month ago)
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
libemu/trunk/src/environment/linux/env_linux_syscall_hooks.c
r1607 r1660 198 198 memset(&sa, 0, sizeof(struct sockaddr)); 199 199 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); 224 201 emu_profile_argument_add_int(env->profile, "int", "addrlen", a[2]); 225 202 … … 248 225 emu_memory_read_block(emu_memory_get(c->emu), a[1], &sa, sizeof(struct sockaddr)); 249 226 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); 270 228 271 229 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 130 130 131 131 132 uint32_t name;133 POP_DWORD(c, & name);132 uint32_t p_name; 133 POP_DWORD(c, &p_name); 134 134 135 135 … … 137 137 struct sockaddr sa; 138 138 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); 159 141 160 142 … … 163 145 emu_profile_argument_add_int(env->profile, "int", "namelen", namelen); 164 146 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); 166 148 167 149 … … 246 228 emu_profile_argument_add_int(env->profile, "SOCKET", "s", s); 247 229 248 uint32_t name;249 POP_DWORD(c, & name);230 uint32_t p_name; 231 POP_DWORD(c, &p_name); 250 232 struct sockaddr sa; 251 233 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); 271 236 272 237 uint32_t namelen; … … 340 305 return 0; 341 306 } 307 308 #define emu_assert(emu, x) \ 309 if (x) \ 310 { \ 311 printf("Insane value at %s:%i\n", __FILE__, __LINE__); \ 312 } 313 342 314 343 315 int32_t env_w32_hook_recv(struct emu_env *env, struct emu_env_hook *hook) … … 379 351 380 352 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); 383 364 384 365 uint32_t returnvalue; … … 388 369 s, 389 370 buffer, 390 len,371 xlen, 391 372 flags); 392 373 }else … … 395 376 returnvalue = 0; 396 377 else 397 returnvalue = len;378 returnvalue = xlen; 398 379 } 399 380 emu_cpu_reg32_set(c, eax, returnvalue); … … 423 404 424 405 POP_DWORD(c, &eip_save); 406 emu_profile_function_add(env->profile, "send"); 425 407 /* 426 408 int send( … … 433 415 uint32_t s; 434 416 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); 438 422 439 423 uint32_t len; … … 443 427 POP_DWORD(c, &flags); 444 428 429 445 430 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); 448 438 449 439 … … 521 511 struct sockaddr sa; 522 512 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); 541 514 542 515
