为什么这个微小的程序会导致无限循环?

时间:2011-04-27 15:46:02

标签: c windows-xp

#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 个答案:

答案 0 :(得分:3)

我唯一可以想到的,并尝试这一点证实了这一点,就是你正在调用你的可执行文件'cmd.exe',这意味着系统调用正在调用你程序的新版本。