section .text
global _start
_start:
nop
main:
mov eax, 1
mov ebx, 2
xor eax, eax
ret
我用以下命令编译:
nasm -f elf main.asm
ld -melf_i386 -o main main.o
当我运行代码时,Linux抛出分段错误错误
(我正在使用Linux Mint Nadia 64位)。为什么会产生此错误?
因为ret
是 不是 要退出的Linux,Windows或苹果机的程序的正确方法!!!!
_start
不是函数,因为没有要返回的用户空间调用程序, 所以堆栈上没有返回地址
。用户空间中的执行在进程入口点从此处开始(在静态可执行文件中)。(或者使用动态链接,它在动态链接器完成后跳到此处,但结果相同)。
在Linux / OS X上,堆栈指针指向指向的argc
入口_start
(有关进程启动环境的更多详细信息,请参见i386或x86-64 System
V ABI文档);内核在启动用户空间之前将命令行参数args放入用户空间堆栈内存中。(因此,如果您尝试这样做ret
,则EIP / RIP = argc
=一个小整数,不是有效的地址。如果调试器在地址0x00000001
或其他内容上显示错误,这就是原因。)
对于Windows而言,对于ExitProcess
Linux而言是系统调用- 对于x86,使用int 80H
using
sys_exit
,对于x64而言,使用syscall
using 60
;exit
如果要链接到C库,则从C库进行调用。
32位Linux
mov eax, sys_exit ; sys_exit = 1
xor ebx, ebx
int 80H
64位Linux
mov rax, 60
xor rdi, rdi
syscall
视窗
push 0
call ExitProcess
或Windows / Linux链接到C库
call exit
exit
(与原始退出系统调用或libc不同_exit
),将首先刷新stdio缓冲区。如果printf
从中_start
使用exit
,则即使退出stdout到文件(使stdout成为全缓冲而不是行缓冲),也要确保退出前已打印所有输出。
通常建议,如果使用libc函数,请编写一个main
函数并与gcc链接,以便可以通过常规CRT启动函数调用它ret
。
定义main
为某种东西_start
并不会使其变得特别,main
如果它不像main
由a调用的C
函数_start
那样准备在main
返回后退出,那么使用标签就令人感到困惑。
问题内容: 我尝试使用输入四个浮点数,将它们存储到堆栈中,然后使用将它们复制到寄存器中以供使用。我的问题是,当我尝试输出这4个数字时,程序seg错误出现在。 我认为它与堆栈有关,但是我尝试多次弹出(一次执行多个指令)无济于事。我还是汇编语言的新手,所以使用它对于我来说有点太先进了。 您会注意到我包含了一个名为的文件。它使我能够查看寄存器和堆栈(这就是为什么要有指令的原因。)这是由我的教授提供的,它
如果待升级项目中未使用过 Ret,那么可以忽略本小节。如果是 jfinal 3.2、3.3、3.4 或者更高版本的 jfinal 也可以忽略。 JFinal 3.2 对Ret工具类进行了改进,使其更加适用于json数据格式交互的API类型项目。新版本状态名只有一个:state,取值为:ok/fail,而老版本状态名有两个:isOk与isFail,取值为:true/false。 所以,新旧版本Ret
NASM是一个为可移植性与模块化而设计的一个80x86的汇编器。它支持相当多 的目标文件格式,包括Linux和'NetBSD/FreeBSD','a.out','ELF','COFF',微软16 位的'OBJ'和'Win32'。它还可以输出纯二进制文件。它的语法设计得相当的简 洁易懂,和Intel语法相似但更简单。它支持'Pentium','P6','MMX','3DNow!', 'SSE' an
我在实现合并排序时遇到了分段错误。我已经检查了数组是否超出边界。我想得到一些帮助,找出我哪里出了问题。我尝试过小数组的输入,例如大小为10的数组,我将temp的大小作为静态值( 更新:我只需要改变mid=(低高)/2。
我正在尝试使用 AWS PHP 开发工具包将一个 30 GB 的文件上传到亚马逊 S3。 它适用于最大7GB的文件。上传30 GB文件时,脚本运行约2小时后,我收到以下错误: 将部件上载到多部件上载时发生异常。以下部分出错:-第5部分:在上执行“UploadPart”时出错https://s3.amazonaws.com/Server3-27-SEP-2015/S3_www_1443369605.
我是PHP的新用户。我在一些PHP上工作project.want一些关于PHP会话的帮助。我有login.html页面的形式动作执行login.js.登录时执行,用户名和密码已请求urllogin.php页面检查用户名 我在登录时启动了session_start()。php。我已与print\r(美元会话)进行了核对;对于会话,未在上启动。但这是一个开始。当我搬家的时候。这是行不通的。我在家里查。