我得到了下面的汇编代码:
section .text
global _start
_start:
; Store the argument string on stack
xor eax, eax
push eax ; Use 0 to terminate the string
push "bash"
mov al, 0x2f ; Set "/" to the least significant byte of eax
push eax ; Add "/" onto the stack
push "/bin"
mov ebx, esp ; Get the string address
; Construct the argument array argv[]
xor eax, eax ; eax = 0x00000000
push eax ; argv[1] = 0
push ebx ; argv[0] points "/bin/bash"
mov ecx, esp ; Get the address of argv[]
; For environment variable
xor edx, edx ; No env variables
; Invoke execve()
mov al, 0x0b ; eax = 0x0000000b
int 0x80
它应该调用bash shell,但在编译为目标代码并链接生成二进制文件后,它会出现分段错误。操作系统Ubuntu x86.提前感谢!
禁止添加额外的哈希来完成此任务。
1条答案
按热度按时间kpbwa7wx1#
问题是
mov al, 0x2f; push eax
将推送4个字节而不是1个字节。试试看:另外,请确保创建32位二进制文件。