Fedora 20 x64 安装NSAM汇编器

到 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

发表评论

电子邮件地址不会被公开。 必填项已用*标注