创建个人网站的步骤,洛阳网站建设建站系统,校园网站建设的感受论文,wordpress分类信息模板对于一个程序员来说#xff0c;调试是很重要的#xff0c;可以节约找到bug的时间#xff0c;不过以前在linux下一直是对c进行调试的#xff0c;今天突然要对汇编进行调试还真不知道怎么调#xff0c;特别是对linux下调试汇编程序基本没搞过。记得以前上课学masm时#xf… 对于一个程序员来说调试是很重要的可以节约找到bug的时间不过以前在linux下一直是对c进行调试的今天突然要对汇编进行调试还真不知道怎么调特别是对linux下调试汇编程序基本没搞过。记得以前上课学masm时用的是debug貌似映像中对汇编挺难调试的。于是就在网上查了下在linux下调试nasm汇编程序的资料看起来比debug简单点。 1 写和编译源文件 首先准备个hello.asm文件这个学语言必编的程序代码如下 section .data
msg:db hello, world, 10
len equ $-msgsection .textglobal main
main:mov edx, lenmov ecx, msgmov ebx, 1mov eax, 4 直接使用sys_write系统调用int 0x80mov ebx, 0mov eax, 1int 0x80 然后直接敲命令nasm -f elf -l hello.lst -g hello.asm-f elf是表示生产elf格式的目标文件-g 是生产调试信息到目标文件-l hello.lst对应的是指令和数据在段中偏移量不要这个也可以。然后直接用命令gcc -g -o hello hello.o连接生成可执行文件这个和c是一样的。注意在源代码中加 global main
main: 开始我就没加用gcc连接的时候直接报下面的错误 其实这很正常因为程序的入口函数是main就像c中我们要写个main函数一样gcc连接器在连接的时候就是找这个main标号其实在目标代码中它就是一个符号名。 2 调试 和调试c语言一样直接用gdb hello命令进入调试。 2.1 用list命令查看代码 2.2 将main设置为断点 2.3 运行程序然后程序直接到main出停下 2.4 查看此时寄存器的值 2.5 运行一条指令用nexti,而next是运行一条语句。 从上面可以看到edx的值已经改为13了。 2.6 反汇编特点地址的代码。不过要先用命令set disassembly-flavor intel设置反汇编后显示什么类型的汇编代码默认是ATT类型的。左边的表示代码执行处。 2.7 显示内存中的数据。也可以用来查看代码 2.8 打印某个寄存器的值 3 总结 感觉用gdb调试比在windows下用debug更方便些不过汇编的调试才刚开始学还有很多不懂的好在在gdb里对于不懂的命令可以中help 命令来查看以后再慢慢加强。