2014-02-10 3 views
0

MASM 코드의 모든 함수를 콜백 함수로 변환하는 API가 필요합니다. 코드에서 API 함수를 사용하는 경우 GetProcAddresses API를 사용하여 코드에서 콜백 할 수 있지만 API가 아닌 API를 선언하면 API로 콜백 할 수있는 방법이 있습니까?MASM에서 함수를 콜백 함수로 변환하기위한 API

답변

0

은 DLL에서 내 보낸 함수를 처리하므로 모듈에서 해당 함수를 내 보내서 DLL을 만들어야합니다. 당신이 정확히 무엇을하고 싶은지에 대해서는 약간 불명확합니다. 일반 exe 파일에서 함수를 내보내려는 경우이 작업을 수행 할 수 없습니다.

MASM을 사용하여 DLL을 만드는 방법에 대한 자세한 내용은 this link을 참조하십시오.

+0

prograqm 예를 들어 여기에 보여 너무 길어, 이메일 당신은 왜 당신이 내 이메일을 제공해야 – user3291634

+1

프로그램 보내라고? 나는 이것을 당신을 위해 쓰지 않을 것입니다. 링크를 읽고 기능을 내보내는 데 필요한 변경 사항을 적용하십시오. – Devolus

+0

아니요, 링크를 읽었지만 목표가 아닙니다! 여러 원시 함수가있는 프로그램이 있는데 DLL로 내보내고 싶지 않고 API를 사용하여 콜백 모드로 변경하려고합니다. 프로그램을 보여주고 싶지만 여기에 표시하기에는 너무 깁니다. ! 프로그램을 우편으로 보내려고 했으므로 우편이 필요합니다! – user3291634

0

물론 exe에서 함수를 내보낼 수 있습니다! 몇 가지 방법이 있습니다.

link

링크/서브 시스템의 /EXPORT 매개 변수를 사용 : WINDOWS/수출 : Proc_To_Export이

당신이 경우에, 많은 기능을 내보낼 경우가 혼란스러워 할 수 file.obj, DLL과 마찬가지로 def 파일을 만듭니다.

EXPORTS Func1_Name 
Func2_Name 
Func3_Name 
etc... 

링크/SUBSYSTEM : WINDOWS/DEF : DEF_name는 또 다른 방법은 당신의 PROC가 export

include masm32rt.inc 

.code 
start:  

AddTwo PROC EXPORT FirstNum:DWORD, SecondNum:DWORD  
    mov  eax, FirstNum 
    add  eax, SecondNum 
    ret 
AddTwo ENDP 

end start 

로 반출하도록 MASM을 알리는 것입니다

을 program_name.obj 어셈블하고 연결 한 다음 콘솔 앱으로 다음을 어셈블하고 연결하십시오.

include masm32rt.inc 
includelib Add2_Exported.lib 
AddTwo PROTO FirstNum:DWORD,SecondNum:DWORD 

.code 
start: 
    invoke AddTwo, 200, 3456 

    print str$(eax), 13, 10 
    inkey 
    invoke ExitProcess, 0 
end start 

이 예제에서는 add2_exported.exe 및 해당 lib 파일을 샘플 콘솔 응용 프로그램과 동일한 디렉토리에 넣습니다.

enter image description here

당신이 볼 수 있듯이, 보낸있는 기능과 기능을 보낸 콘솔 응용 프로그램의 호출의 결과.

당신은 또한 사용할 수 있습니다 LoadLibrary, GetProcAddress :

include masm32rt.inc 

.data 
szAppName db "add2_exported.exe", 0 
szFunction db "[email protected]", 0 

.code 
start: 
    invoke LoadLibrary, offset szAppName 
    mov  esi, eax 

    invoke GetProcAddress, eax, 1 ; use ordinal 
    push 3456 
    push 200 
    call eax 
    print str$(eax), 13, 10 

    invoke GetProcAddress, esi, offset szFunction ; use function name 
    push 3456 
    push 500 
    call eax 
    print str$(eax), 13, 10 

    invoke FreeLibrary, esi 

    inkey 
    invoke ExitProcess, 0 
end start 
관련 문제