V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
sidenycc
V2EX  ›  问与答

请问在 mac 环境下学习汇编的环境

  •  
  •   sidenycc · 2015-02-16 11:14:20 +08:00 · 4828 次点击
    这是一个创建于 3568 天前的主题,其中的信息可能已经有所发展或是发生改变。
    教材用的是Professional Assembly Language,用的是AT&T语法,无奈各种格式和系统调用linux和mac下还是有不少区别,很多代码很难调通..目前装了虚拟机,但还是想在mac原生环境下进行,不知道有没有辙。
    4 条回复    2015-03-10 05:11:53 +08:00
    xieyudi1990
        1
    xieyudi1990  
       2015-02-16 17:44:29 +08:00 via iPhone
    编译个gcc, 里边有个as, 用的就是AT&T语法.

    最不能接受的就是 源操作数在左 目标在游的AT&T语法, 我只是在gcc内联时用用. 平时统一用yasm/nasm做x86汇编器.
    hilojack
        2
    hilojack  
       2015-03-05 17:41:36 +08:00
    @xieyudi1990 mac 下的as 好像还不是标准的AT&T 语法?比如`.section .text` 不行,必须加逗号,`.section .text,`
    即使这样,mac 下的很多代码还是跑不通,比如`int $0x80` 只能用linux/i386 架构上,在mac 下不能跑通的。
    hilojack
        3
    hilojack  
       2015-03-05 17:53:40 +08:00
    fix,不是因为`int $0x80`只能用于linux, 而是因为'movl $1,%eax' 中的1 是linux 的系统_exit()调用号, 所以在mac 上跑不通. 我觉得, 如果你的`AT&T` 语法的汇编代码大多基于linux,还是用linux 虚拟机为好。不知道楼主是否是我这种情况
    xieyudi1990
        4
    xieyudi1990  
       2015-03-10 05:11:53 +08:00
    @hilojack 如果是用GNU的as的话不是可以加参数来改语法的吗? 我刚刚看了下:
    [yudi@MBP112 ~]$as --help | grep -i intel
    -mmnemonic=[att|intel] use AT&T/Intel mnemonic
    -msyntax=[att|intel] use AT&T/Intel syntax

    不过的确有很多Linux代码, 特别是那些内联的, 用的是AT&T语法.

    不过我一般都是用NASM/YASM写x86汇编, 这个语法我比较喜欢.

    我一般都是用汇编干脏活, 给C调用. 按照ABI的规则, 然后global导出符号, 然后汇编成ELF的目标文件.o; C那边写个对应的头文件, 然后直接链接就好了.

    好像这个方法目前是主流, 我看到像ffmpeg等工程所有的汇编代码都是用YASM汇编的 (应该也有直接用GNU的, 不过应该只在内联时用下).

    ===========================
    要是直接用汇编在操作系统下写程序, 那你得遵守操作系统的系统调用规则. 每个操作系统的接口都不一样, windows下要调用msvcrt帮你弄 (或者更直接点调用api, 应该也是软trap的, 保护模式下系统调用需要提权), linux下应该也是直接用int来软trap... mac下我不知道, 不过应该也差不多哦, 参考他们的文档.

    学x86汇编还算建议弄个带调试功能的模拟器, 直接写裸机程序跑, 那样比较不错. 比如bochs, qemu这种.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2512 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 02:32 · PVG 10:32 · LAX 18:32 · JFK 21:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.