MakerFace / assembly

a study project for assmbly

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

[toc]

编译汇编代码

  1. 编译生成中间文件

    nasm --help # 查看支持的输出格式
    nasm -f elf64 -o obj/main.o main.s
  2. 链接生成可执行文件

    ld -m # 查看支持的仿真平台
    ld -m elf_x86_64 -s -o bin/main obj/main.o

    链接printf失败:

    undefined reference to `printf'

    可以使用ld链接,也可以使用 gcc 链接

    1. 使用 ld

      第一个问题是:在 64 位架构上,试图生成 32 位的可执行文件,nasm -f elf 可以生成 32 位的 elf(-f elf64可以生成 64 位的中间文件)。ld默认生成 64 位可执行文件,因此报错。可以指定-f elf_i386生成 32 位中间文件。

      此外,还可以指定入口点,ld默认寻找_start,可以通过添加-e main改变入口点(兼容 gcc)。

      第二个问题是:想用 C 的库函数printf,但是未定义的引用。通过在ld中添加参数-lc来指示它链接 c 语言库,并且还需要告诉 ld 使用动态链接库(貌似没用到,删除后还能用,删去后不能执行:cannot execute binary file)。

      ld -melf_i386 -o bin/main obj/main.o -lc
    2. 使用 gcc

      gcc -m32 obj/main.o -o bin/main

      没成功,报了_start重定义的错。

  3. 调试

    -m32对应 elf,elf64 不知道对应啥。。。 要把代码中_start 改为 main,不然找不到对应该执行入口。 此外,每一个函数结束后都要ret,不然就 core dump

    gcc -g -m32 -o bin/main obj/main.o

寄存器

registers

系统调用

system call

寻址模式

addressing modes

变量和常量

variables&constant

算术指令

arithmetic

逻辑指令

logical instructions

条件

conditions

循环

loop

数字

numbers

字符串

string

数组

array

程序

Procedures

文件管理

file

内存管理

memory

一些代码

x86汇编代码

教程

汇编指南

About

a study project for assmbly


Languages

Language:Assembly 100.0%