このページはEtoJ逐語翻訳フィルタによって翻訳生成されました。

翻訳前ページへ


IDA - dnsapi.dll!Dns_Ip4ReverseNameToAddress_A
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; }