首页 > 代码库 > 汇编 Hello World
汇编 Hello World
section .text global _start ;must be declared for linker (ld) _start: ;tell linker entry point mov edx,len ;message length mov ecx,msg ;message to write mov ebx,1 ;file descriptor (stdout) mov eax,4 ;system call number (sys_write) int 0x80 ;call kernel mov eax,1 ;system call number (sys_exit) int 0x80 ;call kernel section .data msg db ‘Hello, world!‘,0xa ;our dear string len equ $ - msg ;length of our dear string
执行命令hi
nasm -f elf hello.asm
ld -s -o hello hello.o
在64位的机器上报错,这是因为代码是32架构的,所以链接的时候要指定32位架构
ld: i386 architecture of input file `hello.o‘ is incompatible with i386:x86-64 output
解决方法指定32位架构
ld -m elf_i386 -s -o hello hello.o
调试
nasm -f elf hello.asm -g -F stabs
-f 指定输出文件格式, -g 激活调试 -F 调试信息格式 gdb 都是stabs
gdb hello
出错
没有符号表被读取。请使用 "file" 命令。
还是有问题
unfortunately, nasm ‘-g‘ switch does not generate proper debug info for gdb; this is nasm bug, I think
nasm 加上-g 似乎是出不了调试信息的
换成下面这样的命令
nasm -f elf -g hello.asm
似乎是没有加上-g 命令的原因
需要执行 gcc -g -o hello hello.o -m32
但是 x64的gcc不行,不能搞定32
只好sudo apt-get install libc6-dev-i386 了。
网上搜到的,最后好用了。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。