以下代码无法按预期工作:
.intel_syntax noprefix
.arch i386
.data
hello_world:
.ascii "Hello world!\n"
hello_world_end:
.equ hello_world_len, hello_world_end - hello_world
.text
.global _start
_start:
mov ebx, 1
mov ecx, hello_world
mov edx, hello_world_len
mov eax, 4
int 0x80
mov ebx, 0
mov eax, 1
int 0x80
当跑过:
as test.s -o test.o
ld test.o -o test
./test
它什么也不输出。当我换行时:
mov ecx, offset hello_world ; added offset
它工作正常。我尝试编译原始代码--32 -march=i386
并链接,-m elf_i386
但它仍然没有输出任何内容。
$ uname -a
Linux ubuntu 3.2.0-38-generic #60-Ubuntu SMP Wed Feb 13 13:22:43 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
我猜这是因为内存模型不像 i386 那样平坦。我可以以某种方式模仿吗?