gpt4 book ai didi

linux - 调用 _exit 时系统调用返回 07

转载 作者:太空狗 更新时间:2023-10-29 12:05:15 26 4
gpt4 key购买 nike

我在看论文Size Is EverythingSize Is Everything使用内核 3.8.4 x64 nasm gcc-4.7.2 fedora

在 moretiny.asm 中输入

BITS 64

EXTERN _exit
GLOBAL _start
SECTION .text

_start:
push dword 42
call _exit

\>nasm -f elf64 moretiny.asm
\>gcc -Wall -s -nostartfiles -o moretiny.
\>./a.out ; echo $?

7

借助 gdb 的帮助。在 _exit 处中断

(gdb) display /i $pc
1: x/i $pc
=> 0x3a5e0bb750 <_exit>: movslq %edi,%rdx
(gdb) si
0x0000003a5e0bb753 in _exit () from /lib64/libc.so.6
1: x/i $pc
=> 0x3a5e0bb753 <_exit+3>: mov 0x2f56de(%rip),%r10 # 0x3a5e3b0e38
(gdb)
0x0000003a5e0bb75a in _exit () from /lib64/libc.so.6
1: x/i $pc
=> 0x3a5e0bb75a <_exit+10>: mov $0xe7,%r9d
(gdb)
0x0000003a5e0bb760 in _exit () from /lib64/libc.so.6
1: x/i $pc
=> 0x3a5e0bb760 <_exit+16>: mov $0x3c,%r8d
(gdb)
0x0000003a5e0bb766 in _exit () from /lib64/libc.so.6
1: x/i $pc
=> 0x3a5e0bb766 <_exit+22>: jmp 0x3a5e0bb781 <_exit+49>
(gdb)
0x0000003a5e0bb781 in _exit () from /lib64/libc.so.6
1: x/i $pc
=> 0x3a5e0bb781 <_exit+49>: mov %rdx,%rdi
(gdb)
0x0000003a5e0bb784 in _exit () from /lib64/libc.so.6
1: x/i $pc
=> 0x3a5e0bb784 <_exit+52>: mov %r9d,%eax
(gdb)
0x0000003a5e0bb787 in _exit () from /lib64/libc.so.6
1: x/i $pc
=> 0x3a5e0bb787 <_exit+55>: syscall
(gdb)
[Inferior 1 (process 32082) exited with code 07]

好像系统调用返回的代码是 07,我不确定为什么。

最佳答案

x86_64 abi指定参数传递约定。

在这种情况下:

If the class is INTEGER, the next available register of the sequence %rdi, %rsi, %rdx, %rcx, %r8 and %r9 is used12 .

因此您应该使用 %rdi 寄存器而不是压入堆栈。

从您对 _exit 函数调用的单步调试中可以看出这一点。

关于linux - 调用 _exit 时系统调用返回 07,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15787868/

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