max*_*rez 1 linux x86 assembly nasm
对不起,我是汇编代码的新手.我编码这个线条
section .text
global _start
_start:
nop
main:
mov eax, 1
mov ebx, 2
xor eax, eax
ret
Run Code Online (Sandbox Code Playgroud)
我用这些命令编译:
nasm -f elf main.asm
ld -melf_i386 -o main main.o
Run Code Online (Sandbox Code Playgroud)
当我运行代码时,Linux抛出了分段错误错误(我正在使用Linux Mint Nadia 64位).为什么会产生这个错误?
提前致谢
因为ret 不是在Linux,Windows或Mac中退出程序的正确方法!
对于Windows而言ret,Linux是系统调用 -
对于x86 _start使用argc,或者_start使用retfor 64Bit或者0x00000001如果要链接到C库,则从C库调用.
32位Linux
mov eax, sys_exit ; sys_exit = 1
xor ebx, ebx
int 80H
Run Code Online (Sandbox Code Playgroud)
64位Linux
mov rax, 60
xor rdi, rdi
syscall
Run Code Online (Sandbox Code Playgroud)
视窗
push 0
call ExitProcess
Run Code Online (Sandbox Code Playgroud)
Windows/Linux链接到C库
call exit
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3059 次 |
| 最近记录: |