到 http://www.nasm.us/ 下载最新代码 然后解压,执行: ./configure make sudo make install sudo yum install glibc.i686 sudo yum install libstdc++.i686 sudo yum install glibc-devel.i686 vi hello.asm 输入: ; hello.asm section .data ; 数据段声明 msg db "Hello, world!", 0xA ; 要输出的字符串 len equ $ - msg ; 字串长度 section .text ; 代码段声明 global main ; 指定入口函数 main: ; 在屏幕上显示一个字符串 mov edx, len ; 参数三:字符串长度 mov ecx, msg ; 参数二:要显示的字符串 mov ebx, 1 ; 参数一:文件描述符(stdout) mov eax, 4 ; 系统调用号(sys_write) int 0x80 ; 调用内核功能 ; 退出程序 mov ebx, 0 ; 参数一:退出代码 mov eax, 1 ; 系统调用号(sys_exit) int 0x80 ; 调用内核功能 执行汇编器: nasm [-g] -f elf hello.asm -g 是生产调试信息到目标文件 执行链接器: gcc -m32 [-g] -o hello hello.o 执行最终输出的可执行程序: ./hello 将输出: Hello, world! 调试: gdb hello 用 list 命令查看代码: (gdb) list 1 ; hello.asm 2 section .data ; 数据段声明 3 msg db "Hello, world!", 0xA ; 要输出的字符串 4 len equ $ - msg ; 字串长度 5 section .text ; 代码段声明 6 global main ; 指定入口函数 7 main: ; 在屏幕上显示一个字符串 8 mov edx, len ; 参数三:字符串长度 9 mov ecx, msg ; 参数二:要显示的字符串 10 mov ebx, 1 ; 参数一:文件描述符(stdout) (gdb) list 11 mov eax, 4 ; 系统调用号(sys_write) 12 int 0x80 ; 调用内核功能 13 ; 退出程序 14 mov ebx, 0 ; 参数一:退出代码 15 mov eax, 1 ; 系统调用号(sys_exit) 16 int 0x80 ; 调用内核功能 将 main 设置为断点: (gdb) b main Breakpoint 1 at 0x80483f0 运行程序,然后程序执行到 main 处停下: (gdb) r Starting program: /home/li/hello Breakpoint 1, 0x080483f0 in main () Missing separate debuginfos, use: debuginfo-install glibc-2.18-14.fc20.i686