| 411 | | case 1: // SYS_SOCKET |
|---|
| 412 | | printf("sys_socket(2)\n"); |
|---|
| 413 | | break; |
|---|
| 414 | | |
|---|
| 415 | | case 2: // SYS_BIND |
|---|
| 416 | | printf("sys_bind(2)\n"); |
|---|
| 417 | | break; |
|---|
| 418 | | |
|---|
| 419 | | case 3: // SYS_CONNECT |
|---|
| 420 | | printf("sys_connect(2)\n"); |
|---|
| 421 | | break; |
|---|
| 422 | | |
|---|
| 423 | | case 4: // SYS_LISTEN |
|---|
| 424 | | printf("sys_listen(2)\n"); |
|---|
| 425 | | break; |
|---|
| 426 | | |
|---|
| 427 | | case 5: // SYS_ACCEPT |
|---|
| 428 | | printf("sys_accept(2)\n"); |
|---|
| 429 | | break; |
|---|
| 430 | | |
|---|
| 431 | | case 6: // SYS_GETSOCKNAME |
|---|
| 432 | | printf("sys_getsockname(2)\n"); |
|---|
| 433 | | break; |
|---|
| 434 | | |
|---|
| 435 | | case 7: // SYS_GETPEERNAME |
|---|
| 436 | | printf("sys_getpeername(2)\n"); |
|---|
| 437 | | break; |
|---|
| 438 | | |
|---|
| 439 | | case 8: // SYS_SOCKETPAIR |
|---|
| 440 | | printf("sys_socketpair(2)\n"); |
|---|
| 441 | | break; |
|---|
| 442 | | |
|---|
| 443 | | case 9: // SYS_SEND |
|---|
| 444 | | printf("sys_send(2)\n"); |
|---|
| 445 | | break; |
|---|
| 446 | | |
|---|
| 447 | | case 10: // SYS_RECV |
|---|
| 448 | | printf("sys_recv(2)\n"); |
|---|
| 449 | | break; |
|---|
| 450 | | |
|---|
| 451 | | case 11: // SYS_SENDTO |
|---|
| 452 | | printf("sys_sendto(2)\n"); |
|---|
| 453 | | break; |
|---|
| 454 | | |
|---|
| 455 | | case 12: // SYS_RECVFROM |
|---|
| 456 | | printf("sys_recvfrom(2)\n"); |
|---|
| 457 | | break; |
|---|
| 458 | | |
|---|
| 459 | | case 13: // SYS_SHUTDOWN |
|---|
| 460 | | printf("sys_shutdown(2)\n"); |
|---|
| 461 | | break; |
|---|
| 462 | | |
|---|
| 463 | | case 14: // SYS_SETSOCKOPT |
|---|
| 464 | | printf("sys_setsockopt(2)\n"); |
|---|
| 465 | | break; |
|---|
| 466 | | |
|---|
| 467 | | case 15: // SYS_GETSOCKOPT |
|---|
| 468 | | printf("sys_getsockopt(2)\n"); |
|---|
| 469 | | break; |
|---|
| 470 | | |
|---|
| 471 | | case 16: // SYS_SENDMSG |
|---|
| 472 | | printf("sys_sendmsg(2)\n"); |
|---|
| 473 | | break; |
|---|
| 474 | | |
|---|
| 475 | | case 17: // SYS_RECVMSG |
|---|
| 476 | | printf("sys_recvmsg(2)\n"); |
|---|
| 477 | | break; |
|---|
| | 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 | } |
|---|