在我的代码末尾进行系统调用后出现程序集分段错误
- 2024-10-21 09:14:00
- admin 原创
- 80
问题描述:
我正在进行实验,并得到了以下汇编代码,它运行得非常好,只是在我的程序结束之前我收到了“段错误(核心转储)”消息:
GLOBAL _start
%define ___STDIN 0
%define ___STDOUT 1
%define ___SYSCALL_WRITE 0x04
segment .data
segment .rodata
L1 db "hello World", 10, 0
segment .bss
segment .text
_start:
mov eax, ___SYSCALL_WRITE
mov ebx, ___STDOUT
mov ecx, L1
mov edx, 13
int 0x80
无论我是否已经到达ret
终点,我依然能收到信息。
有什么问题?
我正在使用 x86 和 nasm。
解决方案 1:
你不能ret
从头开始;它不是一个函数,堆栈上也没有返回地址。堆栈指针指向argc
进程入口。
正如 nm 在评论中所说,问题在于您没有退出程序,因此执行会遇到垃圾代码,并且会出现段错误。
你需要的是:
;; Linux 32-bit x86
%define ___SYSCALL_EXIT 1
// ... at the end of _start:
mov eax, ___SYSCALL_EXIT
mov ebx, 0
int 0x80
(以上是 32 位代码。在 64 位代码中,您需要mov eax, 231
(exit_group) / syscall
,退出状态为 EDI。例如:
;; Linux x86-64
xor edi, edi ; or mov edi, eax if you have a ret val in EAX
mov eax, 231 ; __NR_exit_group
syscall
相关推荐
热门文章
项目管理软件有哪些?
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件
热门标签
云禅道AD