MASM
코드의 모든 함수를 콜백 함수로 변환하는 API가 필요합니다. 코드에서 API 함수를 사용하는 경우 GetProcAddresses
API를 사용하여 코드에서 콜백 할 수 있지만 API가 아닌 API를 선언하면 API로 콜백 할 수있는 방법이 있습니까?MASM에서 함수를 콜백 함수로 변환하기위한 API
0
A
답변
0
은 DLL에서 내 보낸 함수를 처리하므로 모듈에서 해당 함수를 내 보내서 DLL을 만들어야합니다. 당신이 정확히 무엇을하고 싶은지에 대해서는 약간 불명확합니다. 일반 exe 파일에서 함수를 내보내려는 경우이 작업을 수행 할 수 없습니다.
MASM을 사용하여 DLL을 만드는 방법에 대한 자세한 내용은 this link을 참조하십시오.
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 파일을 샘플 콘솔 응용 프로그램과 동일한 디렉토리에 넣습니다.
당신이 볼 수 있듯이, 보낸있는 기능과 기능을 보낸 콘솔 응용 프로그램의 호출의 결과.
당신은 또한 사용할 수 있습니다 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
prograqm 예를 들어 여기에 보여 너무 길어, 이메일 당신은 왜 당신이 내 이메일을 제공해야 – user3291634
프로그램 보내라고? 나는 이것을 당신을 위해 쓰지 않을 것입니다. 링크를 읽고 기능을 내보내는 데 필요한 변경 사항을 적용하십시오. – Devolus
아니요, 링크를 읽었지만 목표가 아닙니다! 여러 원시 함수가있는 프로그램이 있는데 DLL로 내보내고 싶지 않고 API를 사용하여 콜백 모드로 변경하려고합니다. 프로그램을 보여주고 싶지만 여기에 표시하기에는 너무 깁니다. ! 프로그램을 우편으로 보내려고 했으므로 우편이 필요합니다! – user3291634