assembly - 如果 nasm 代码遇到 _start 结尾,是否会自动移动到下一个标签?

标签 assembly x86 nasm

我有代码:

global _start

section .text
_start:
        mov ebx,1
        mov ecx,4
label:
        add ebx,ebx
        dec ecx
        cmp ecx,0
        jg label
        mov eax,1
        int 0x80

它返回16,这表明'label'中的代码已运行。但是,我没有告诉它跳转到标签。如果_start结束,代码是否会自动跳转到下一个标签?

最佳答案

缺少返回或跳转指令或进程终止服务调用,是的,执行确实会“失败”到 _start 代码结束后内存中的下一个内容。在本例中,这就是您的标签上名为 label 的代码。

如果代码结束后有数据或未映射的页面,处理器将尝试执行该数据。这很可能会导致无限循环或崩溃或挂起。

关于assembly - 如果 nasm 代码遇到 _start 结尾,是否会自动移动到下一个标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59373865/

相关文章:

c++ - 使用内联汇编器时编译器的详细输出?

memory-management - 16 位和 32 位应用程序之间的最终区别是什么?

linux - 从不对齐 RSP 的函数调用时,glibc scanf 出现段错误

linux - 缺少 gdb 和 nasm 的调试信息

c++ - 链接内核后跳转到保护模式不起作用

c - itoa 实现崩溃?

c++ - 使用 C++ 和 Assembly x64 传递字符串参数

c - 内存分配优化

assembly - 当处理器试图访问一个不存在的物理地址时会发生什么?

assembly - 我如何在 NASM x86 中定义宏