MinGW 32“未定义对‘ExitProcess@4’的引用”

2024-01-14

出于学习目的,我编写了一个小型汇编程序(test.asm):

global _main

extern _ExitProcess@4

section .text

    _main:

        mov     ebx,0
        push    ebx
        call    _ExitProcess@4

比我用 NASM 组装它(test.obj):

nasm -f win32 test.asm

现在我试图将其链接到“可移植可执行文件”(Windows 10 32 位):

ld test.obj

但我总是收到此错误消息:

undefined reference to `ExitProcess@4'

据我理解此消息,这意味着我的程序未链接到“Kernel32.dll”。 但我想“ld“正在与”链接内核32.dll“ 自动,所以我不必为此添加一些标志。 此外,如果我添加这个标志:

ld test.obj -lkernel32

我收到以下错误消息:

cannot find -lkernel32

我确信我犯了一个愚蠢的错误,所以也许有人可以告诉我出了什么问题。

EDIT:

如果我使用“gcc“相反它有效:

gcc test.obj -nostdlib -lkernel32

所以现在我想知道为什么“gcc“ 知道 ”-lkernel32" and "ld" not.


正如您已经想出的那样,ld您需要指定路径来查找正确的库。

不过,有一个建议,如果您想让学习过程变得更轻松,可以使用这个轻量级链接器,称为golink http://www.godevtool.com/GolinkHelp/GoLink.htm链接这些类型的片段就像​​这样做一样简单:

> nasm -f win32 foo.asm && golink foo.obj kernel32.dll

GoLink.Exe Version 1.0.2.3 - Copyright Jeremy Gordon 2002-2016 - [email protected] /cdn-cgi/l/email-protection
Output file: foo.exe
Format: Win32   Size: 1,536 bytes

它允许您链接到必要的 dll,这几乎不需要一直搞乱搜索路径。

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

MinGW 32“未定义对‘ExitProcess@4’的引用” 的相关文章

  • 每次升级 Xcode 时,我都会遇到安装了 Brew 的 GCC 的链接器错误

    因此 我升级到 Mavericks 以及最新版本的 Xcode 5 02 并且正如预期的那样 无法编译任何包含 C 扩展的新 Ruby gem 这种情况尤其发生在我自己的项目 NMatrix 中 其中包含 C 和 C 代码 我重新安装了 X
  • 与黄金链接器链接的二进制文件运行速度更快吗?

    使用 GEANT4 大型 Monte Carlo C 模拟框架 大量共享库 运行模拟代码 使用黄金链接器和基于标准 BFD 的链接器编译并链接 GEANT 和我的应用程序 看起来黄金跑得更快一点 1 47 vs 1 51 有人可以阐明造成差
  • DASM 汇编器中的 ASCII 到 C64 屏幕代码

    我正在通过 C64 模拟器学习 6502 micro 的汇编 目前正在尝试将字符串输出到屏幕 这是我的代码 processor 6502 org 1000 ldx 00 using x register as column counter
  • 编写 AMD64 SysV 程序集时使用哪些寄存器作为临时寄存器?

    我正在使用实现一个功能cpuid根据 AMD64 SysV ABI 进行组装 我需要在函数本身中使用 2 个临时寄存器 第一个用于累积返回值 第二个用作计数器 我的功能目前如下所示 zero argument function some c
  • 汇编指令陷阱有什么作用?

    当程序需要时 程序通常会发出软件陷阱 由操作系统提供服务 通用异常处理程序 操作系统确定陷阱的原因并做出响应 适当地 汇编指令 trap 和 BASIC 中的 TRAP 指令一样吗 答案似乎是肯定的 你能接受还是拒绝我的结论 不中断 的代码
  • AVX512 掩码寄存器(k1...k7)的 GNU C 内联 asm 输入约束?

    AVX512 为其算术命令引入了 opmask 功能 一个简单的例子 上帝螺栓 org https godbolt org z P7xWD8 include
  • 如何让c代码执行hex机器代码?

    我想要一个简单的 C 方法能够在 Linux 64 位机器上运行十六进制字节码 这是我的 C 程序 char code x48 x31 xc0 include
  • orpd等SSE2指令有什么意义?

    The orpd指令是 压缩双精度浮点值的按位逻辑或 这不是做完 全相同的事情吗por 按位逻辑或 如果是这样 拥有它还有什么意义呢 请记住 SSE1orps https www felixcloutier com x86 orps首先 实
  • 在 x86 程序集中将整数打印到控制台

    当我在 16 位汇编中添加两个值时 将结果打印到控制台的最佳方法是什么 目前我有这个代码 CODE START mov ax 1 put 1 into ax add ax 2 add 2 to ax current value mov ah
  • 取消的分支与常规分支有何不同?

    特别是对于 SPARC Assembly 取消的分支与常规分支有何不同 我一直认为 当我需要填充分支指令的 nop 延迟槽时 需要取消分支指令 但是 我认为我在这一部分上是不正确的 因为您可以在不取消分支的情况下填充 nop 如果不采用分支
  • 除非链接到 pthreads,否则不会出现死锁?

    为什么创建 std mutex 死锁实际上不会导致死锁 除非程序链接到 pthreads 以下内容在与 pthreads 库链接时会死锁 如果未链接 pthreads 则不会死锁 在 gcc 和 clang 上测试 clang main c
  • 为什么不能执行 mov [eax], [ebx] [重复]

    这个问题在这里已经有答案了 我可以做这个 mov eax ebx 和这个 mov eax ebx 甚至这个 mov eax ebx 但不是这个 错误C2415 mov eax ebx 只是wtf 为什么 它与 ptr1 ptr2 相同 为什
  • NASM 轮班操作员

    您将如何在寄存器上进行 NASM 中的位移位 我读了手册 它似乎只提到了这些操作员 gt gt lt lt 当我尝试使用它们时 NASM 抱怨移位运算符处理标量值 您能解释什么是标量值并举例说明如何使用 gt gt and lt lt 另外
  • Xcode -- 让force_load 使用相对路径

    某些库在链接到 Xcode 项目时需要 all load 链接器标志 但是 如果库之间存在符号冲突 这会导致链接器错误 解决方案是使用 force load 它可以有效地让您在某些库上使用 all load 但不能在其他库上使用 然而 这反
  • 减法进位标志

    我正在使用 MASM32 有了这个代码 mov eax 5 sub eax 10 CF 状态标志将被设置 但使用我的铅笔和纸 我实际上看到 MSB 没有任何进位 是的 我知道从较少的数字中减去大的数字集CF 但我想知道为什么 因为使用这段代
  • 从汇编程序获取命令行参数

    通读 专业汇编语言书籍 似乎它提供了用于读取命令行参数的错误代码 我纠正了一点 现在它从段错误变成了读取参数计数 然后是段错误 这是完整的代码 data output1 asciz There are d params n output2
  • 使用 Easy 68K (68000) 组装范围内的随机数

    我正在使用 Easy 68K 模拟器创建一个简单的黑杰克游戏 需要使用随机数来分配牌 我的牌必须在 2 到 11 的范围内 我似乎每次都得到相同的数字 但它不在我预期的范围内 我的卡值需要以 D3 结束 因此我有以下随机数代码 CLR L
  • 从 NASM 调用 C 函数 _printf 会导致分段错误

    我一直在尝试使用 NASM 在 Mac OS 和 Windows 上学习 64 位汇编 我的代码是 extern printf section data msg db Hello World 10 0 section text global
  • 如何在 Debian 上编译 DOS 程序?

    在我的汇编语言课程中 我们使用 DPMI 编写 DOS 程序 不幸的是 我无法一直使用 32 位 Windows 机器 我在我使用的几乎每台计算机上都安装了 Debian 虚拟机 我已经安装了 DOSBox 和 DOSEMU 有什么办法可以
  • 从发布的文件中删除 PDB 引用

    在使用任何 IDE 调试和创建文件后 我总是会查看最终的二进制可执行文件或 DLL 现在我正在尝试 Visual C 2010 寻找最佳版本 没有垃圾或不必要的引用 因此 我创建了一个包含两个项目的新解决方案 一个可执行文件及其 DLL V

随机推荐

  • WPF FlowDocument 绑定

    我正在使用微软的XAML HTML 转换器 http msdn microsoft com en us library aa972129 aspx将 HTML 从数据库转换为 XAML 字符串 Microsoft 转换器似乎正确设置了文本格
  • urlencode() 是否足以阻止 2011 年的所有 SQL 注入攻击

    我正在将一些简单的用户数据传递到 mysql 数据库中 PHP 的 urlencode 返回一个字符串 其中包含除 之外的所有非字母数字字符 已替换为百分号 后跟两个十六进制数字 我不担心空格变成加号 或其他格式问题 我也不担心 XSS 和
  • DPDK“端口数必须为偶数”一台以太网设备

    我正在尝试从 DPDK 源代码运行骨架示例 但每当我尝试在 make 过程后构建代码时 我都会收到一条错误消息 端口数必须为偶数 但是当我尝试查看以太网设备列表时我只能看到一台设备 我在 vmware 工作站环境下的 Ubuntu 中运行框
  • 使用 Runtime.getRuntime 在 Android 上运行 shell 命令

    我正在开发一个设备管理应用程序 已由制造商签名 我使用它来安装其他应用程序 使用以下适用于 android 9 的 adb shell 命令 cat sdcard Download myfolder newapp apk pm instal
  • 如何重试 Promise 决议 N 次,并在尝试之间有延迟?

    我想要一些 JavaScript 代码将 3 个东西作为参数 返回 Promise 的函数 最大尝试次数 每次尝试之间的延迟 我最终做的是使用for环形 我不想使用递归函数 这样 即使有 50 次尝试 调用堆栈也不会长 50 行 这里是打字
  • JPQL和日期比较(查询中的约束)

    我的应用程序模型对象包含一个日期字段 时间戳 Entity Table name MYTABLE public class Application private Date timeStamp 我正在尝试构建一个 JPQL 查询 该查询将选
  • SVN 说我需要执行清理,但清理失败

    这不是重复的问题 因为其他主题中提供的解决方案对我不起作用 当我尝试提交时 错误 工作副本 D Webs Drupal 6 已锁定错误 请执行 清理 命令 当我尝试进行清理时 清理无法处理以下路径 D Webs Drupal 6 有谁知道我
  • 如何在 Jinja2 模板中检查 2 个日期之间的差异是否 > 或 < 1 个月?

    我正在使用 jinja2 模板 带有 Ansible 在其中我需要检查两个日期之间的差异 我没有日期的纪元 但我有 yyy mm dd HH MM ss 格式 没有毫秒 所以我的问题是 1 jinja2中有没有办法比较两个日期 我不想安装任
  • `multirust` 在哪里安装 Rust 语言源代码?

    我安装了multirustRust 编程语言的版本 我试图配置racer代码完成包通过以下方式指向 Rust 源代码RUST SRC PATH环境变量 但是 我似乎找不到 Rust 源文件的位置 当我打字时which rustc我被指出 u
  • 无法在 Android 项目中导入 Google Cloud Endpoints 客户端库类

    我无法让 Google Cloud Endpoints 正常工作 我有一个在 GAE 上运行的 Python 端点项目 并且使用 api 资源管理器可以完美运行 然而 我正在努力正确生成客户端库并在我的 Android 应用程序中使用它 我
  • 如何格式化 Opera 浏览器的输入占位符文本?

    我使用下面的伪元素和伪类使用 CSS 设置了占位符文本的样式 这可以在除 Opera 之外的所有主要浏览器上完成工作 我的理解是 Opera 不支持占位符文本样式 有谁知道如何设计 Opera 输入占位符文本的样式 CSS webkit i
  • Sequelize:销毁/删除表中的所有记录

    我正在使用 Mocha 进行单元测试 当测试开始时 我想删除表中所有以前的记录 我尝试过的 db User destroy force true then gt then gt done db User destroy where unde
  • R 如何在将 csv 文件写入磁盘之前估计其大小

    R 有什么方法可以在实际将 csv 文件写入磁盘之前估计其文件大小write csv or readr write csv 如果用户不小心尝试在函数中将大文件写入磁盘 我想实现警告 数据帧的内存占用之间似乎存在某种关系 object siz
  • 加载 R 包时如何分配可用的变量?

    我已经弄清楚如何制作一个包含一些我经常使用的调色板的包 我修改了代码this https drsimonj svbtle com creating corporate colour palettes for ggplot2博客文章以使其发挥
  • 在程序集中写入文件时出现问题

    我正在尝试用汇编语言编写一个简单的程序 在其中打开一个现有文件并在其中写入一条消息 这是我在数据段中定义的消息 当我想写入文件时会出现问题 在我尝试写入后 AX 寄存器将包含 5 诺顿专家指南称这是 拒绝访问 错误代码 关于我做错了什么有什
  • IronPython db-api 2.0

    有谁知道哪些 db api 2 0 驱动程序可以与 IronPython 配合使用 如果是这样 有人尝试过将它与 SQLAlchemy SQLObject 或 Django ORM 一起使用吗 我知道这是一个很晚的答案 但我今天才看到这个问
  • 如果请求参数不是 Spring MVC 中的 bean,如何验证请求参数?

    下面是我的 Spring MVC REST 服务中的 POST 端点 我想使用 spring 验证框架来确保我收到的列表不为空 我该怎么做 我必须向周围提供包装豆吗listOfLongs RequestMapping value some
  • 使用神经网络进行异或 (Matlab)

    所以 我希望这是我正在做的一件真正愚蠢的事情 并且有一个简单的答案 我正在尝试训练 2x3x1 神经网络来解决 XOR 问题 它不起作用 所以我决定深入了解发生了什么 最后 我决定自己分配权重 这是我想出的权重向量 theta1 11 0
  • 在 mac M1 芯片上构建 docker amd64 镜像

    我正在尝试以两种方式在我的 mac M1 arm64 上构建 dockerfile 下面是 dockerfile 的重要部分 FROM erlang 24 elixir expects utf8 ENV ELIXIR VERSION v1
  • MinGW 32“未定义对‘ExitProcess@4’的引用”

    出于学习目的 我编写了一个小型汇编程序 test asm global main extern ExitProcess 4 section text main mov ebx 0 push ebx call ExitProcess 4 比我