原文链接:linux简单之美(二)

我们在前一章中看到了如何仅仅用syscall做一些简单的事,现在我们看能不能直接调用C标准库中的函数快速做一些"复杂"的事:

 1 section .data
 2     ft db "now is %d",10
 3
 4 section .text
 5 extern puts
 6 extern exit
 7 extern sleep
 8 extern printf
 9 global main
10
11 main:
12     mov edi,11
13 again:
14     dec edi
15     push edi
16     push ft
17     call printf
18
19     push 1
20     call sleep
21
22     cmp edi,0
23     jnz again
24
25     push msg
26     call puts
27
28     push 0
29     call exit
30
31 msg:
32  db "happy xxx day!",0

以上代码功能很简单,从10倒数到0,然后打印一行,最后结束.与之前代码不同的是其中调用了C标准库中的函数.编译和以前一样:

nasm -e elf main.asm

我们看看怎么连接:

gcc -m32 -o main main.o

好鸟!运行正常.值得注意的是:我的OS是ubuntu64,而asm代码中是32位的,如果开始用 ld -m elf_i386 -lc -o main main.o的方式,首先会提示找不到c库,这时可以进入/usr/lib,然后使用:

sudo ln -sv /lib/i386-linux-gun/libc.so.6 libc.so

创建软连接解决.但在运行时提示无法找到可执行文件!该文件明明在的!遂用gcc来连接,但要将_start改为main,还要装载32库:

sudo apt-get install ia32-libs

还会提示找不到h文件,这时再装载库:

sudo apt-get install g++-multilib

还有2族库,如有必要也可加载:

sudo apt-get install libc6:i386 libgcc1:i386 gcc-4.6-base:i386

libstdc++5:i386 libstdc++6:i386

sudo apt-get install libc6-i386

最后要说的是,一些C代码在用std=c99编译时会发现提示无法获取结构大小,这时改成如下即可:

gcc -D_GNU_SOURCE -std=c99 main.c

转载于:https://www.cnblogs.com/hopy/p/3830293.html

[原创]linux简单之美(二)相关推荐

  1. 交叉编译及linux简单程序设计,嵌入式实验6交叉编译及Linux简单程序设计实验

    实验六交叉编译及Linux简单程序设计实验的实验报告 一实验目的 1.了解和掌握交叉编译模式和方法: 2.熟悉和掌握Linux简单程序设计. 二实验环境 预装Fedora10_A8_Linux的pc机 ...

  2. Linux编译和下载嵌入式实验,嵌入式实验6交叉编译及Linux简单程序设计实验

    <嵌入式实验6交叉编译及Linux简单程序设计实验>由会员分享,可在线阅读,更多相关<嵌入式实验6交叉编译及Linux简单程序设计实验(7页珍藏版)>请在人人文库网上搜索. 1 ...

  3. linux词语大全,简单词语大全二字学习软件-简单词语大全四字下载v1.5.3-Linux公社...

    简单词语大全二字学习软件是一款可以让用户快速背单词的软件,这款软件为用户提供了英语内容搭配影音的例句,让用户可以轻松学习英语.其中,用户可以在简单词语大全二字学习软件上对多人进行挑战,看自己的英语水平 ...

  4. Linux简单安装Mysql+Apach+PHP+phpMyAdmin

    Linux简单安装Mysql+Apach+PHP+phpMyAdmin 2008年06月02日 星期一 上午 01:00 从网上看到许多Apache+Mysql+PHP的安装文档,但有的总是会有写错误 ...

  5. 体会Linux与生俱来的美 ---摘自csdn

    走进Linux 操作系统 摘要:本期涉猎了操作系统的来龙去脉后与大家携手步入Linux世界.我们力图展示给大家一幅Linux系统的全景图,并为了加深对linux系统的全面认知,亲手搭建了一个能运行在内 ...

  6. 体会Linux与生俱来的美 初级篇  走进Linux 操作系统

    http://www.csdn.net/subject/linux/approach.mht 摘要:本期涉猎了操作系统的来龙去脉后与大家携手步入Linux世界.我们力图展示给大家一幅Linux系统的全 ...

  7. 深入理解 Linux Cgroup 系列(二):玩转 CPU

    原文链接:深入理解 Linux Cgroup 系列(二):玩转 CPU 上篇文章主要介绍了 cgroup 的一些基本概念,包括其在 CentOS 系统中的默认设置和控制工具,并以 CPU 为例阐述 c ...

  8. linux查看文件夹个球,[原创]linux下面的打小球游戏

    [原创]linux下面的打小球游戏 (2012-04-10 04:51:44) 标签: linux 游戏 杂谈 [原创]linux下面的打小球游戏linux下面的C编程,我还是新手,请大家别笑话. # ...

  9. Linux磁盘分区(二):删除

    ***********************************************声明************************************************ 原创 ...

最新文章

  1. NFS安装系统及PS1设定
  2. linux怎么装谷歌浏览器,如何在linux CentOS 上安装chrome 谷歌浏览器?
  3. Switch命令汇总
  4. 推荐一些不错的开源免费易上手的web前端框架
  5. HTML与CSS基础之子和后代元素选择器(八)
  6. Zen Coding 系列教程一:入门
  7. c语言指针的概念和作用,指针:C语言的重要概念和特色.pdf
  8. Tomcat8.0之后GET请求不需要再设置中文乱码问题
  9. Java第十九天(字节流和字符流转换、打印流、Properties类)
  10. 企业微信API学习笔记
  11. 【OVRP问题】基于鲸鱼优化算法求解开放式车辆路径问题附matlab代码
  12. 计算机的物理地址怎么写,电脑物理地址怎么查
  13. Docker 配置国内镜像加速器
  14. oppo8.0系统最简单激活xposed框架的经验
  15. Python之解决tkinter.PhotoImage不显示图片的问题 Python3
  16. HTML制作一个介绍自己家乡的网站——贵阳,排版整洁,内容丰富,主题鲜明
  17. Android Q访问公共外部存储受限
  18. 昨天,我的大学学习[3]--转载自:www.cstc.net.cn
  19. Elasticsearch索引新增字段
  20. 微软表示今年员工不要参与愚人节活动!怕玩笑过大得不偿失

热门文章

  1. JS 数组 各项操作
  2. jquery实现饼图统计图表
  3. AtomicStampedReference源码分析
  4. expect 批量修改服务器用户密码
  5. FiddlerScript-常用总结
  6. Unity 通过Unity Admob Plugin插件集成admob教程
  7. CentOS下Samba文件服务器的安装与配置
  8. VSFTP配置详解+虚拟用户的支持
  9. 天凉了,大家多穿衣服
  10. php如何减缓gc_管理信息传播-使用数据科学减缓错误信息的传播