从.c调用MASM32过程

2024-04-18

我现在正在使用 Visual Studio。我需要构建一个 win32 应用程序并需要从 C 函数调用过程,但我总是收到构建错误:

错误 3 错误 LNK1120:1 个未解析的外部

我已经通过一个过程将所有内容简化为一个简单的主函数和简单的 .asm 文件,但我仍然遇到相同的构建(或更确切地说是链接)错误。我不知所措。

两者都使用 cdecl 约定。

MASM32 代码(在其自己的 .asm 文件中):

.MODEL FLAT, C
.DATA              

.CODE      

PUBLIC memory_address

memory_address PROC 

    mov eax, DWORD PTR [esp] 

    ret

memory_address ENDP

END

它组装得很好。 .c 文件:

#include <stdlib.h>
#include <malloc.h>
#include <stdio.h>

extern int memory_address(int* ptr);

void main()
{
    int *ptr = (int*)malloc(sizeof(int));

    memory_address(ptr);

    while (1) {}

    return;
}

不知道为什么会发生这种情况。我已经愉快地将 MASM 用于 64 位应用程序大约一年左右了,没有出现任何问题。但我必须制作一个 32 位应用程序,我没有运气调用 MASM32 proc memory_address()。

我赶紧补充一下,我知道如何在 NASM 中为 32 位应用程序执行此操作,并且我知道如何使用 MASM 在 64 位应用程序中执行此操作。这严格来说是一个 MASM32 问题。任何建议都会很棒 - 但仅限于 MASM32。谢谢。


您可以将 asm 模块构建为 DLL。

使用 STDCALL 可以轻松实现这一切, 所以与其:

.MODEL FLAT, C

您可以使用:

.model flat, stdcall

只需在 yourmodule.asm 中创建额外的内容 A你的模块.def文件。 在那个地方这些行:

LIBRARY "yourmodule.dll"
EXPORTS memory_address

然后使用: ml.exe /c /coff yourmodule.asm Link.exe /SUBSYSTEM:CONSOLE /DLL /DEF:yourmodule.def yourmodule.obj

然后在您的 C++ 应用程序中删除:

extern int memory_address(int* ptr);

并添加:

typedef void*(__stdcall *PTRmemory_address)(int*);
extern PTRmemory_address    memory_address = NULL; // init as "NOT PRESENT"

HMODULE yourmoduleHMODULE;
yourmoduleHMODULE = GetModuleHandleA("yourmodule.dll"); // ensure valid file path!
if (!yourmoduleHMODULE)
    yourmoduleHMODULE = LoadLibraryA("yourmodule.dll"); // ensure valid file path!

if (yourmoduleHMODULE)
{
    memory_address = (PTRmemory_address)GetProcAddress(yourmoduleHMODULE, "memory_address");
    if (!memory_address)
    { 
        printf("\n  Cannot Find function memory_address in yourmodule.dll");
        exit(1);  // exit application when function in DLL not found
    }
}    
else
{
    printf("\n  yourmodule.dll not found");
    exit(1); // exit application when DLL not found
}

调用你的函数:

int *ptr = (int*)malloc(sizeof(int));

if (memory_address)  // ensure, that your function is present
  memory_address(ptr);
else 
  printf("\n error");

    // ....
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从.c调用MASM32过程 的相关文章

  • 动态获取当前LDAP路径

    我正在使用 C 和 NET Framework 4 0 开发一个库 我想检索所有活动目录用户 它效果很好 但我的问题是 如果我在另一个域上运行我的程序 我必须更改此设置 private static string ldapPath LDAP
  • 使用静态函数变量与类变量来存储某些状态

    可以说我有这样的功能 void processElement doSomething someArray lastProcessedElement 1 问题是 每次调用这个函数时 我都需要存储我调用 doSomething 的最后一个元素
  • 如何在 C# 正则表达式中获取捕获组的名称?

    有没有办法在 C 中获取捕获组的名称 string line No 123456789 04 09 2009 999 Regex regex new Regex
  • 管道破裂错误

    我在 FTP 实现中的打开的数据套接字上使用 write 来发送文件 但写入一些数据后 它会挂起一段时间 之后它会返回 损坏的管道 错误 对此的任何帮助将不胜感激 我的进程从一个缓冲区读取数据包并写入套接字 我在增加带宽时注意到了这个问题
  • 易失性限定符是否会取消该内存的缓存?

    在本文中 http www drdobbs com parallel 易失性 vs 易失性 212701484 pgno 2 http www drdobbs com parallel volatile vs volatile 212701
  • 如何在Unity中集成xAPI / TinCan

    我是 xAPI TinCan API 的新手 所以我的问题可能有点笼统 但到目前为止我还没有找到任何可以帮助我的东西 我认为可以将 xAPI 集成到 Unity 项目 游戏或模拟 中 但我到底该怎么做呢 我可以阅读有关 xAPI 和 Uni
  • 当条件满足时如何进入调试模式?

    有没有办法在满足一定条件时进入调试模式 例如 假设我想在以下行进入调试模式i 1变为真 using System namespace ConditionalDebug public class Program public static v
  • 为什么 Clang 更喜欢主模板而不是 C++17 的专业化?

    下列program https godbolt org z f43EK4PnY从此代码中减少question https stackoverflow com questions 66740188 template
  • 使用实体框架如何在没有一个庞大查询结果集或数百个小型查询的情况下创建嵌套对象?

    我使用 EF 填充对象 然后在业务层代码中与之交互 这些对象有多个级别 但我们首先将其简化为典型的主从示例Order and OrderLine 假设我需要检索 50 个订单 每个订单大约有 100 个订单行 并且我需要所有这些数据 在 E
  • 具有 C++ 客户端和 C# 后端的协议缓冲区?

    如何通过 HTTP 或等效的 Web 服务将 C 后端与 C 前端连接起来 这里分为三个部分 服务器 听起来像 C 客户端 听起来像 C 和传输 将它们分开 并从最重要的开始 传输 这里的重大决定是您希望数据采用什么形状 您提到了协议缓冲区
  • 我可以使用什么 C++ 库在 Windows 上将 PDF 转换为图像?

    我正在开展一个需要分析图像的项目 这些图像的主要来源是网络摄像头 但最近我们被要求添加对上传文件和扫描仪的支持 这在大多数情况下都很好 只是他们希望我们能够使用 PDF 格式的文档 我需要一个原始像素位图进行处理 在 Mac 上 我可以使用
  • Unity构建错误

    所以我制作了我的游戏并尝试构建它 我收到一些对我来说毫无意义的错误 这是错误 UnityEditor BuildPlayerWindow BuildMethodException 2 个错误 在 UnityEditor BuildPlaye
  • C++:如何通过时间和本地时间获取实际时间?

    我正在寻找一种在 C 中以 HH MM SS 方式节省时间的方法 我在这里看到它们有很多解决方案 经过一番研究后我选择了time and localtime 然而 似乎localtime函数有点棘手 因为它says http rabbit
  • c# Abstract Generic Class继承自Abstract Generic Class

    我正在尝试创建一个抽象泛型类 它继承自另一个抽象泛型类 这是我到目前为止所拥有的 public abstract class BaseClass public long Id get private set public BaseClass
  • C# Windows 应用程序中的文件上传

    在我的 C Windows 应用程序中 我想上传 pdf 文件 但在我的工具箱中找不到 FileUpload 控件 我如何在 C Windows 应用程序中上传 pdf 文件 regards 将 OpenFileDialog 控件放在窗体上
  • 当代码依赖于两个对象的子类型时,是否有设计模式可以处理

    我会尽力尽可能明确 以防有比回答我的问题更好的解决方案 我正在使用 C 工作 我有一个报告模板 可以包含任意数量的打开的 功能 功能可能是信息表 饼图 条形图 列表等 我将报告生成为文本文件或 PDF 将来可能有其他选项 到目前为止我有一个
  • gfortran 未定义的引用

    我正在尝试编译一个依赖很多东西的程序 我使用并修改了提供的 makefile 来代表我的计算机设置 但在编译的最后一步中我不断收到许多未定义的引用 导致问题的命令行是 gfortran o cosmomc ParamNames o Matr
  • 无限循环消耗 100% CPU

    我陷入了需要生成某个 Hz 的定义频率的情况 我尝试过多媒体计时器和互联网上提供的所有其他东西 但到目前为止 带有一些 if else 条件的无限循环给了我最好的结果 但这种方法的问题是它消耗了几乎所有的CPU 没有空间让其他应用程序正常工
  • 在 __device/global__ CUDA 内核中动态分配内存

    根据CUDA 编程指南 http developer download nvidia com compute cuda 3 2 prod toolkit docs CUDA C Programming Guide pdf 第 122 页 可
  • 判断一个点是否在多面体内部

    我试图确定某个特定点是否位于多面体内部 在我当前的实现中 我正在研究的方法采用我们正在寻找多面体面的数组 在本例中为三角形 但稍后可能是其他多边形 的点 我一直在尝试根据这里找到的信息进行工作 http softsurfer com Arc

随机推荐

  • 在拟合 keras 模型时如何防止 loss: nan ?

    这是我的代码 model Sequential model add Dense 50 input dim 33 init uniform activation relu for u in range 3 how to efficiently
  • 如何在ggplot中包装图例文本?

    这是我的数据的头部 structure list aasta c 2012 2013 2014 2015 2016 2017 2018 2019 2020 2012 2013 2014 2015 2016 2017 2018 2019 20
  • JPA 标准 API 按 NULL 最后排序

    我使用 JPA 标准 API 从数据库中获取记录 我有实体Record带字段dateTime可以为空 我会编码 public List
  • Dapr 和 Docker Compose 指南

    我正在绕圈试图找出如何做到这一点 但我遇到了以下情况 我正在尝试将 Dapr 合并到我的 ASP NET Core 微服务中 我已按照文档在本地安装了 Dapr dapr init 结果我有三个本地运行的容器 dapr redis dapr
  • 训练 h2o 模型时如何抑制“构建进度”栏?

    我正在通过测试许多模型来调整我的参数 但令我相当恼火的是 我对那些弄乱了我的 iPython Notebook 的 构建进度 栏无能为力 我浏览了文档 寻找某种要关闭的 详细 设置 但找不到它 当我想同时训练和评估数十个模型时 有什么方法可
  • 使用 Thymeleaf 和 Spring Boot 转换器列出 JSON 字符串

    我正在开发一项通过 Thymeleaf 模板生成 HTML 页面的服务 在其中一个模板中 我希望有一个 HTML 属性作为 JSON 字符串 我的上下文中的相关对象是ArrayList
  • 如何在 Visual Studio 安装项目中创建卸载程序?

    我已经创建了一个 Visual Studio 安装项目 但我不知道如何在我的 Visual Studio 安装项目中创建卸载程序 请告诉我该怎么做 我正在使用 Visual Studio 2005 或者是否有任何其他软件可以使用卸载程序创建
  • Oracle JDBC:用户名/密码无效 (ora-01017)

    我在与 Oracle 数据库服务器的 jdbc 连接上遇到了一个奇怪的问题 我们在 tomcat 服务器上运行应用程序 这些应用程序使用 oracle 数据库 所有应用程序都使用相同的凭据 应用程序全天运行良好 晚上没有活动 早上 当应用程
  • 使用给定的 DateTime 对象获取一个月的第一天和最后一天

    我想获取给定日期所在月份的第一天和最后一天 该日期来自 UI 字段中的值 如果我使用时间选择器我可以说 var maxDay dtpAttendance MaxDate Day 但我试图从 DateTime 对象中获取它 所以如果我有这个
  • 更改 Android 上活动动画的 z 顺序

    有没有办法反转活动动画的 z 顺序 基本上 当您启动新活动时 它会被添加到后台堆栈 并且其窗口会添加到前一个活动的窗口上 有时稍后返回时 从后台堆栈获取的活动会在顶部活动下方显示其窗口 大多数时候这是完全有道理的 但我对这种行为有以下问题
  • 如何解决SBT依赖的依赖冲突?

    我有一个项目的构建 sbt正在使用 libraryDependencies Seq com lerestau killer launcher 1 0 2 com lerestau menu starter 1 0 0 菜单启动器过渡下载 杀
  • JavaFX检测同时按下的多个键盘按键

    正如标题所说 我想检测同时按下的多个键盘按键 同时地 并被按下 同时地 一段时间 我正在尝试添加多个事件处理程序Scene但它不起作用 EventHandler
  • MySQL如何获取不是我好友的用户

    有人可以帮助我吗 我需要吸引不是我朋友的用户 我有以下表格 users id user 1 Name1 2 name2 和桌子friends id id user id friends 1 2 3 2 5 4 我尝试类似的操作 但在某些查询
  • 全文索引和复合索引以及它们如何影响查询

    只是说我有一个查询如下 SELECT name category address city state FROM table WHERE MATCH name subcategory category tag1 AGAINST educat
  • 与断言相比,scala 中的假设有何含义?

    Scala 似乎定义了 3 种断言 assert require and assume 据我所知 差异 与通用断言相比 require它是专门用于检查输入 参数 传入消息等 的 是什么意思assume then 如果你看一下代码Predef
  • 关闭 WPF 中 Frame 内的页面

    我有一个窗口和一个框架 在该框架中 我打开了许多页面 我想通过单击 关闭 按钮关闭这些页面 问题是页面看不到我的框架我尝试在页面方法中的事件中编写关闭按钮 在主窗口中执行另一个事件 因为在主窗口上很容易看到框架 但它不起作用 这是我在页面中
  • Bootstrap 输入组插件未内联

    这是我的代码 http www bootply com iR1SvOyEGH http www bootply com iR1SvOyEGH
  • SwiftUI 中的圆角边框

    如何在 SwiftUI 中圆化边框 我认为这会起作用 cornerRadius 10 border Color white 但它不起作用 这是我现在的解决方法 overlay RoundedRectangle cornerRadius 10
  • 限制特定组的 Firebase 数据库和存储写入访问权限

    我有一个带有内容管理端的 React Redux Firebase 应用程序 所有这些页面都以 admin 我需要将 Firebase 数据库和 Firebase 存储写入权限限制为这些用户的一小部分 并在未经身份验证 或未经管理员角色身份
  • 从.c调用MASM32过程

    我现在正在使用 Visual Studio 我需要构建一个 win32 应用程序并需要从 C 函数调用过程 但我总是收到构建错误 错误 3 错误 LNK1120 1 个未解析的外部 我已经通过一个过程将所有内容简化为一个简单的主函数和简单的