// main.main
void __fastcall main_main()
{
int v0; // esi
int v1; // r8d
int v2; // r9d
int v3; // r10d
__int64 v4; // r14
int v5; // edi
int v6; // eax
int v7; // r8d
int v8; // r9d
int v9; // r10d
int v10; // r11d
int v11; // eax
int v12; // ecx
int v13; // r8d
int v14; // r9d
int v15; // r10d
__int64 v16; // r11
int v17; // r8d
int v18; // r9d
int v19; // r10d
int v20; // r11d
__int64 msgBuf; // rax
__int64 pUDP; // rbx
int v23; // r8d
int v24; // r9d
int v25; // r10d
int v26; // r11d
__int64 msgLen; // rcx
__int64 dnsMsgBuf; // rax
int v29; // r8d
int v30; // r9d
int v31; // r10d
int v32; // r11d
__int64 v33; // rbx
__int64 v34; // [rsp-20h] [rbp-48h]
__int64 v35; // [rsp-20h] [rbp-48h]
__int64 v36; // [rsp-20h] [rbp-48h]
__int64 v37; // [rsp-20h] [rbp-48h]
__int64 v38; // [rsp-20h] [rbp-48h]
__int64 v39; // [rsp-18h] [rbp-40h]
__int64 v40; // [rsp-18h] [rbp-40h]
int v41; // [rsp-18h] [rbp-40h]
__int64 v42; // [rsp-18h] [rbp-40h]
net_IPAddr *IPAddr; // [rsp-10h] [rbp-38h]
__int64 v44; // [rsp-10h] [rbp-38h]
__int64 v45; // [rsp-10h] [rbp-38h]
__int64 v46; // [rsp-10h] [rbp-38h]
int v47; // [rsp-8h] [rbp-30h]
__int64 dnsMsgLen; // [rsp+0h] [rbp-28h]
int v49; // [rsp+10h] [rbp-18h]
int v50; // [rsp+18h] [rbp-10h]
void *retaddr; // [rsp+28h] [rbp+0h] BYREF
while ( (unsigned __int64)&retaddr <= *(_QWORD *)(v4 + 16) )
runtime_morestack_noctxt();
v5 = 7;
v6 = net_ResolveIPAddr((unsigned int)"ip4", 3, (unsigned int)"0.0.0.0", 7, v0, v1, v2, v3);
v11 = net_ListenIP((int)"ip4:udp", 7, v6, 7, v0, v7, v8, v9, v10, v34, v39, IPAddr);
v49 = golang_org_x_net_ipv4_NewRawConn((unsigned int)off_5BE8C8, v11, v12, 7, v0, v13, v14, v15, v16, v35);
while ( 1 )
{
do
{
do
{
msgBuf = runtime_makeslice((unsigned int)&RTYPE_uint8, 1480, 1480, v5, v0, v17, v18, v19, v20, v36, v40, v44);
v0 = v49 + 16;
pUDP = msgBuf;
v5 = 1480;
}
while ( *(_QWORD *)(golang_org_x_net_ipv4__ptr_packetHandler_ReadFrom(
v49 + 16,
msgBuf,
1480,
1480,
v49 + 16,
v23,
v24,
v25,
v26,
v37,
v41,
v45,
v47)
+ 64) != 17LL ); // 读取 DNS 报文,并判断传输层协议是 UDP 协议
}
while ( msgLen <= 8 || __ROL2__(*(_WORD *)(pUDP + 2), 8) != 53 ); // 判断传输层的报文长度不能小于8,且目的端口是53
dnsMsgLen = msgLen - 8;
dnsMsgBuf = runtime_makeslice(
(unsigned int)&RTYPE_uint8,
dnsMsgLen,
dnsMsgLen,
1480,
v0,
v17,
v18,
v19,
v20,
v36,
v40,
v44);
v33 = pUDP + 8;
if ( dnsMsgBuf != v33 )
{
v50 = dnsMsgBuf;
runtime_memmove(dnsMsgBuf, v33, dnsMsgLen);
LODWORD(dnsMsgBuf) = v50;
}
main_handleDnsInfo(dnsMsgBuf, dnsMsgLen, dnsMsgLen, 1480, v0, v29, v30, v31, v32, v38, v42, v46);
}
}