首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在64位计算机上链接32位NASM文件时出现问题

可能是由于不匹配的架构引起的。在这种情况下,链接器可能会报告错误,因为它无法正确地将32位的目标文件与64位的系统库进行链接。

要解决这个问题,可以尝试以下几个步骤:

  1. 确保使用的链接器是与目标文件相匹配的。如果你使用的是64位的链接器,尝试使用32位的链接器来链接32位的NASM文件。
  2. 检查你的链接器选项。确保你在链接时指定了正确的架构选项。例如,在使用GNU链接器(ld)时,可以使用"-m elf_i386"选项来指定32位架构。
  3. 检查你的系统库。确保你使用的是与目标文件相匹配的系统库。如果你的目标文件是32位的,你需要使用32位的系统库进行链接。
  4. 检查你的编译选项。确保你在编译NASM文件时指定了正确的架构选项。例如,在使用NASM汇编器时,可以使用"-f elf32"选项来指定32位架构。

如果上述步骤都没有解决问题,可能需要进一步检查你的代码和环境设置,以确定是否存在其他问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【Android 内存优化】libjpeg-turbo 函数库交叉编译 ( libjpeg-turbo 函数库下载 | libjpeg-turbo 编译文档 | 环境准备 | NASM 安装 )

, 里面有详细的编译文档 ; ( 可以点击该链接 , 直接跳转查看该文件 ) 三、 编译前环境准备 ---- BUILDING.md 中提供了编译指导 , Build Requirements...; https://www.nasm.us/pub/nasm/releasebuilds/2.15/ 页面下载 nasm-2.15.tar.gz 压缩包 ; 也可以直接点击 此处连接下载 ;...2、 拷贝解压 NASM 源码 拷贝文件 : 将该文件拷贝到 Ubuntu 系统中的 /root/picture_compress 目录中 ; 解压该文件 : 调用 tar xvf nasm-2.15...-2.15 编译 nasm-2.15 : ① 生成 Makefile 文件 : 进入 nasm-2.15 目录 , 执行 ....-2.15# ② 编译安装 : /root/picture_compress/nasm-2.15 目录下执行 make install 命令 , 编译安装 nasm-2.15 汇编工具 ; $ make

1.3K20

NASM语法

一个具体文件格式的完整的可使用调试文件格式的列表可通过命令'nasm -f -y' 来得到。 这个选项缺省状态下没有被构建NASM 。...`-i'选项: 包含文件搜索路径 当NASM 文件中看到'%include'操作符(参阅4.6),它不仅仅会在当前目录下搜索给 出的文件,还会搜索'-i'选项命令行中指定的所有路径。...运行NASM 带上命令行选项'-w+orphan-labels' 会让NASM 在你定义了一个不以冒号结尾的label 警告你。...这样的话, 如果你想到链接进来的其他模块中定义了一个符号叫'eax',你可以用'$eax' NASM 代码中引用它,以和寄存器的符号区分开。...这也不是一个预自理定义: 'msglen'的值只被计算一次,计算中使用到了'$'(参阅3.5)在此时的含义。注意 ‘EQU’的操作数也是一个严格语法的表达式。

1.9K20

计算机是如何启动的?一文教你自制操作系统

于是,只要在计算机出厂,将固定的程序写入 ROM,并且设置电脑开机时率先读取 ROM 的固定位置并执行,就可以解决上述的悖论了。...利用 BIOS 10H 号中断实现字符串显示 上面已经提到, INT 10H 触发,如果 AH 中存储的是 13H,那么 BIOS 就会在屏幕上显示一行字符串。 4.2.1....本文我们选用开源的 NASM linux 环境下进行编写。 5.2....编译链接 无论你用哪种汇编器完成代码的编写,都要用相应的汇编器执行编译链接,例如,基于 NASM 编写的上述代码可以 linux 下执行: nasm boot.asm -o boot.bin 生成二进制文件...启动你自制的操作系统 你可以将刚刚生成 ISO 或者 IMG 文件刻录到 U 盘、光盘或是软盘上,然后放入计算机,重启, BIOS 中设置从该设备启动,就可以看到屏幕上显示出了闪闪的“Hello World

2.7K10

测试利器-FFmpeg

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。...FFmpegLinux平台下开发,但它同样也可以在其它操作系统环境中编译运行,包括Windows、Mac OS X等。...意思就是 yasm/nasm 包不存在或者很旧,可以使用–disable-yasm禁用这个选项编译或者可以安装一下yasm 官网下载最新的yasm安装包 tar -xvzf yasm-1.3.0.tar.gz.../ffmpeg -version 这里有坑儿 查看FFmpeg版本,可能会出现错误: libavdevice.so.57: cannot open shared object file: No such...file or directory 遇到这个问题不要慌,原因是lib目录未加载到链接到系统库中。

86520

主引导扇区程序代码优化-2

正向si和di加1或者加2(由使用复制字节还是字的指令控制)反向则是减。 每次复制一次,CX 的内容自动减一。 rep 则是使指令不断运行知道cx为0结束。...循环指令 loop 标号 循环指令标号位置指令,直到cx寄存器值为0 条件转移指令 jns 处理器执行它的时候要参考标志寄存器的 SF 位。jns 当SF位为0,执行标号处指令。和jmp相似。...mov si,mytext mov di,0 mov cx,(number-mytext)/2 rep movsw mov ax,number ;计算各个位...运行虚拟机显示如下 资源 汇编代码及二进制文件:https://github.com/duofanCoder/x86-NASM/tree/master/ASM-Learn-2/code 虚拟机固定大小硬盘...vhd文件:https://github.com/duofanCoder/x86-NASM/tree/master/ASM-Learn-2 vhd写入工具:https://github.com/duofanCoder

2.5K30

NASM Overview

NASM 提供了一种包含二进制文件的方法,即使用 incbin 伪指令,此伪指令的作用是包含 graphics 以及 sound 这类数据文件。...本章节以 NASM 的 bin output formats 为例讲解多 section 用法 NASM 支持标准的 .data .text .bss,编译后程序文件中内存地址的顺序是 .text .data...section 可以定义使用 align= 或 start= 字句指定对齐字节,区别是 align 只接受 2 的 N 次幂,而 start 可以接受任意整数值; section 可以定义使用...vstart= 字句定义一个虚拟起始地址,它将被用于计算该 section 内的所有内存引用; section 可以定义使用 follows= 或 vfollows=.start 用来获取该 section 起始地址; 拓展: progbits:程序内容,包含代码、数据、调试相关信息; nobits:和PROGBITS类似,唯一不同的是文件中不占空间

2.9K20

从裸机启动一个C++程序实战操作

对于CPU来说,它会「认为」自己是通过内存数据线来操作内存,但其实中间的一部分链接到了BIOS中。...如果里面已经有一些配置了,无视就好,我们文件最后加上: PATH=$PATH:/Users/xxx/nasm-2.16.01 注意,由于我是放在~/里的,但这里要写全路径,所以你需要看一下全路径是什么...已经安装好nasm的前提下,我们项目路径下新建一个文件,叫做mbr.nas,然后输入下面内容: mov ax, 0xb800 mov ds, ax mov [0x0000], byte 'H' hlt...注意,之所以首行也会有偏移数,这是有一种情况,就是当前文件的第一条指令并不一定加载到内存0的位置,虽然本代码中就是0,但我们还是用-来计算一下偏移量,而不直接用 所以,这一行的意义就很明确了,times...当然,使用远跳指令也可以使用标签,只不过此时的标签会使用「相对于文件头」的偏移量。

56733

运行第一个汇编程序

机器语言:机器语言是一种直接由计算机硬件执行的语言,它由二进制代码组成,是计算机硬件能够识别和执行的唯一语言。机器语言的编写非常繁琐,容易出错,因此实际开发中很少使用。...汇编语言文件编译 使用汇编语言编译器将汇编语言程序编译成可执行文件。常用的汇编语言编译器有nasm、gas等,具体使用哪个汇编语言编译器可以根据具体情况决定。...centos7 上运行汇编程序 CentOS 7上运行汇编程序,需要先安装相应的汇编器和链接器,例如GNU Assembler (GAS)和GNU Linker (LD)。...可以通过以下命令安装: sudo yum install nasm ld 安装完成后,可以使用文本编辑器编写汇编程序,例如使用vim编辑器: vim hello.asm 参考上面例子 保存文件后,可以使用以下命令编译和链接程序...: nasm -f elf64 -o hello.o hello.asm ld -s -o hello hello.o 编译和链接成功后,可以使用以下命令运行程序: .

19520

试一试没有操作系统的机器上运行下我们的代码

好了,当然,我们也可以把我们的代码放到硬盘的第一个扇区,然后按下开机键,让BIOS把我们的代码加载到内存中,让CPU去执行我们的代码,这样,就实现了计算机裸机上直接去运行我们的代码了。...我们使用NASM-IDE编写代码,编写完之后,使用NASM编译器对代码进行编译。根据以上思路,我们要把要显示的字符写入到地址B8000开始的位置处,所以我们的段地址为B800。...每次执行主引导扇区代码都会首先检查该主引导扇区最后2字节是否是"55 AA",若是,则会执行主引导扇区,否则,则认为这是一个无效的主引导扇区,停止执行。...[wqqk0bhwij.png] OK,代码已经写完了,使用NASM编译器编译一下,得到了bin文件,即为二进制文件。因此我们的代码就被编译为基于Intel 8086处理器的机器指令了。...[2b6v0uew32.png] 启动成功,我们可以看到,我们的代码在这台没有操作系统的计算机上跑起来了!

1.1K41

汇编学习总结一(10.27)

学习汇编的念头是前几天看了《c语言标准和实现》的附录里面提到汇编的只知识,所以还是学习一下,帮助自己家人计算机内功,网上也有说csapp的第三章就是讲述汇编语言的,到时候可以拿来看看。...它的汇编编译器是MASM6.0以上版本中的Ml.exe,资源编译器是Microsoft Visual Studio中的Rc.exe,32位链接器是Microsoft Visual Studio中的Link.exe...汇编工具,主要是masm,这个是微软自己的,nasm是开源汇编工具。可以linux和Windows下运行,目前知乎上有nasm的教程,主要是讲述和c语言的关联,linux下学习。...2、进入系统,将asm文件放入masm同目录下。...寄存器为了兼容以前的程序指令,ax等都是16位,ax=AH+A,计算的时候,数据宽度要一直,否则会出错。

1K40

java+opencv_opencv使用教程

opencv 简介 OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。...它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法(百度百科)。...gstreamer-devel libavc1394-devel libraw1394-devel libdc1394-devel jasper-devel jasper-utils swig python libtool nasm...make make 命令安装的时间有点长,可以撸一把王者,电脑好点的话,可以执行 make -j4 (多核宿主机上,可以通过-j选项来提高make命令的执行速度,单核机器就不要尝试了) sudo make...发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/186454.html原文链接:https://javaforall.cn

1.6K20

Hello OS

,可以说量子计算机大规模推广之前,现今的操作系统软件还是很值得学习借鉴。...机主板上的 ROM芯片中的操作系统,即使掉电也能保存,而PC机上电后的第一条指令就是BIOS固件中的,它负责检测和初始化 CPU、内存及主板平台,然后加载引导设备(大概率是硬盘)中的第一个扇区数据,到...那是因为这个函数是用 C 语言写的main.c中,最终它们分别由nasm 和GCC 编译成可链接模块,由LD 链接链接在一起,形成可执行的程序文件: #include "vgastr.h" void...不过安装之前,还要进行系统编译,即把每个代码模块编译最后链接成可执行的二进制文件。 make make 历史悠久,小巧方便,也是很多成熟操作系统编译所使用的构建工具。...才能在计算机启动加载它。

91400

【FFmpeg】 Mac OS 中编译 FFmpeg 源码 ① ( homebrew 安装 | 通过 gitee 源安装 homebrew | 安装 FFmpeg 编译所需的软件包 )

homebrew , 直接选择 Y 回车即可 ; 这里按下 回车键 , 正式开始下载安装 homebrew ; homebrew 安装完成后 , 会提示让你选择 之后使用 homebrew 安装软件包...pkg-config yasm freetype openssl automake : 将 Makefile.am文件 转为 Makefile.in 文件的工具 ; git : 分布式版本控制工具 ;...libtool : 用于 创建 / 修改 / 管理 动态链接库 , 可以自动化库的 编译 和 安装过程 , 并处理库的依赖关系 ; fdk-aac : AAC音频编解码器 ; lame : MP3 编码器..., 将 PCM 音频数据 转码为 MP3 格式 ; libpng : 处理 PNG 图像文件的开源库,可 读取和写入 PNG 图像 ; libass : 字幕渲染库 , 支持多种字幕格式 , 用于视频播放软件中.../ yasm : 汇编器 , 将 汇编代码 转换为 机器码 ; pkg-config : 用于 编译 查询 已安装软件包 的 版本信息 和 编译标志的工具 ; freetype : 开源的字体渲染库

24210

《一个操作系统的实现》笔记(1)--NASM汇编语法和环境搭建

Bochs虚拟机调试方法 也可以输入b 0x7c00之后继续执行,这样当引导扇区执行到这里,我们就可以单步调试了,使用dump_cpu可以查看CPU寄存器,x /64xb [addr]查看某个内存地址处的内容...---- 计算机的启动过程 当计算机电源被打开,它会先进行加电自检(POST), 然后寻找启动盘,如果是选择从软盘启动,计算机就会检查软盘的0面0磁道1扇区,如果发现它以0xAA55结束(二进制的数据经常这样搞一个特殊标记...到此为止,计算机不再由BIOS中固有的程序来控制,而变成操作系统的一部分来控制。 ---- NASM汇编指令简介 每种类型的CPU都能理解它们自己的机器语言。...NASM中,任何不被方括号括起来的标签或变量名都被认为是地址,访问标签中的内容必须使用[ ]。 一个简单的boot程序,开机后显示红色的”Hello,OS world!”...当二进制数据不同的电脑上传输(不管来自文件还是网络)。 2. 当二进制数据作为一个多字节整形写入到内存中然后当作单个单个字 节读出,反之亦然。

3.9K52

用Rust实现Brainfuck的JIT编译器

正如我们 Wikipedia 中可以看到的: 中央处理器(CPU)是计算机中的硬件,它通过执行系统的基本算术,逻辑和输入/输出操作来执行计算机程序的指令。 好的,CPU 会执行一些运算。...因此,当我们编写 mov rax, 1 ,意味着将 1 放入 rax 寄存器。...项目中的 Cargo.toml 文件里添加相应的依赖项: [dependencies] dynasm = "1.2.3" dynasmrt = "1.2.3" 实现BrainfuckJIT 在生活中,...如果有两种合理但不同的方法,你应该总是研究两者的结合,看看能否找到两全其美的方法。...在他的重要论文《符号表达式的递归函数及其机器上的计算》(Recursive functions of symbolic expressions and their computation by machine

83510

如何调试操作系统源码

引言 上一篇文章中,我们介绍了如何创建一个简单的引导扇区,触发 BIOS 中断,从而在计算机屏幕上显示出一行我们想要的字符串。 计算机是如何启动的?...处加一个写监视点 watch — 在当前内存位置加一个监视点 watch stop — 当遇到监视点停止模拟(默认动作) watch continue — 当遇到监视点不停止模拟 unwatch...因此我们需要将代码第一行的“org 07c00h” 改为“org 0100h”,并执行汇编操作生成 COM 文件nasm boot.asm –o boot.com 然后下载并安装 DOSBox:https...Dos 程序加载 可是虚拟机中的 FreeDos 系统,我们要如何才能加载宿主机上我们要调试的系统呢?...汇编程序 我们需要按照上面说的,将代码第一行的“org 07c00h”改为“org 0100h”,并执行汇编操作生成 COM 文件nasm boot.asm –o boot.com 6.2.4.

1.7K10
领券