nasm编译器配置
① 汇编语言编译器的NASM
NASM是一个为可移植性与模块化而设计的一个80x86的汇编器。它支持相当多
的目标文件格式,包括Linux和'NetBSD/FreeBSD','a.out','ELF','COFF',微软16
位的'OBJ'和'Win32'。它还可以输出纯二进制文件。它的语法设计得相当的简
洁易懂,和Intel语法相似但更简单。它支持'Pentium','P6','MMX','3DNow!',
'SSE' and 'SSE2'指令集,
② 怎么在64位系统下编译nasm
用记事本写代码
用命令编译
nasm -f <format> <filename> [-o <output>]
-f后面是输出格式,具体的用nasm -hf查询
filename是代码文件名
-o后面是输出文件名
如果输出类型的是一种object file的话要用链接器链接
一切操作都要在命令行下完成,如果不习惯命令行操作不建议用
③ 如何在64位的Linux系统上使用汇编和C语言混合编程 第2页
编译和链接的时候使用的指令:(AMD处理器,64位操作系统)
编译链接指令
1 nasm -f elf foo.s -o foo.o
2 gcc -c bar.c -o bar.o
3 ld -s -o foobar bar.o foo.o
汇编语言用nasm编写并用nasm编译器编译,而C语言用的是gcc编译,这些都没有问题,但是在链接的时候出错了,提示如下:
ld: i386 architecture of input file `foo.o' is incompatible with i386:x86-64 output
google了一下,意思就是nasm 编译产生的是32位的目标代码,gcc 在64位平台上默认产生的是64位的目标代码,这两者在链接的时候出错,gcc在64位平台上默认以64位的方式链接。
这样在解决的时候就会有两种解决方案:
<1> 让gcc 产生32位的代码,并在链接的时候以32位的方式进行链接
在这种情况下只需要修改编译和链接指令即可,具体如下:
32位的编译链接指令
1 nasm -f elf foo.s -o foo.o
2 gcc -m32 -c bar.c -o bar.o
3 ld -m elf_i386 -s -o foobar foo.o bar.o
具体的-m32 和 -m elf_i386 请自行查阅gcc (man gcc)
如果你是高版本的gcc(可能是由于更新内核造成的),可能简单的使用-m32 的时候会提示以下错误(使用别人的历程,自己未曾遇到):
> In file included from /usr/include/stdio.h:28:0,
> from test.c:1:
> /usr/include/features.h:323:26: fatal error: bits/predefs.h: No such file or directory
> compilation terminated.
这应该是缺少构建32 位可执行程序缺少的包,使用以下指令安装:
sudo apt-get install libc6-dev-i386
此时应该就没有什么问题了。
④ 请问NASM编译器在哪下载,谁能给我一个官网的下载地址,谢谢!
1,官网:http://www.nasm.us/
2,官网最新版下载地址:http://www.nasm.us/pub/nasm/releasebuilds/2.11.09rc1/win32/nasm-2.11.09rc1-installer.exe
3,送上学习网站:http://www.mouseos.com/assembly/nasm02.html
⑤ 如何在 Windows 下编译 OpenSSL
1)在微软网站下载并安装VS Studio,
2)下载并安装ActivePerl。
3)下载并安装Nasm汇编器。
4)下载并安装OpenSSL的最新Release包。
这里需要强调的是,读者未必需要完全按照步骤编译OpenSSL库,这里的部分次序是可以互换的。
在完成所有上述4步后,我们就可以解压缩OpenSSL包,在对它进行修改便可以编译了。在解压缩后,所有的源代码放在openssl- 1.0.1e目录下,在此目录下,有两个文件INSTALL.W32, INSTALL.W64需要被关注。打开其中的任何一个文件,你会看到如何编译OpenSSL的各个步骤。这里,笔者将会再啰嗦一下。
1)打开VS Studio命令行工具,如图1所示。若编译64位OpenSSL库,请打开Visual Studio x64 Win64 Command Prompt,反之亦然。
2)配置编译文件及安装目录;
编译Win32:perl Configure VC-WIN32 --prefix=c:\some\openssl\dir
编译Win64:perl Configure VC-WIN64A
“c:\some\openssl\dir”目录可以改成任何你希望的安装目录
3)搭建编译环境:
ms\do_nasm
ms\do_ms
对于64位编译,将ms\do_ms替换成ms\do_win64a
4)编译OpenSSL
nmake -f ms\ntdll.mak
5)安装编译生成的库到“c:\some\openssl\dir”
nmake -f ms\ntdll.mak install