[原创]linux简单之美(二)
2014-07-07 19:19
281 查看
原文链接:linux简单之美(二)
我们在前一章中看到了如何仅仅用syscall做一些简单的事,现在我们看能不能直接调用C标准库中的函数快速做一些"复杂"的事:
以上代码功能很简单,从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
我们在前一章中看到了如何仅仅用syscall做一些简单的事,现在我们看能不能直接调用C标准库中的函数快速做一些"复杂"的事:
section .data ft db "now is %d",10 section .text extern puts extern exit extern sleep extern printf global main main: mov edi,11 again: dec edi push edi push ft call printf push 1 call sleep cmp edi,0 jnz again push msg call puts push 0 call exit msg: 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
相关文章推荐
- (原创)Linux跟Window共享文件的两个简单方法
- [原创]linux简单之美(一)
- 【原创】TCP Socket 简单练习 --- 新进程辅助通信 分类: Linux --- 应用程序设计 2014-12-23 10:27 64人阅读 评论(0) 收藏
- 【原创】Linux系统下如何配置SSH?如何开启SSH?SSH简单使用
- [原创]linux简单之美(三)
- 20.Linux:网络编程(TCP协议-简单版本):client和server(原创)
- 【原创】TCP Socket 简单练习 --- 线程池实现并发服务器 分类: Linux --- 应用程序设计 2014-12-25 13:59 50人阅读 评论(0) 收藏
- linux下honeyd的简单应用【原创】
- 【原创】TCP Socket 简单练习 --- select同时监测多个描述符 分类: Linux --- 应用程序设计 2014-12-23 10:33 75人阅读 评论(0) 收藏
- 简单封装的一个文件操作的类【原创】
- 【原创】Jsp读取文件(简单的计数器)
- 原创]安装Linux的五种方法和心得
- linux下的简单自动备份
- [原创]简单描述3层结构设计
- 最简单的linux上的pptpd服务器安装
- 【原创】第一步:在Linux下设置tftp服务及设置双网卡
- 记住JSP内置对象的简单方法(原创)
- 小型团队之CVS和缺陷跟踪简单探讨【原创】
- 【原创】Linux日常使用管理FAQ