微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么我可以在 .data 部分执行指令? Linux、NASM x86 汇编

如何解决为什么我可以在 .data 部分执行指令? Linux、NASM x86 汇编

我才开始学习汇编,我在书中看到只有 .text 部分可以执行。 那么为什么我可以执行存储在 .data 部分的指令? 代码如下:

global _start

section .data
msg: db "hello world",10
msg_len: equ $-msg

proc_write_and_exit:
        mov eax,4      ;write syscall
        mov ebx,1      ;stdout handle number
        mov ecx,msg
        mov edx,msg_len
        int 80h         ;call program interrupt

        mov eax,1      ;_exit syscall
        mov ebx,0      ;program exit code
        int 80h

section .text
_start: jmp proc_write_and_exit

在 Ubuntu 18.04.4 LTS 上运行。

构建: nasm -f elf execute_data_section.asm && ld -m elf_i386 execute_data_section.o

运行:./a.out

输出:“你好世界”

那么哪些部分真的可以执行,哪些部分不能呢?我可以在哪里阅读以确保?我现在很困惑。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。