2011-04-27 10 views
1
#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

あなたはハングだけではなく、インラインループであると確信していますか?また、これは「システム」と呼ぶ非常に奇妙な方法です! – Skizz

+0

それは私のために働く。あなたはあなたの問題を詳細に記述できますか? –

+0

@Anton Semenov、@Skizz、私は上記の出力を貼り付けました。 –

答えて

3

私は考えることができる唯一のこと、そしてこれを試してみることは、これを確認して、あなたはシステムコールを意味し、あなたの実行ファイル「CMD.EXE」を、呼び出しているということです。

それは私のためにこれをoutputingていますあなたのプログラムの新しいバージョンが呼び出されています。

+0

あなたは*これは 'システム'を呼び出すための非常に奇妙な方法だと言いました! '*、実行時にdllで関数を呼び出す方法は他にありますか? –

関連する問題