2014-01-23 4 views
1

DLL 삽입을 사용하여 프로그램에서 알려진 함수 (함수 유형, 이름 및 argumets을 알고 있음)를 호출 할 수 있습니까?DLL에서 호출하는 함수

void func(string text) 
{ 
    cout << text << endl; 
} 

어떻게이 DLL에서 호출 :

예를 들어 내 프로그램의 기능은 다음 있는가?

+0

function func이 DLL에 있고 외부에서 호출하려고하거나 DLL 외부에서 호출하려고하며 DLL에서 호출하려고합니까? – 4pie0

+0

아니요, DLL을 사용하는 .exe에있는 func를 호출하고 싶습니다. – user3141711

+0

'is in is.exe '란 무엇을 의미합니까? 당신은 함수를 작성하고,'main' 함수를 작성하고 .exe를 생성 했습니까? 그리고 이미 컴파일 된 .exe 내부에서 그 기능을 사용하고 싶습니까? 불가능합니다. –

답변

0

프로토 타입과 메모리의 주소 만 주어진 임의의 함수를 호출 할 수 있지만 다른 프로세스 주소 공간에서 호출 할 수 있어야합니다 (공유 라이브러리에 연결하거나 디버거에 연결하여 수행 할 수 있음)

I 메모리의 실행 부분에 코드를 복사하고이 같은 그것을 실행도 시도했다 그러나
typedef int func(void); 
func* f = (func*)0xabcd123; 
int i = f(); // execute 

: 그래서

char code[] = {0x55,0x48,0x89,0xe5,0x89,0x7d,0xfc,0x48,0x89,0x75, 
       0xf0,0xb8,0x2a,0x00,0x00,0x00,0xc9, 
       0xc3,0x00}; // it is just compiled: return 42 
           // (with prologue, etc) 
    void *buf; 

    /* copy code to executable buffer */  
    buf = mmap (0,sizeof(code),PROT_READ|PROT_WRITE|PROT_EXEC, 
       MAP_PRIVATE|MAP_ANON,-1,0); 
    memcpy (buf, code, sizeof(code)); 

    /* run code */ 
    int i = ((int (*) (void))buf)(); 
    printf("the code returned: %d\n", i); 

를 사용하면 코드의 크기를 알고 있다면 그것은 가능한 보인다 실행.

관련 문제