Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >难以让Hello / gas / Mac工作

难以让Hello / gas / Mac工作
EN

Stack Overflow用户
提问于 2012-10-15 10:59:05
回答 1查看 1.4K关注 0票数 1

我正试图用GNU汇编程序为Mac编写Hello,但在它打印"Hello“之前,它是总线错误。

hello.s

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.global start

.data

.equ stdout, 1

.equ sys_write, 4
.equ sys_exit, 1

.equ kernel, 0x80

msg: .asciz "Hello World!\n"
.equ len, .-msg

.text

start:
    push $len
    push $msg
    push $stdout
    mov $sys_write, %eax
    sub $4, %esp
    int $kernel
    add $4 + $4 * $3, %esp

    push $0
    mov $sys_exit, %eax
    sub $4, %esp
    int $kernel

追踪:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ clang -c -o hello.o hello.s
$ ld -o hello -macosx_version_min 10.6 hello.o
$ ./hello
Bus error: 10

$ gdb hello
(gdb) run
Starting program: /Users/andrew/Desktop/src/mcandre/gas/hello/freebsd/hello 

Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_PROTECTION_FAILURE at address: 0x0000000000002000
0x0000000000002000 in msg ()

我的代码是基于以下几点:

我使用NASM / Mac的语义和Gas / Linux的语法。

我也尝试了GNU汇编程序维基百科页面上的示例程序,但它也是总线错误的。

我向苹果提交了一份错误报告,因为它的GNU汇编程序已经过时(如1.38)。他们说用clang代替。

我做错了什么?

规格:

  • ld64-134.9
  • clang 4.1
  • Xcode 4.5
  • Mac 10.8.2
  • MacBook Pro 2009
EN

回答 1

Stack Overflow用户

发布于 2012-10-15 14:20:50

因为你做错了什么,我不确定。我已经有一段时间没有使用程序集了,但是clang不喜欢我的mac上的.equ状态。当我换掉它们的时候,它运行得很好。(老实说,我更喜欢NASM,尽管我使用的是macport的。)

我创建了一个简单的.s文件,该文件将使用clang编译,字符串长度有一个问题。(也许是个窃听器?)我将长度存储在$len中,但是当我使用$len时,它不起作用。但用硬编码的数字就行了。

我用以下方法编译了代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
clang -c -o hello.o hello.s -arch i386
ld -o hello -macosx_version_min 10.6 -arch i386 hello.o
./hello

hello.s:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/* defines */
.set sys_exit, 1
.set sys_write, 4
.set stdout, 1
.set kernel, 0x80

// TEXT SECTION
.text

/* write function */
.macro write str, strSize
    // length of string
    push \strSize
    // the string
    push \str
    // to file descriptor
    push $stdout
    // what we want to call
    movl $sys_write, %eax
    // call the kernal
    call _syscall
    // free the stack
    addl $12, %esp
.endm

/* define main function */
.globl start

/* impl. main function */
start:

    // write(string, long)
    // if I use $len i get a bunch of letters
    write $msg, $14 //$len

    // exit(0)
    // if i print out $len it is 14
    push $0 //$len
    movl $sys_exit, %eax
    call _syscall

/* call kernal 
 * 
 * so you don't have to do sub $4, %esp
 */
_syscall:
    int $kernel
    ret

// DATA SECTION
.data
    /* our string */
    msg: .string "Hello World!\n"
    // using len: .long $14 causes the same issue as . - msg
    // where the string does not end at 14
    // perhaps someone else knows why..
    len: .long . - msg

我希望这能帮到你。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12902220

复制
相关文章
是什么让量子计算如此难以解释?
作者 | Scott Aaronson 译者 | Sambodhi 策划 | 刘燕 直到我们开始讨论这些计算机的潜在应用,才需要理解它们背后的物理原理。 你也许听说过,量子计算机是一台神奇的超级机器,它通过尝试不同平行宇宙中所有可能的答案,将很快治愈癌症,遏制全球变暖。15 年来,在我的博客(https://www.scottaaronson.com/blog/)和其他地方,我一直在抨击这种“卡通化”的观点,试图解释我所看到的更为微妙而又具有讽刺意味的真相。作为一名量子计算研究者,我将此视为一项公共服务,几
深度学习与Python
2023/04/01
3280
是什么让量子计算如此难以解释?
Leetcode 134 Gas Station
There are N gas stations along a circular route, where the amount of gas at station i is gas[i]. You have a car with an unlimited gas tank and it costs cost[i] of gas to travel from station i to its next station (i+1). You begin the journey with an empt
triplebee
2018/01/12
5580
Hello Flutter - Mac搭建Flutter运行环境
安装Flutter SDK 下载Flutter SDK:SDK(有**的话可能会快一点,不然有可能打不开)下载结束以后我们解压到一个我们找得到的文件夹 这个时候我们需要做一个操作,给项目权限,我
何处锦绣不灰堆
2020/11/24
8170
Hello Flutter - Mac搭建Flutter运行环境
LeetCode 0134 - Gas Station
There are N gas stations along a circular route, where the amount of gas at station i is gas[i].
Reck Zhang
2021/08/11
2920
EVM Gas 分析
Gas 就像是机车行驶过程中需要燃烧燃料一样,对于区块链信息的记录至关重要,它是指在网络上执行特定操作所需的计算工作量。
Footprint Analytics
2023/02/02
7840
EVM Gas 分析
(概念篇)Hello,Mac Git,I'm coming.
原以为就这样浪下去了,没想到,Enmmm,换了份工作之后,公司大佬,全栈比比皆是,相比之下,LZ low 到家了。
贺biubiu
2019/06/10
4150
[LeetCode] 134. Gas Station
本文讨论了一种算法题的解题思路,通过计算每个站点的差和,从第一个差和不为负数的站点开始环游,并返回起始站点。
用户1148830
2018/01/03
5940
ethereum原理-gas说明
简单的说就是手续费的一种变体,本质还是转账费用,只能在设计上,功能更复杂,用处更多。 即然是手续费,为什么不干脆一次性收取或者设定一个转账比例,不是更简单? 这个后面说。
潇洒
2023/10/23
3060
下属缺乏经验,工作难以胜任,上司怎么办?
这个问题在试用期员工身上体现的会比较明显,很多上司会直接下一个该员工不能胜任工作的结论,笔者也曾在试用期被上级误解过,甚至连解释的机会都没有。
张树臣
2018/08/16
7630
LeetCode 134 Gas Station
LeetCode 134 Gas Station 水题,暴力一下就ok class Solution { public: int tag[100005]; int sum[100005]; int canCompleteCircuit(vector<int>& gas, vector<int>& cost) { int l = gas.size(); for(int i=0;i<l;i++) { ta
ShenduCC
2018/12/12
3980
Mac 高效工作指南
序 很多做开发的程序员,都喜欢用mac,其绚丽的外观,加上手感体验,很适合开发和装逼用。其实除了这些为什么那么多程序员喜欢用mac呢,分析了一下使用mac的好处,无外乎以下几点: Mac OS X 是基于 Unix 的,对于开发人员来说,Unix 下一堆好用的工具都可以随手捡到。并且好多的后端开发都是需要unix或linux的环境支持的。 不需要维护。Mac 买来就直接用,磁盘碎片整理?不需要。装驱动?Mac 装好了,驱动就好了。 简洁。Mac 上所有的操作都简洁到了极致,尽量避免干扰用户,增加了程序员的生
xiangzhihong
2018/02/06
2K0
Mac 高效工作指南
让协作更简单,让工作更轻松
想随时随地查看工作待办? 下班后工作没有及时流转? 灵机一动想及时记下需求? 出差在外,需要查看文档? 移动版TAPD全新来袭!你还在等什么?赶紧来体验吧! 个人待办 让你随时随地查看工作待办,及时流转需求、缺陷和任务。 我的项目 轻松切换我的项目,并基于项目维度查看需求、缺陷、任务、迭代、任务板、发布评审等等。 迭代视角 从迭代模块进入可以更加清晰地查看各个迭代的工作完成情况。 轻量任务板 轻量任务管理——简单直观,适合小项目团队或常规事务型团队管理产品需求和团队任务。 Wiki Wiki文档
TAPD敏捷研发
2023/04/02
2420
让协作更简单,让工作更轻松
ScreenFocus mac(mac多屏工作专注效率工具)
有哪些mac软件可以提高办公效率?ScreenFocus mac是Mac平台上一款保持专注效率工具,当我们在使用多台显示器进行办公的时候,出现在视野中的其他显示器亮眼的屏幕会分散我们注意力,这时就可以使用ScreenFocus Mac版将其它的屏幕变暗,增强您的专注!
Mac小小
2022/08/30
7690
Minimize Max Distance to Gas Station
思路: 首先求出每个station之间的距离,考虑如下问题:两个station为[1, 9],gap为8。要插入一个station使得最大的最小,显然插入后应该为[1, 5, 9],最大间隔为4。举个反例,如果插入后为[1, 6, 9], [1, 3, 9],它们的最大间隔分别为5, 6,明显不是最小。从这里可以看出,对于插入k个station使得最大的最小的唯一办法是均分。
用户1147447
2019/05/26
6290
[译]Gas 优化 - 如何优化存储
在Solidity[3](用于以太坊智能合约的编程语言)中,你拥有“内存(memory)”(想像计算机上的RAM)和“存储(storage)”(想像硬盘驱动器)。两者均以32字节的块为操作单位(一个字节大约是一个字母)。在Solidity 中,内存价格便宜(存储或更新值仅需要 3 gas)。存储很昂贵(存储新的值需要20,000 gas,更新值需要 5000 gas)。
Tiny熊
2020/10/23
9500
大佬愤怒喊话:做Kubernetes开源工作难以在大厂内晋升
近日,Kubernetes(简称 K8s)圈内大佬 Noah Kantrowitz 连发多条推文抨击“FAANG”科技巨头内部晋升机制对 K8s 全职员工不友好,他指出,“科技大厂们的激励措施正阻止人们全职参与开源贡献,大家的贡献积极性正在放缓。”
深度学习与Python
2022/04/19
2220
MAC工作机提升工作效率的tips
MAC和Windows环境不一样。Window靠着资源管理器explorer.exe,并且提供桌面环境和shell工具比如xshell。工作环境切换到MAC,MAC属于类Unix操作系统(*NIX)。由于不同的系统框架设定,Windows好用的工具软件在MAC不一定有一样好用的用户体育。MAC OSX采用的是另一种设计,Linux的桌面环境(Linux KDE, GNOME等)和文件设备管理器 (Nautilus, Dolphin等).
mariolu
2019/04/21
2.5K0
关于eth gas的思考
理解Gas需要的几个概念: 旷工费:除了转账金额需要额外支付给以太坊网络旷工的费用 gas cost交易旷工费用 ( 也是也是以太坊的交易费用 ) =gas used数量 * gas price ( gas 单价,以太币计价) Gas:以太坊每一步操作都需要消耗Gas,执行总量就是Gas Gas Price:每一步操作的单价,一般用GWei作为单位,乘以Gas就是需要支付的矿工费。Gas Price是运行一个特别的交易或程序(被称作合约)所需的gas。 一个区块的gas费用可以用来暗示计算工作量,交易量和
rectinajh
2018/05/17
2K0
【易错概念】以太坊的账户、交易、Gas和Gas Limit的概念
所有以太坊区块链上的行动都是由各账户发送的交易激活。每次一个合约账户收到一个交易,交易自带的参数都会成为代码的输入值运行。合约代码会被以太坊虚拟机(EVM)在每一个参与网络的节点上运行,以作为它们新区块的验证。
辉哥
2018/08/10
1.1K0
点击加载更多

相似问题

等待后台线程完成

30

如何让UI线程等待后台线程完成?

40

为什么主线程要等待后台线程完成?

28

正在等待多个后台线程

40

异步等待多个线程完成

16
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文