- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在看论文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/
回答this question , 有人说要用 _Exit()和其他人说使用 _exit() .有人可以解释两者之间的区别(如果有的话),以及两者的起源吗? 最佳答案 直接来自手册页 here : T
多时候我们需要在程序退出的时候做一些诸如释放资源的操作,但程序退出的方式有很多种,比如main()函数运行结束、在程序的某个地方用exit() 结束程序、用户通过Ctrl+C或Ctrl+break操
我想在 delphi xe3 中使用 c obj 文件。 链接 obj 文件时,显示此错误: `[dcc32 Error] Unit1.pas(149): E2065 Unsatisfied forw
我可以使用 atexit 或析构函数来确定我的应用程序上次终止是否是由于调用 exit() 所致。有什么方法可以确定我的应用程序上次终止是否是由于 _exit() 导致的? 最佳答案 来自man pa
我感兴趣的是我是否可以在 _exit(2) 调用中调用任意函数,这会绕过其他 Hook 架构,所以这对我来说似乎并不容易。 如果这是一个普通的 exit(3) 或 return 语句,显然可以通过 a
很抱歉重复一个已反复提出的问题,但我找不到具体提及内存问题的内容。如果一个进程以 _exit(0) 或 _Exit(0) 终止,它的内存块会丢失给操作系统吗?谢谢,-nuun 最佳答案 对于几乎所有不
我是C和Linux的新手,只是系统调用方面的一个问题: 那么,为什么_exit有一个下划线前缀而其他人没有? 最佳答案 系统调用_exit如此命名,以区别于库函数exit。 在大多数情况下,程序应使用
我一直在尝试使用 ARM mbed 库创建一个组织有序的 makefile 项目模板。我已经解决了一些问题(与头文件路径相关的 see this post)。但是,现在我遇到了链接器的问题。我的目标是
为什么它显示不同的输出???任何人都可以深入解释我。 1. #include #include int main (void) { printf ("Using exit ... \ n");
import os os.exit(0) 有没有办法在操作系统中导入特定模块,而不是导入整个模块? (这可以使我的程序在使用时更有效率。) 最佳答案 from os import _exit 此代码应
所以简短的总结是-我有一个程序递归搜索具有特定扩展名的文件。每次找到一个,它都会制作一个副本,对副本进行一些更改,创建一个补丁(通过使用 diff 和 execvp())并删除原始文件。 我遇到的问题
我想测试一个函数是否在失败时执行 os._exit(2)。我见过许多使用 SystemExit 的 sys.exit() 解决方案。我已经阅读了 Python3和 Python2文档,似乎 os._e
考虑这个代码片段: pid_t cpid = fork(); if (cpid == -1) { perror("fork"); exit(EXIT_FAILURE); } if (c
请看一下这个示例代码,它使用非常成熟的编程模式将 stdout 重定向到管道。 #include #include int main(int argc, char **argv) { in
我在看论文Size Is EverythingSize Is Everything使用内核 3.8.4 x64 nasm gcc-4.7.2 fedora 在 moretiny.asm 中输入 BIT
C99 提供了 _Exit 函数,它“立即”退出,尽管它确实 可能会关闭文件描述符。 Unix/POSIX 通过强制关闭所有 fd 而不刷新(并提供同义词 _exit)来扩展此行为。 当从 C++ 程
所以,我将从子线程退出回到父线程。我正在使用 _exit() 系统调用。我想知道一些事情。其中之一是我的 child 的 _exit 参数是什么。这是我的子进程正在执行的代码: printf("\n*
关于 fork() 有很多问题,但我对这段代码有点困惑。我正在用 c++ 分析一段代码,因为我得到了这个函数。 int daemon(int nochdir, int noclose) { swi
我有一个 AttributeError: '_MainProcess' object has no attribute '_exiting' 来自 Python 应用程序。不幸的是,这段代码必须运行
我有一个 Linux x86-32 GAS 汇编程序这样终止: movl $1, %eax movl $0, %ebx # argument for _exit int $0x80 当我这样退出时,程
我是一名优秀的程序员,十分优秀!