2011-04-27 8 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를'을 요구하고 있다는 것입니다 :

그것은 나를 위해 이것을하고 출력하기 것 귀하의 프로그램의 새 버전을 호출합니다.

+0

당신은 이것을 '시스템'이라고 불리는 아주 이상한 방법이라고 언급했습니다! '*, 런타임에 dll에서 함수를 호출하는 다른 방법이 있을까요? –

관련 문제