69,371
社区成员
发帖
与我相关
我的任务
分享
signed int __cdecl _kbhit_nolock()
{
char ST10_1_0; // ST10_1@0
void *v2; // eax@11
struct _INPUT_RECORD *v3; // ebx@16
DWORD v4; // edi@20
int v5; // esi@23
int s; // [sp+1Ch] [bp+0h]@1
unsigned int v7; // [sp+18h] [bp-4h]@1
signed int v8; // [sp+Ch] [bp-10h]@1
DWORD nLength; // [sp+14h] [bp-8h]@6
DWORD NumberOfEventsRead; // [sp+10h] [bp-Ch]@19
v7 = (unsigned int)& s ^ dword_40D420;
v8 = 0;
if ( dword_40DF70 != -1 )
return 1;
if ( hConsoleHandle == (HANDLE)-2 )
__initconin();
if ( hConsoleHandle == (HANDLE)-1 || !GetNumberOfConsoleInputEvents(hConsoleHandle, &nLength) || !nLength )
return 0;
if ( nLength && 0xFFFFFFE0 / nLength >= 0x14 )
{
if ( 20 * nLength + 8 > 0x400 )
{
v2 = malloc(20 * nLength + 8);
if ( v2 )
{
*(_DWORD *)v2 = 56797;
goto LABEL_15;
}
}
else
{
_alloca_probe_16(20 * nLength + 8, ST10_1_0);
v2 = &ST10_1_0;
if ( &ST10_1_0 )
{
*(_DWORD *)&ST10_1_0 = 52428;
LABEL_15:
v2 = (char *)v2 + 8;
goto LABEL_16;
}
}
LABEL_16:
v3 = (struct _INPUT_RECORD *)v2;
goto LABEL_18;
}
v3 = 0;
LABEL_18:
if ( !v3 )
return 0;
if ( PeekConsoleInputA(hConsoleHandle, v3, nLength, &NumberOfEventsRead) )
{
v4 = NumberOfEventsRead;
if ( NumberOfEventsRead )
{
if ( NumberOfEventsRead <= nLength )
{
if ( NumberOfEventsRead )
{
v5 = (int)&v3->Event;
do
{
if ( *(_WORD *)(v5 - 4) == 1 )
{
if ( *(_DWORD *)v5 )
{
if ( *(_BYTE *)(v5 + 10) || _getextendedkeycode(v5) )
v8 = 1;
}
}
--v4;
v5 += 20;
NumberOfEventsRead = v4;
}
while ( v4 );
}
}
}
}
_freea(v3);
return v8;
}
//其中__initconin()函数为
HANDLE __cdecl __initconin()
{
HANDLE result; // eax@1
result = CreateFileA("CONIN$", 0xC0000000u, 3u, 0, 3u, 0, 0);
hConsoleHandle = result;
return result;
}
#include <conio.h>
int main(void)
{
cprintf("Press any key to continue:");
while (!kbhit()) /* do nothing */ ; //用返回值来判断 逻辑关系
cprintf("\r\nA key was pressed...\r\n");
return 0;
}