gpt4 book ai didi

linux asm x86 产生段错误

转载 作者:太空宇宙 更新时间:2023-11-04 09:08:32 25 4
gpt4 key购买 nike

我正在学习一些 linux 汇编程序,我有这个示例程序,它应该调用 write 系统调用并在屏幕上打印“Hello, World!”,但它会产生段错误。我在空闲时间学习,不是作业,我不再上学了!

有人能看出这段代码有什么问题吗?

xor eax,eax
xor ebx,ebx
xor ecx,ecx
xor edx,edx
jmp short string
code:
pop ecx
mov bl,1
mov dl,13
mov al,4
int 0x80
dec bl
mov al,1
int 0x80
string:
call code
db 'Hello, World!'

最佳答案

适合我。这是我所做的(注意,我在 64 位机器上,所以我有一个额外的标志来创建 32 位二进制文​​件):

测试.asm

_start:
xor eax,eax
xor ebx,ebx
xor ecx,ecx
xor edx,edx
jmp short string
code:
pop ecx
mov bl,1
mov dl,13
mov al,4
int 0x80
dec bl
mov al,1
int 0x80
string:
call code
db 'Hello, World!'

命令:

$ nasm -felf test.asm -o test.o
$ gcc -m32 -nostdlib -nostdinc test.o -o test

产生警告,但没关系。

/usr/lib/gcc/x86_64-pc-linux-gnu/4.5.1/../../../../x86_64-pc-linux-gnu/bin/ld: warning: cannot find entry symbol _start; defaulting to 0000000008048080

然后我跑了:

$ ./test

它确实输出了 "Hello, World!"(没有换行符)。没有段错误。

关于linux asm x86 产生段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4455576/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com