免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 8662 | 回复: 5
打印 上一主题 下一主题

编写汇编程序 Mac OS X下编译与运行的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-03-23 15:47 |只看该作者 |倒序浏览
硬件环境:Intel core2 duo
软件环境:Mac OS 10.6.7
汇编编译环境:binutils 2.21 官方网站下载的for mac版本的.tar文件,手动编译安装
代码编辑器:Xcode 3.2.6 官方网站下载

测试代码(使用Linux下汇编程序的编写方式写了段测试代码):
test.s:
.section .text,
.globl _start
_start:
movl $1,%eax
movl %eax,%ebx
int $0x80

编译:as -o test.o test.s (没有报任何错误)
链接:ld -e _start -o test test.o(没有报任何错误)
运行:./test (出现bus error错误)

问1:这个错误应该怎么解决?是代码错误还是我所使用的环境有问题?

问2:linux上面的汇编程序与Mac OS X上面的汇编程序不能通用吗?如果不能都有哪些区别,怎么去正确的修改那些在Linux系统可以正确运行的程序,而在Mac OS X下面报错的程序?

问3:有没有教材或者视频教程之类的资源专门讲解在Mac OS X下汇编的资料?

望知情人士给予帮助,谢谢!

注:以上提到OS的都是指的汇编的程序代码不是汇编指令。

论坛徽章:
0
2 [报告]
发表于 2011-03-23 17:10 |只看该作者
http://orangejuiceliberationfron ... embler-on-mac-os-x/

gcc -s 生成个汇编文件参考下?苹果好像比微软还封闭,一般都用xcode做应用

论坛徽章:
0
3 [报告]
发表于 2011-03-23 17:19 |只看该作者

论坛徽章:
0
4 [报告]
发表于 2011-03-23 17:27 |只看该作者
谢谢,我看看先

论坛徽章:
0
5 [报告]
发表于 2011-04-21 21:17 |只看该作者
我follow各位大虾
我的mbp装了个老版的xcode
真不知所用中

论坛徽章:
0
6 [报告]
发表于 2011-04-22 03:06 |只看该作者
本帖最后由 vupiggy 于 2011-04-21 20:08 编辑
movl $1,%eax
movl %eax,%ebx
int $0x80
vistar_w 发表于 2011-03-23 08:47


1. int $0x80 越过 libc 直接调系统调用不提倡,谁也不知道内核对参数,返回值的处理什么时候会变动,甚至可能 int $0x80 这种方式是否还被支持都不得而知。
2. 如果只为了试验,假设 int $0x80 仍然被支持,你上面这段代码的错误之处在于参数传递方式不对,通过 ebx, ecx 传系统调用参数是 Linux ia32 支持的,在 mac os x 上,通过栈,于是代码大概应该是这样(手头没有 Intel 的 mac 没法试):
  1. push $23 # 传入 exit 的参数
  2. movl $1, %eax # 指定系统调用号,1: exit
  3. sub $4, esp # 一点额外空间
  4. int $0x80
复制代码
如果运气好汇编链接通过,运行完以后 echo $?,看看是不是 23。

建议生成 32 位的 binary。
  1. as --32 -o test.o test.s
  2. ld -m elf_i386 -e _start -o test test.o
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP