NASM与link、golink和alink具体例子使用对比

2023-11-10

一、OMF文件格式链接:使用import伪指令,import伪指令可以直接使用函数名,而不用给函数名加上'_'前缀和'@number'后缀,但import伪指令仅适合于OMF(borland obj)格式输出,OMF格式是MS在16位下操作系统的目标文件格式,borland仍然使用这种格式,并将格式进行了扩展,使得可以在Win32环境下使用,NASM支持这种扩展的OMF格式,但必须显式指定生成32位的obj。由于import伪指令需要OMF格式的支持,而MS的link.exe连接器会在连接时自动将OMF格式转换成COFF格式,从而无法完成导入外部标志的操作,因此,需要一个直接支持连接OMF格式的连接器,这里推荐开源连接器alink.exe。alink.exe连接器将根据import伪指令生成的连接信息,找到所需动态库,并自动导入外部函数符号。..start也是NASM针对OMF格式设计的程序入口简化标志,export伪指令生成的导出指令也将由alink.exe来执行。注意:alink.exe不支持段合并(至少我不知道如何使用alink.exe进行段合并>_<),因此,连接生成的EXE程序稍大一些,为2.51kb,有3个段,而上述另两种操作生成的EXE文件只有一个.text段。
1、32位程序例子:
;filename:obj32.asm
import MessageBoxA user32.dll
extern MessageBoxA
import ExitProcess kernel32.dll
extern ExitProcess

global obj32
export obj32

[SECTION CODE USE32 CLASS=CODE]
szTitle:
    db "SayHello",0
szMsg:
    db "Hello World!", 0
obj32:
    push 0              ;uType
    push dword szTitle  ;lpCaption
    push dword szMsg    ;lpText
    push 0              ;hWnd
    call [MessageBoxA]
    ret 16
 
..start:
    call obj32
    push 0
    call [ExitProcess]

使用alink。
cmd> nasm -fobj obj32.asm
cmd> alink -oPE  obj32.obj

2、16位程序例子:
;filename:obj16.asm
segment code  use16
str1: db "name$"

segment data use16
..start:
mov ax,code
mov ds,ax
mov dx,str1
mov ah,9
int 21h
mov ah,4ch
int 21h

使用alink。
cmd> nasm -fobj obj16.asm
cmd> alink obj16.obj

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

NASM与link、golink和alink具体例子使用对比 的相关文章

  • 在文件夹的上下文菜单中运行批处理文件

    当我右键单击任何文件夹时 我想运行此批处理文件 setenv cmd echo off SET CPLUS INCLUDE PATH C mingw32 include C mingw32 lib gcc mingw32 4 9 2 inc
  • ERRORLEVEL 与 %ERRORLEVEL% 与感叹号 ERRORLEVEL 感叹号

    我想我对 ERRORLEVEL 与 ERRORLEVEL 有基本的了解 但是 ERRORLEVEL 让我困惑 我正在制作一个调用可执行文件的脚本 然后使用任务列表来查看它是否正在运行 然后使用taskkill来杀死它 如果是 然后尝试输出错
  • 导入时记录器命名与日志记录配置之间不兼容

    我正在通过读取文件并使用来在 main py 中设置 Python 日志记录文件配置 http docs python org library logging config html选项 我希望能够在测试和实时日志记录配置之间切换 因此我想
  • 为什么导入在 setuptools Entry_point 脚本中失败,但在 python 解释器中却失败?

    我有以下项目结构 project project py init py setup py lib init py project init py tools py with project py from project lib impor
  • gulp-sass 可以解决 load_path 支持吗?

    问题 我正在使用 gulp sass 并想定义一个 load path 这样我就不必有很长的 import 规则 voor Bower 依赖项 例如 import normalize 代替 import bower components b
  • 阻止 gulp 更改 shell/cmd 标题名称

    当 gulp 被调用时 它会将我的 cmd windows 标题更改为 gulp 我希望窗口名称保持原样 我知道我可以使用https www npmjs com package gulp shell https www npmjs com
  • 区分大小写的字符串操作

    假设我们有一个变量 例如 set test This is a Test string 我们想要替换每个小写字母t与大写X如此期望的输出 This is a TesX sXring 我尝试使用字符串操作set test test t X 但
  • 导入后属性未添加到模块中

    我做了以下实验室 vagrant ubuntu xenial test tree pack1 init py mod1 py pack2 init py mod2 py mod3 py test py 2 directories 6 fil
  • 在eclipse中的另一个项目中使用一个项目的包

    如何在定义包的主项目之外使用包的类 例如 假设 people 包中有一个属于 ProjectOne 的 Employee 类 假设另一个具有相同功能的项目 ProjectTwo 需要 Employee 我应该在那里做什么 在 Package
  • chcp 65001 代码页导致程序终止且没有任何错误

    Problem 当我想要的时候问题就出现了inputPython 解释器中的 Unicode 字符 为简单起见 我在示例中使用了变音符号 但我第一次遇到波斯语字符 每当我使用 Python 时CHCP 65001 https ss64 co
  • 如何像用户打字一样将输入发送到控制台?

    这是我的问题 我有一个程序必须在 TTY 中运行 cygwin 提供了这个 TTY 当我重定向 stdIn 时 程序失败 因为它没有 TTY 我无法修改该程序 并且需要某种方法使其自动化 如何抓取 cmd exe 窗口并向其发送数据并使其认
  • 使用 cmd.exe 更改目录并在该目录中运行命令

    我想做的就是 更改到不同驱动器的特定目录 在该目录中运行命令 例如目录 我需要使用从不同驱动器开始的 cmd exe 在一行中执行此操作 我会这样做 c cd temp dir 所以到目前为止我在一份声明中 cmd c c cd temp
  • Windows批处理支持异常处理吗?

    Windows批处理编程支持异常处理吗 如果没有 是否有任何方法可以有效地模拟批处理文件中的异常处理 我希望能够在批处理脚本中的任何 CALL 级别的任何位置 抛出异常 并重复弹出 CALL 堆栈 直到找到活动的 TRY 块 然后 CATC
  • 在没有窗口的情况下从 C# 运行命令行并获取输出[重复]

    这个问题在这里已经有答案了 我正在尝试从 C 运行命令行脚本 我希望它在没有 shell 的情况下运行并将输出放入我的字符串输出中 它不喜欢 p StartInfo 行 我究竟做错了什么 我没有运行像 p StartInfo FileNam
  • 导入 python 模块的特殊性?

    我一直在使用 python 的 PySerial 库pyserial API http pyserial sourceforge net pyserial api html 我似乎无法理解为什么我必须专门导入模块的某个部分 这会给我一个错误
  • 无法使用 MV3 从 Firefox 下的通用脚本导出到 background.js

    我试图在服务工作者 background js 和内容脚本之间重用一些功能 https stackoverflow com questions 73421706 how to reuse a javascript function betw
  • 批量设置命令的输出和错误以分隔变量

    在Windows 7批处理 cmd exe命令行 中 我试图将命令的标准输出 stdout 和标准错误 stderr 重定向到单独的变量 因此第一个变量设置为输出 第二个变量设置为输出 变量设置为错误 如果有 而不使用任何临时文件 我已经尝
  • CodedUI 测试不从 CSV 输入文件读取数据

    我在使用编码 UI 测试方法映射 CSV 文件时遇到困难 这很可能是一个愚蠢的问题 但我似乎找不到解决我的问题的方法 至少没有一个有效的方法 我已确保将 CSV 文件的属性设置为始终复制 我还通过在测试方法上方写入以下行来导入 CSV 文件
  • 比较批处理文件中的两个数字

    我在这个网站上搜索了我的问题 但没有找到解决我问题的方法 系统为玩家和计算机提供一个从 2 到 12 的随机数 这有 3 部分 X 大于 Y 如果 X 小于 Y 以及当 X 与 Y 相同 当我开始 bat 效果很好 我选择Play Game
  • Spyder 未检测到导入的 python 文件中的更改

    我正在使用 Spyder 3 2 4 Python 3 6 Spyder 不会检测导入的 python 文件中的更改 例如 测试2 py def func return 5 测试1 py import test2 a test2 func

随机推荐

  • AIGC井喷时代,企业应该如何保障安全?

    随着人工智能 物联网 大数据和云计算等技术的飞速发展 我们已经进入了一个AIGC 人工智能 物联网 大数据和云计算 井喷时代 这一时代为企业带来了前所未有的机会 但也伴随着巨大的安全挑战 在这篇文章中 我们将讨论企业在AIGC井喷时代如何保
  • 给Listview加上进度条

    procedure TMainForm FormShow Sender TObject var I Integer ProBar TGauge Li TListItem begin for I 0 to DataListView Items
  • JDK与sqlserver版本兼容性问题

    1 低版本的jdk编译的jar包有可能在高版本jdk环境下无法运行 高版本编译方式变化 或去除了某些方法 2 高版本jdk编译的jar也有能在低版本jdk下无法运行 高版本jdk添加了部分新的方法 jdk需与sqlserver版本与项目中j
  • 京东零售大数据云原生平台化实践

    分享嘉宾 吴维伟 京东 架构工程师 编辑整理 陈妃君 深圳大学 出品社区 DataFun 导读 随着业务调整和集群资源整合需求 大数据系统中集群数据迁移复杂混乱 本文将以京东大数据平台为例 介绍京东近一年在数据分布式存储和分层存储上的探索和
  • 宝峰uv5r怎么设置信道_宝峰UV-5R对讲机怎么操作?

    展开全部 宝峰UV 5R对讲机2113操作步骤如下 5261 1 首先拿到对讲机要4102安1653装天内线 切记对讲机在容没有安装天线的情况下切勿按动PTT键发射 这样做很容易烧毁对讲机的功放模块 2 打开对讲机 提示当前模式为 信道模式
  • vue deep Vue scoped CSS 与深度作用选择器 /deep/

    文档 https vue loader vuejs org guide scoped css html mixing local and global styles
  • 前端面试题(二)vue和react的区别

    相同点 1 都支持服务器端渲染 2 都有Virtual DOM 虚拟dom 组件化开发 都有 props 的概念 这是properties的简写 props在组件中是一个特殊的属性 允许父组件往子组件传送数据 都实现webComponent
  • GPU-Z v2.44.0 发布

    今天发布了最新版本的 TechPowerUp GPU Z 这是一款方便的图形子系统信息和诊断实用程序 适用于游戏玩家和 PC 爱好者 2 44 0 版增加了对几个新 GPU 的支持 对 Resizable BAR 检测的功能更新以及一些其他
  • 1.3 重复元素判定 A

    1 描述 接收用户输入的一个列表 如果列表中元素存在重复 则返回True 否则返回False 输入 示例1 2 8 4 3 3 0 输出 示例1 True 2 代码 ls input 读取用户输入的列表 newlst 声明一个空的列表 fo
  • MySQL 时间戳与日期互相转换函数

    1 时间戳转换成日期 函数 FROM UNIXTIME select FROM UNIXTIME 1605173621 Y年 m月 d日 参数1 要转换的时间戳 参数2 可选 要转化的格式 不写默认 y m d H i s 格式 2 把日期
  • HTTP各版本区别

    目录 http http1 0 http1 1 http2 0 多路复用 Multiplexing 二进制分帧 首部压缩 Header Compression 服务端推送 Server Push HTTP1 0 1 1 2 0 的区别 HT
  • AD从原理图到PCB超详细教程

    AD超详细教程 前言 一 建立一个工程模板 二 原理图 1 设计原理图 2 使用AD自带库和网上开源原理图库 3 画原理图库 4 编译原理图 三 PCB 1 确定元器件尺寸大小 2 绘制PCB Library 使用元器件向导绘制元件库 原理
  • redis 计时器

    之前 每次访问我们的controller 为了统计总浏览数 都回去修改数据库 我们可以做一个redis的计时器 然后通过job任务 去消费这条消息 先去查redis 里面有没有这条数据 如果没有这个数据的话 那我们就可以 往redis 里面
  • 几个cve漏洞库查询网站-什么是CVE?常见漏洞和暴露列表概述

    CVE 的英文全称是 Common Vulnerabilities Exposures 通用漏洞披露 CVE就好像是一个字典表 为广泛认同的信息安全漏洞或者已经暴露出来的弱点给出一个公共的名称 使用一个共同的名字 可以帮助用户在各自独立的各
  • ubantu下编译dwm缺少的依赖库

    apt get install xorg dev apt get install libx11 dev apt get install libxft dev
  • FB02编辑Coding Block字段

    默认情况下FB02是不允许更改coding block的增强字段的 需要实现可编辑需要进行两个步骤 1 实施note 3067143 2 SM30在视图TCOBX中对增强字段添加以下配置 前台效果
  • Java--软件安装、环境配置、语言类型、命名规则

    java的四大特性 自动垃圾回收 面向对象 跨平台 多线程 编译型语言和解释型语言的区别 编译型语言 运行之前 先把源文件通过指定的编译器 生成机器码文件 可以让计算机直接识别 优点 只需要编译一次 可以运行无数次 所以运行效率极高 缺点
  • 电磁场关于静电场和恒定磁场的思维导图及引申时变电磁场

    参考书目 工程电磁场导论 马西奎 电磁场与电磁波 邹澎 lt 郑大课程选定教材 gt 知乎电磁场专栏 电磁场理论基础 王蔷 整理备忘作为复习之用 本篇中所有积分符号全部采用单符号 面积和体积不再使用多积分号以便表述简单 同时符号标记使用马西
  • 基于LSTM的负荷和可再生能源出力预测(核心部分复现)

    目录 1 主要内容 长短期记忆网络介绍 2 程序结果 3 下载链接 1 主要内容 该程序复现文章 基于改进鲸鱼优化算法的微网系统能量优化管理 负荷和可再生能源预测部分 根据长短期记忆网络 Long Short Term Memory LST
  • NASM与link、golink和alink具体例子使用对比

    一 OMF文件格式链接 使用import伪指令 import伪指令可以直接使用函数名 而不用给函数名加上 前缀和 number 后缀 但import伪指令仅适合于OMF borland obj 格式输出 OMF格式是MS在16位下操作系统的