x86汇编的编译与调试

本文主要介绍在Linux环境下编译和调试汇编代码的方法。

编译

先来一段非常简单的汇编代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
.data
msg: .string "Hello world"
len = . - msg
.text
.global _start
_start:
movl $len, %edx
movl $msg, %ecx
movl $1, %ebx
movl $4, %eax
int $0x80

movl $0, %ebx
movl $1, %eax
int $0x80

上述代码主要做的事情为:

  • 调用系统调用write,向标准输出输出字符串Hello world
  • 调用系统调用exit,退出码为0

我们可以使用以下命令来编译、链接和运行这一段程序(假设源代码名为test.s

1
2
3
4
as -o test.o test.s # 编译
ld -o test test.o # 链接
./test # 运行
echo $? # 打印返回值

调试

调试我们将使用gdb来进行

首先,我们编译时要加入调试用的符号表:

1
2
as -g -o test test.s
ld -g -o test test.o

然后用gdb加载可执行文件

1
gdb ./test

现在就可以开始调试这个程序了。