第1页共17页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第1页共17页X86汇编语言学习手记X86汇编语言学习手记(1)1
编译环境OS:Solaris9X86Compiler:gcc3
2Linker:SolarisLinkEditors5
xDebugTool:mdbEditor:vi注:关于编译环境的安装和设置,可以参考文章:Solaris上的开发环境安装及设置
mdb是Solaris提供的kerneldebug工具,这里用它做反汇编和汇编语言调试工具
如果在Linux平台可以用gdb进行反汇编和调试
最简C代码分析为简化问题,来分析一下最简的c代码生成的汇编代码:#vitest1
cintmain(){return0;}编译该程序,产生二进制文件:#gcctest1
c-otest1#filetest1test1:ELF32-bitLSBexecutable80386Version1,dynamicallylinked,notstrippedtest1是一个ELF格式32位小端(LittleEndian)的可执行文件,动态链接并且符号表没有去除
这正是Unix/Linux平台典型的可执行文件格式
用mdb反汇编可以观察生成的汇编代码:第2页共17页第1页共17页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第2页共17页#mdbtest1Loadingmodules:[libc
1]>main::dis;反汇编main函数,mdb的命令一般格式为::dismain:pushl%ebp;ebp寄存器内容压栈,即保存main函数的上级调用函数的栈基地址main+1:movl%esp,%ebp;esp值赋给ebp,设置main函数的栈基址main+3:subl$8,%espmain+6:andl$0xf0,%esp