2017-03-17 8 views
0

멤버 함수의 주소를 가져 오려고합니다. 기본적으로 메모리에로드 된 Windows API 함수와 함수 사이의 오프셋을 가져 오려고합니다.클래스 내의 멤버 함수 주소를 얻는 방법

NTSTATUS (NTAPI myntquerydirectoryfile)(
     HANDLE hFile, 
     HANDLE hEvent, 
     PVOID pApcRoutine, 
     PVOID pApcContext, 
     IO_STATUS_BLOCK* ioStatus, 
     PVOID pBuffer, 
     ULONG bufferSize, 
     FILE_INFORMATION_CLASS infoClass, 
     BOOLEAN singleEntry, 
     PUNICODE_STRING pFileName, 
     BOOLEAN restart 
    ) 
    { 

     cout << "my func" << endl; 

    }; 


    typedef NTSTATUS (*pmyhook)(HANDLE hFile, 
     HANDLE hEvent, 
     PVOID pApcRoutine, 
     PVOID pApcContext, 
     IO_STATUS_BLOCK* ioStatus, 
     PVOID pBuffer, 
     ULONG bufferSize, 
     FILE_INFORMATION_CLASS infoClass, 
     BOOLEAN singleEntry, 
     PUNICODE_STRING pFileName, 
     BOOLEAN restart); 

    pmyhook = &myntquerydirectoryfile; 
+0

당신이 우리를 보여줄 수 C++에서 람다 기능? – 1201ProgramAlarm

+0

여기에 그것은 .............. 잘 .... 여기는 내가 너무 오래 게시 할 수 없습니다. – jammy47

+0

여기에 코드가 있습니다. – jammy47

답변

1

이 코드 스냅이 클래스 멤버 함수의 주소를 가져 오는 방법을 보여줍니다 :

내가 주소를 얻기 위해 노력했습니다 것입니다, 일반적으로

#include <stdio.h> 
class A 
{ 
public: 
    void test() 
    { 
     // Address of member function test(), is the value of &A::test 
     printf("Address of function is: 0x%X\n", &A::test); 
    } 
}; 

int main() 
{ 
    A a; 
    a.test(); 
} 
+0

글쎄, 나는 클래스 내에서 기능 테스트의 주소를 얻으려고하고있다. 그러나 우리가 main에서 주소를 인쇄하려고하면 실제로 작동합니다. – jammy47

+0

@ jammy47 왜 이것이 문제인지 모르겠다. 내 편집 된 답변을 참조하십시오. 수업 내에서 주소를 얻으려면 수업에 줄을 옮기십시오. –

+0

방금 ​​확인했는데 코드가 작동합니다. 저는 오늘 마틴 자이 (Martin Zhai)의 도움을 받아 오늘 정말로 감사드립니다. 고마워. 그냥 저와 함께 여기에 새로운 메신저와 맬웨어 및 정보 보안에 대해 2 가지를 배우려고 노력하십시오. 기본적으로 달성하려고하는 것은 createremotethread를 통한 코드 주입입니다. ive가 생성 한 클래스에는 ntquerydirectoryfile의 주소를 가져오고 처음 6 바이트를 바꾸는 함수가 있습니다.점프를 만들려면 클래스 내에있는 함수 사이의 오프셋이 필요합니다 (그래서 클래스에서 개체를 만들 수 없습니다) 및 API. – jammy47

0

을 그것을 허용하지 않는다 및 권장하지 않습니다.

void (Class_Name::* FuncPointer)() = &Class_Name::Func_Name; 

FuncPointer은 클래스 메소드를 가리 킵니다. 당신이 무엇을 시도했다

를보다 효율적으로 사용하는 정적 기능 또는 11