簡體   English   中英

在運行任何代碼之前發生分段錯誤

[英]Segmentation Fault happening before any code is run Assembly

我正在嘗試編寫一個將調用execve並生成一個shell的shell代碼程序。 我正在為此課程提供的32位虛擬機中工作。 代碼如下:

section .text

global _start

_start:
;clear out registers
xor eax, eax
xor ebx, ebx
xor ecx, ecx
xor edx, edx
;exacve("/bin/sh",Null,NULL)
;ascii for /bin/sh;
;2f 62 9 6e 2f 73 68 3b
push 0x3b68732f
push 0x6e69622f
mov ebx, esp
mov al, 11
int 0x80
;exit(int status)
movv al, 1
xor ebx, ebx
int 0x80

我使用nasm -f elf -g shell.asm編譯,並使用ld -o shell shell.o鏈接,當我嘗試運行它時,出現了段錯誤。 我嘗試使用gdb來查看出錯的地方,但是,即使在_start + 0處設置了斷點,它也會出現段錯誤。 它說在最后一條代碼指令之后,該地址存在段錯誤。 即,如果最后一行的地址為0x804807c,則分段錯誤在任何代碼有機會運行之前發生在0x804807e。

誰能指出我正確的方向,以便我找出解決方法?

您的代碼中的一個錯誤是,字符串的ascii代碼中沒有0x3b

;exacve("/bin/sh",Null,NULL)
;ascii for /bin/sh;
;2f 62 9 6e 2f 73 68 3b
push 0x3b68732f
push 0x6e69622f

以下代碼可以解決此問題(假設您使用的是Little-endian機器):

;exacve("/bin/sh",Null,NULL)
;ascii for /bin/sh;
;2f 62 99 6e 2f 73 68 00
push 0x0068732f
push 0x6e69622f

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM