`
java-mans
  • 浏览: 11409454 次
文章分类
社区版块
存档分类
最新评论

linux下的C语言开发(AT&T 汇编语言)

 
阅读更多
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

同样是x86的cpu,但是却可以用不同形式的汇编语言来表示。在window上面我们使用的更多是intel格式的汇编语言,而在Linux系统上面使用的更多的常常是AT&T格式的汇编语言。那什么是AT&T格式的汇编代码呢?我们可以写一个试试看。

.data
	message: .string "hello!\n"
	length = . - message

.text
.global _start

_start:
	movl $length, %edx
	movl $message, %ecx
	movl $1, %ebx
	movl $4, %eax
	int $0x80

	movl $0, %ebx
	movl $1, %eax
	int $0x80
这是一个简单的汇编文件,我们可以分两步进行编译。首先,输入 as -gstabs -o hello.o hello.s, 接着输入ld -o hellohello.o即可。为了验证执行文件是否正确,可以输入./hello验证一下。

在as命令当中,由于我们使用了-gstabs选项,因此在hello执行文件中是包含调试信息的。所以,如果想单步调试的朋友可以输入gdb hello进行调试。

那么,hello执行文件反汇编的代码又是什么样的呢?我们可以输入objdump -S -d hello查看一下。

08048074 <_start>:
.text
.global _start

_start:
        movl $length, %edx
 8048074:       ba 08 00 00 00          mov    $0x8,%edx
        movl $message, %ecx
 8048079:       b9 9c 90 04 08          mov    $0x804909c,%ecx
        movl $1, %ebx
 804807e:       bb 01 00 00 00          mov    $0x1,%ebx
        movl $4, %eax
 8048083:       b8 04 00 00 00          mov    $0x4,%eax
        int $0x80
 8048088:       cd 80                   int    $0x80

        movl $0, %ebx
 804808a:       bb 00 00 00 00          mov    $0x0,%ebx
        movl $1, %eax
 804808f:       b8 01 00 00 00          mov    $0x1,%eax
        int $0x80
 8048094:       cd 80                   int    $0x80
        ret
 8048096:       c3                      ret
    


分享到:
评论

相关推荐

    linux汇编-AT&T的386汇编语言

    在阅读Linux源代码时,你可能碰到一些汇编语言片段,有些汇编语言出现在以.S 为扩展名的汇编文件中,在这种文件中,整个程序全部由汇编语言组成。有些汇编命令出 现在以.c为扩展名的C文件中,在...AT&T的386汇编语言。

    Richard Blum-Professional Assembly Language【汇编语言】

    AT&T汇编语言格式详细讲解,c语言中利用asm嵌入汇编代码,Linux内核研究者必备参考。

    Linux中的汇编语言

    在阅读Linux源代码时,你可能碰到一些汇编语言片段,有些汇编语言出现在以.S为扩展名的汇编文件中,在这种文件中,整个程序全部由汇编语言组成。有些汇编命令出现在以.c为扩展名的C文件中,在这种文件中,既有C语言...

    AT&T Assembly Language

    详细的揭示了linux下的AT&T汇编指令使用方法,给出了各种汇编指令,指令用法,以及相应的例程。其中包括一些如何使用汇编链接C语言库,汇编调用系统调用,汇编执行浮点运算,C语言内嵌汇编等。 Chapter 1: What Is ...

    嵌入式汇编语言学习经验

    自己一直用Windows操作系统,但是我们的项目是在Linux系统上,这两者的汇编语言系统是不同的,windows一直是Intel汇编,而Linux是At&T汇编。为了调试的方便,我决定现在windows中尝试着写点嵌入式汇编,然后再在...

    基于INTEL X86平台的32位多任务操作系统内核设计与实现文档.doc

    汇编语言采用了Nasm和AT&T两种语言编写,用于不同用途。在内核的文件系统当中使用了Minix文件系统,做到了简单实用。该系统利用Windows和Linux交叉编译的形式实现了操作系统内核的各项功能,具有较强的使用价值。 ...

    清华大学Linux操作系统原理与应用

    2.4.1 AT&T与Intel汇编语言的比较 31 2.4.2 AT&T汇编语言的相关知识 32 2.5 Linux系统地址映射示例 33 习题2 35 第3章 进程 37 3.1 进程介绍 37 3.1.1 程序和进程 37 3.1.2 进程的层次结构 38 3.1.3 进程状态 39 ...

    Linux_UNIX 下的命令大全

    Linux UNIX命令大全 常用命令 acctcom 等于进程记帐文件 accton 启动或中止记帐进程 adb 汇编语言调试工具 admin 创建和管理SCCS文件 ar 档案文件和库文件管理程序 as 汇编器 asa 回车控制 at 在指定时间执行...

    c语言编写单片机技巧

    1. C语言和汇编语言在开发单片机时各有哪些优缺点? 答:汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言。其主要优点是占用资源少、程序执行效率高。但是不同的CPU,其汇编语言...

    ARM 嵌入式LINUX 系统构建与驱动开发

    另外如果你开发LINUX就要用ARM-LINUX-TOOLS,不一样,不通用。 5 U-BOOT 大名鼎鼎的BOOTLOADER生成工具,同类的好象还有VIVI(名字很暧昧~~) 生成的BOOTLOADER烧到FLASH里,然后就可以用BOOTLOADER下载 烧写其他了...

    《linux内核注释》

    这本书对AT&T的Unix操作系 统的早期版本的内幕进行了深刻的剖析。 《Liunx内核注释》同样提供了对流行的功能强大的Liunx操作系统的结构和函数实现的内 幕介绍。本书的主要目标是: 1.提供一个最新的和完整的...

    Linux内核注释

    这本书对AT&T的Unix操作系统的早期版本的内幕进行了深刻的剖析。 《Liunx内核注释》同样提供了对流行的功能强大的Liunx操作系统的结构和函数实现的内幕介绍。本书的主要目标是: 1.提供一个最新的和完整的服务器...

    自己动手写操作系统

    本书在详细分析操作系统原理的基础上,用丰富的实例代码,一步一步地指导读者用C语言和汇编语言编写出一个具备操作系统基本功能的操作系统框架。本书不同于其他的理论型书籍,而是提供给读者一个动手实践的路线图。...

    自己动手写操作系统 pdf

    自己动手写操作系统在详细分析操作系统原理的基础上,用丰富的实例代码,一步一步地指导读者用C语言和汇编语言编写出一个具备操作系统基本功能的操作系统框架。本书不同于其他的理论型书籍,而是提供给读者一个动手...

    基于89c51的简易电子琴课程设计

    通过八个按键分别发出do re mi fa so la xi do!的音,并且数码管相应显示1~8这几个数字。另外还有两个按键可以调高、调低每个音的音调。

    minix(1.0-2.0)源码

     全套Minix除了起动的部份以汇编语言编写以外,其他大部份都是纯粹用C语言编写。分为:内核、内存管理及档案管理三部份。  Minix原始是设计给1980年代到1990年代的IBM PC和IBM PC/AT兼容电脑上执行。1.5版也有移植...

    自己动手写操作系统(含源代码).part2

    你需要什么技术基础 在本书中所用到的计算机语言只有两种:汇编和 C语言。所以只要你具备汇编和 C语言的经验,就可以阅读本书。除对操作系统常识性的了解(比如知道中断、进程等概念)之外,本书不假定读者具备其他...

    自己动手写操作系统(含源代码).part1

    你需要什么技术基础 在本书中所用到的计算机语言只有两种:汇编和 C语言。所以只要你具备汇编和 C语言的经验,就可以阅读本书。除对操作系统常识性的了解(比如知道中断、进程等概念)之外,本书不假定读者具备其他...

    缓冲区溢出的原理和实践(Phrack)

    例如syslog,splitvt,sendmail8.7.5,Linux/FreeBSDmount,Xtlibrary,at等等.本文试图解释什么是缓冲区溢出,以及如何利用.汇编的基础知识是必需的.对虚拟内存的概念,以及使用gdb的经验是十分有益的,但不是必需的.我们还...

Global site tag (gtag.js) - Google Analytics