Assembly MASM中用于将函数转换为回调函数的API
我需要一个API将MASM代码中的所有函数转换为回调函数。如果我们在代码中使用API函数,我们可以使用GetProcAddresses API在代码中回调它们,但是如果我们有声明它们不是API的函数,我们如何用API回调它们呢 GetProcAddress处理从DLL导出的函数,因此您必须从模块中导出这些函数并从中创建DLL。有点不清楚你到底想做什么。如果您正在考虑从常规exe文件导出函数,那么这是不可能的Assembly MASM中用于将函数转换为回调函数的API,assembly,masm,masm32,Assembly,Masm,Masm32,我需要一个API将MASM代码中的所有函数转换为回调函数。如果我们在代码中使用API函数,我们可以使用GetProcAddresses API在代码中回调它们,但是如果我们有声明它们不是API的函数,我们如何用API回调它们呢 GetProcAddress处理从DLL导出的函数,因此您必须从模块中导出这些函数并从中创建DLL。有点不清楚你到底想做什么。如果您正在考虑从常规exe文件导出函数,那么这是不可能的 有关如何使用MASM创建DLL的详细信息,请阅读。当然,您可以从exe导出函数!有几种方
有关如何使用MASM创建DLL的详细信息,请阅读。当然,您可以从exe导出函数!有几种方法可以做到这一点 对链接使用/EXPORT参数 链接/子系统:WINDOWS/EXPORT:Proc_To_EXPORT file.obj 如果要导出许多函数,这可能会变得很混乱,在这种情况下,只需像为DLL创建def文件一样创建def文件
EXPORTS Func1_Name
Func2_Name
Func3_Name
etc...
链接/子系统:WINDOWS/DEF:DEF_name程序_name.obj
另一种方法是告诉MASM您的proc将与export一起导出
组装并链接,然后组装并链接以下内容作为控制台应用程序:
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:
prograqm示例太长,无法在此处显示,比如发送电子邮件给您,为什么我要给您发送电子邮件?我不会给你写这封信的。阅读链接并应用导出函数所需的更改。不,我阅读了链接,但这不是我的目标!我有一个程序有几个本机函数,我不想在Dll中导出它们,我想使用API将它们更改为回调模式,我想显示该程序,但在这里显示太长了!我想发送程序到您的邮件,所以需要您的邮件!您可以用C编写一个回调函数代码示例,然后让编译器生成汇编代码,这样您就可以看到相同类型函数的汇编程序版本需要什么。@user3291634:什么回调?Win32 API?在这种情况下,必须使函数遵循stdcall调用约定。这是在源代码中执行的操作,而不是在运行时执行。
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
include masm32rt.inc
.data
szAppName db "add2_exported.exe", 0
szFunction db "_AddTwo@8", 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