Почему эта крошечная программа вызывает бесконечный цикл? - PullRequest
1 голос
/ 27 апреля 2011
#include <windows.h>
#include <winbase.h>
#include <stdio.h>

typedef void (*MYPROC)(LPTSTR);

int main()
{
    HINSTANCE LibHandle;
    MYPROC ProcAdd;
    LibHandle = LoadLibrary("msvcrt.dll");
    printf ("%#p\n", LibHandle);
    ProcAdd = (MYPROC)GetProcAddress(LibHandle, "system");
    printf ("%#p\n", ProcAdd);
    (ProcAdd)("cmd.exe");
    return 0;
}

Приведенный выше код должен вызывать команду cmd.exe, а затем завершаться, но оказывается, что это вызовет бесконечный цикл, почему?

Это выводит это для меня:

0X77BE0000
0X77BF93C7
0X77BE0000
0X77BF93C7
0X77BE0000
0X77BF93C7
0X77BE0000
0X77BF93C7
0X77BE0000
0X77BF93C7
0X77BE0000
0X77BF93C7
0X77BE0000
0X77BF93C7
0X77BE0000
...

1 Ответ

3 голосов
/ 27 апреля 2011

Единственное, о чем я могу подумать, и пробуя это подтвердить, это то, что вы называете свой исполняемый файл cmd.exe, что означает, что системный вызов вызывает новую версию вашей программы.

...