第一编:汇编基础

作者: 铁甲万能狗 | 来源:发表于2019-08-20 17:47 被阅读0次

前言:

有时,我们跟Unix/Linux打交道,难免会碰到汇编语言写的的源文件,特别是很多时候C/C++编译器 解析出来的汇编源文件看不懂就一脸懵逼了。于是笔者对常用的命令过一遍。本系列随便不会深入探讨汇编语言。只是简易介绍一些汇编语言中可能碰到的常用的命令和概念。

Unix/Linux天然集成了汇编语言的编译器nasm,笔者写这遍随笔时用的机器ubuntu x86_64

以下是以一个典型的Hello World程序开遍,在unix/linux使用你最喜欢的编辑器敲入以下代码

/*hello.asm*/
section .data
        text db "Hello World",10
section .text
        global _start
_start:
        mov rax,1
        mov rdi,1
        mov rsi,text
        mov rdx,14
        syscall
        mov rax,60
        mov rdi,0
        syscall

编译和连接

/*elf64代表这个是一个64位的汇编程序*/
//编译
nasm -f elf64  -o hello.o  hello.asm
//链接
ld hello.o -o hello 
运行示意图

语法简单解析

hello world

db 是汇编语言中的关键字,代表“定义字节(define bytes)”,类似与C/C++中的字符串序列,它意味着我们将定义一些原始字节数据插入到我们的代码中。

"Hello World",10:这是我们定义的数据字节,文本字符串中的每个字符都是单个字节。“10”是换行符,就是C/C++中的'\ n'字符。

"text":这是一个分配给内存中地址的名称,该名字保存着一个指向字符串序列的内存地址。这类似于C中的指针变量。每当我们在代码中使用“text”时,编译代码时,编译器将检测该数据在内存中的实际位置并替换所有未来 带有该内存地址的“text”实例.

备注:由于我们在汇编语言中无法像C/C++直接使用'\n',所以使用ascii的字符值10表示

相关文章

  • 第一编:汇编基础

    前言: 有时,我们跟Unix/Linux打交道,难免会碰到汇编语言写的的源文件,特别是很多时候C/C++编译器 解...

  • ARM64汇编入门 - 汇编基础

    ARM64汇编入门 - 汇编基础ARM64汇编入门 - 汇编基础

  • <安全攻防之汇编基础>

    &关于汇编基础请点击 <汇编一> <汇编二> <汇编三> <汇编四> <汇编五> <汇编六> <汇编七> <汇编八...

  • 汇编学习笔记(一)

    基础知识 汇编语言,有 3 类指令组成: 汇编指令:机器码的助记符,有对应的机器码。 伪指令:没有对应机器码,由编...

  • <<汇编语言>>第1章笔记

    第一章 基础知识 汇编语言基本概念 汇编指令是机器指令便于记忆的书写格式,通过编译器把汇编指令对应到机器指令,汇编...

  • 前言

    前言 本书作为编程达人系列汇编\C语言教材的第一本入门教材,讲述的内容是进制、汇编基础、C语言基础语法。本书并没有...

  • 第二章 汇编基础

    第二章汇编基础 汇编部分讲解了汇编基础知识,为了帮助大家理解,书中使用了大量的图文和例题。 汇编是通往编程的大门,...

  • iOS汇编

    iOS逆向之旅(基础篇) — 汇编(一)— 汇编基础[https://www.jianshu.com/p/19a2...

  • 编写完整的汇编程序

    第一个完整的汇编程序 前面的实验都是利用Debug程序进行模拟测试的,并没有编写一个完整的汇编程序 使用汇编语言编...

  • 从 简单汇编基础 到 Swift 不简单的 a + 1

    从 简单汇编基础 到 Swift 不简单的 a + 1从 简单汇编基础 到 Swift 不简单的 a + 1

网友评论

    本文标题:第一编:汇编基础

    本文链接:https://www.haomeiwen.com/subject/mcrpsctx.html