var jiathis_config = {data_track_clickback:true};
  • 汇编程序组成

    日期:2010-11-13 | 分类:汇编

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://www.blogbus.com/freakrobot-logs/83638465.html

    * 数据段

       --- 数据段声明带有初始值的数据元素
    * bss段
       --- 声明使用0或者NULL值初始化的数据元素
    * 文本段
       --- 所有汇编程序

    GNU风格的模板:
    .section.data
    < initialized data here >
    .section.bss
    < uninitialized data here >
    .section.text
    .globl _start
    _start:
    < instruction code goes here >

    使用gcc进行汇编:
    因为gcc查找的是main标签,所以_start标签和定义标签的.globl都要改成
    .section .text
    .globl main
    main:

    汇编代码:
    使用as + ld:  as -o cpuid.o cpuid.s  &&  ld -o cpuid cpuid.o
    使用gcc编译:gcc -o cpuid cpuid.s

    连接c库函数:
    as -o cpuid.o cpuid.s
    为了链接libc.so.5使用-l参数
    ld -o cpuid -lc cpuid.o
    但这样试图运行的时候依然会产生问题,
    $./cpuid
    bash: ./cpuid: No such file or directory
    $
    问题在于连接器能够解析c函数(printf,exit),但是函数本身没有包含在最终的可执行程序中
    所以动态链接要使用ld -dynamic-linker /lib/ld-linux.so.2 -o cpuid -lc cpuid.o

    分享到:

    历史上的今天:

    IA-32平台 2010-11-13
    Linux Road Map 2010-11-13
    ACPI 2010-11-13

评论啦