문제

Custom Recv () WinSock2.0 메소드를 원격 프로세스에 연결하려고했는데, 기능이 프로세스의 기능 대신에 실행되도록하려고했는데, 이것을 인터넷 검색하고 정말 좋은 예를 찾았지만 설명이 부족합니다.

typedef (WINAPI * WSAREC)( SOCKET s, char *buf, int len, int flags ) = recv;

이제 내 질문은 이것이 무엇을 의미 하는가, 이것이 실제 recv () 함수에 대한 일종의 포인터입니까?

그리고 사용자 정의 함수에 대한 다른 코드 조각

int WINAPI Cus_Recv( SOCKET s, char *buf, int len, int flags ) 
{
    printf("Intercepted a packet");

    return WSAREC( s, buf, len, flags ); // <- What is this?
}

이 질문들이 정말 기본적으로 들리면 죄송합니다. 2 주 또는 3 주 전에만 배우기 시작했습니다. 감사.

도움이 되었습니까?

해결책

그런 예를 어디에서 찾았습니까?

첫 번째 줄은 새로운 유형 WSAREC를 정의하려고 시도합니다. recv(). 불행히도, 그것은 또한이 유형의 변수를 recv() 기능. 함수에 리턴 유형이 없기 때문에 typedef가 잘못되었습니다. 따라서 Visual Studio 2003에서는 컴파일하지 않습니다.

더 많은 운이있을 수 있습니다.

int (WINAPI * WSAREC)( SOCKET s, char *buf, int len, int flags ) = &recv;

"기능에 대한 포인터"유형의 변수 만 선언하는 것은 recv().

이제 두 번째 스 니펫은 recv()메시지를 인쇄 한 함수는 원본을 호출합니다. recv() 위에 선언 된 기능 포인터를 통해.

여기서 코드는 포인터를 통해 함수를 호출하는 방법 만 보여줍니다. 현재 프로세스의 어떤 것도 대체하지 않습니다.

또한 다른 프로세스를 방해하고 유언장에서 한 기능을 대체 할 수 있는지 확신하지 못합니다. 시스템의 보안에 큰 위협이 될 것입니다. 하지만 왜 먼저 그렇게 하시겠습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top