安装GCC和NASM
## 安装64位GCC yum install gcc ## 安装32位GCC库 yum install glibc-devel.i686 yum install ibstdc++.i686 ## 安装nasm yum install nasm测试
1、示例程序
section .text global main main: mov ebx,10 mov eax,20 add eax,ebx ret
2、编译链接
## -g -F stabs用于生成debug ## 64bit程序使用elf64和m64 nasm -f elf32 test.asm -g -F stabs -o test.o gcc -m32 test.o -o test
3、执行
./test; echo $? 30
4、生成与GCC无关的汇编
section .text global _start _start: mov ebx,10 mov eax,20 add ebx,eax ; 系统调用的参数 mov eax,1 ; 系统调用功能号 int 0x80 ; linux系统调用
## -g -F stabs用于生成debug ## 64bit程序使用elf64和elf_x86_64 asm -f elf test.os.asm -g -F stabs -o test.o ld -m elf_i386 test.o -o test
GDB调试linux平台的系统调用是通过int 0x80来实现的,eax寄存器中为调用的功能号,ebx、ecx、edx、esi等等寄存器则依次为参数。
/usr/include/asm/unistd.h
- 简单示例
gdb -tui ./test ##进入调试 b _start ##设置断点break r ##执行run si ##汇编级别单步执行stepi,函数进入 ni ##汇编级别单步执行nexti,函数不进入 c ##继续continue
- layout 命令
作用:用于分割窗口,可以一边查看代码,一边测试。主要有以下几种用法:
layout src(显示源代码窗口)
layout asm(显示汇编窗口)
layout regs(显示源代码/汇编和寄存器窗口)
layout split(显示源代码和汇编窗口)
layout next(显示下一个layout)
layout prev(显示上一个layout)
Ctrl + L(刷新窗口)
Ctrl + x,1(单窗口模式,显示一个窗口)
Ctrl + x,2(双窗口模式,显示两个窗口)
Ctrl + x,a(退出layout)
-
disassemble命令
输出反编译的汇编代码 -
set disassemble-next-line on
调试时输出汇编代码



