このページはEtoJ逐語翻訳フィルタによって翻訳生成されました。 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | 調印するd int __stdcall Dns_Ip4ReverseNameToAddress_A(int a_ret, const char *a_src) { unsigned int v_srclen; // esi@1 size_t v_srclen_minus0xd; // esi@6 int v_return; // ebx@7 char *v_suffix; // esi@7 unsigned int v_bits_found; // edi@7 unsigned __int32 v_octet; // eax@11 char v_buf[32]; // [sp+Ch] [bp-24h]@7 unsigned int v_cookie; // [sp+2Ch] [bp-4h]@1 int v_ret; // [sp+30h] [bp+0h]@1 v_cookie = (unsigned int)&v_ret ^ __security_cookie; v_srclen = strlen(a_src); if ( v_srclen > 31 ) return 0; if ( a_src[v_srclen - 1] == '.' ) --v_srclen; if ( v_srclen <= 0xD || (v_srclen_minus0xd = v_srclen - 0xD, __strnicmp(".in-addr.arpa", &a_src[v_srclen_minus0xd], 0xDu)) ) return 0; memcpy(v_buf, a_src, v_srclen_minus0xd); v_return = 0; v_buf[v_srclen_minus0xd] = 0; v_suffix = &v_buf[v_srclen_minus0xd]; v_bits_found = 0; while ( 1 ) { while ( 1 ) { --v_suffix; if ( *v_suffix == '.' ) break; if ( v_suffix == v_buf ) goto LABEL_11; } *v_suffix++ = 0; LABEL_11: v_octet = _strtoul(v_suffix, 0, 10); if ( v_octet > 0xFF || v_bits_found > 0x18 ) return 0; v_return |= v_octet << v_bits_found; if ( v_suffix == v_buf ) break; v_bits_found += 8; --v_suffix; } *(_DWORD *)a_ret = v_return; return 1; } |