Linux下使用nasm调用c语言库函数

似乎关于nasm的相关介绍不多,网上只有一个nasm中文手册可以参考,不过我还没看过这个东西,在网上东搜西找然后再加上自己的摸索总算是能够调用c语言库函数printf了,下面使用两个简单的例子来说明
使用printf输出Hello World,现在我先把汇编的相关代码写出来
;调用c语言库函数printf输出Hello World
;汇编中分号后面一行的内容分注释与c++中的//相似

编译
nasm -f elf hello.asm
gcc -o hello hello.o
现在执行./hello应该能够看到Hello World正确显示了
从上面可以看出调用c语言库函数的方法,同时也能够了解到参数的传递过程,下面我们再以一个简单的计算1+2+3+4+…..100的程序看一下向printf传递两个参数的方法

编译和上面是一样一样的
怎么样,这个还算是比较简单的吧,不过很奇怪的一个问题是,同样的代码在windows下运行时却总是出问题,无法使用gcc进行链接,其中的main要改成_main,否则链接时一样会提示找不到main,另外一点就是如果使用printf的话会链接失败,提示说未定义printf,手动链接相关库文件也没用- -,在nasm中包含stdio.h头文件会提示很多的重复定义,而自己写头文件同样也是不能通过,而使用_printf倒是可以成功链接,但是在执行时什么反应也没有,这个比较崩溃,在windows下同样用的是nasm和gcc,用的是同样的代码,但是在linux下顺利达到预期效果但windows下却………

–阅读次数(44)

发表评论

电子邮件地址不会被公开。

*