如果 nasm 代码遇到 _start 的结尾,它会自动移动到下一个标签吗? [复制]
Posted
技术标签:
【中文标题】如果 nasm 代码遇到 _start 的结尾,它会自动移动到下一个标签吗? [复制]【英文标题】:Does nasm code automatically move to the next label if it meets the end of _start? [duplicate] 【发布时间】:2019-12-17 12:02:23 【问题描述】:我有代码:
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
本身不是一个函数(它没有被调用,因此堆栈上没有返回地址),但重复项说明标签不会影响生成的机器代码;执行只是通过他们。 asm 标签类似于 goto 的 C 标签,而不是函数范围。
【参考方案1】:
缺少返回或跳转指令或进程终止服务调用,是的,执行确实“落入”到您的 _start 代码结束后内存中的下一个内容。在这种情况下,这就是您标签上名为 label 的代码。
如果在代码结束后有数据,或未映射的页面,处理器会尝试执行该操作。这很可能会导致无限循环或崩溃或挂起。
【讨论】:
以上是关于如果 nasm 代码遇到 _start 的结尾,它会自动移动到下一个标签吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
我可以在 MacOS 的 _start 处的代码中执行 `ret` 指令吗? Linux?