ATT汇编代码
格式:指令 源操作数 ,目的操作数 如“movl $8 , %eax”
以演示1005.s为例
一、汇编,输入指令“as -gstabs 1005.s -o 1005.o”-“objdump -d 1005.o”将汇编代码转变成机器指令,得到如下界面
其中冒号前面的数表示首地址的序号,冒号后面的第一行是 操作的机器指令
二、链接,输入指令“ld 1005.o -o 1005”-“objdump -d 1005”,得到如下界面
其中冒号前面的数表示的是该指令存储单元的首地址
三、运行,输入“./1005”(其中“./”表示目录的意思);输入“gdb -q 1005”进入调试,“b *_start+1”将断点设置在程序第六行(nop时程序还没开始执行操作)
四、开始运行程序,此时断点在第六行
输入“info reg”查看寄存器内的数据
此时还没有对寄存器进行操作,故寄存器为初始状态
输入“n”或者“next”(当没有函数的时候step与next功能相同)继续运行程序,每运行一次就查看一次寄存器内的数据就可以大概知道这段汇编代码时怎么执行操作的了
可以看出,此时寄存器eax中放入了立即数4
可以看出,此时寄存器ebx中放入了立即数1
可以看出,此时寄存器ecx中放入了立即数5
可以看出,此时寄存器edx中放入了立即数13
可以看出movl %eax,%ebx操作为将寄存器eax中的值复制到ebx中去
可以看出,将立即数1送入到了寄存器eax中
可以看出,将立即数0送入到了寄存器ebx中
程序运行到碰见int $0x80即中断演示完成