0%

NASM 笔记

编译

目前使用的是64位的Ubuntu环境,默认会编译成64位的,编译成32位的在参数上有些差异。

1
2
3
nasm -f elf32 foo.asm -o foo.o # NASM编译成ELF32位目标文件
gcc -m32 -g -c bar.c -o bar.o # GCC编译成32的目标文件
ld -m elf_i386 foo.o bar.o -o foobar # 链接目标文件,生成执行文件

GDB

一些常用的GDB调试的命令

1
2
3
4
5
6
7
8
9
set disassembly-flavor intel # 默认AT&T格式,可以设置为Intel格式
disassemble _start # 反汇编,这一步主要是为了后续设置断点用
break * _start + 10 # 设置断点,此处是_start开始的第10行代码处
run # 执行程序,设置断点后会停在断点处
step # 单步调试,可以简写为s
info registers # 显示寄存器
layout reg # 一般我会使用这个
q # 退出程序
x 0xffffd070 # 查看0xffffd070地址处的内存

参考

ASM 110: Gdb (30 pts)
GDB命令基础,让你的程序bug无处躲藏