【发布时间】:2026-02-11 08:25:01
【问题描述】:
asm_execve.s:
.section .data 文件运行: .ascii "/bin/sh" .section .text .globl 主要 主要的: 推%ebp movl %esp, %ebp subl $0x8, %esp # 两个指针的数组。数组[0] = file_to_run 数组[1] = 0 movl file_to_run, %edi movl %edi, -0x4(%ebp) movl $0, -0x8(%ebp) movl $11, %eax # sys_execve movl file_to_run, %ebx # 要执行的文件 leal -4(%ebp), %ecx # 命令行参数 movl $0, %edx # 环境块 诠释 $0x80 离开 ret制作文件:
NAME = asm_execve $(NAME) : $(NAME).s gcc -o $(NAME) $(NAME).s程序已执行,但未调用 sys_execve:
alex@alex32:~/project$ 制作 gcc -o asm_execve asm_execve.s alex@alex32:~/project$ ./asm_execve alex@alex32:~/project$预期输出是:
alex@alex32:~/project$ ./asm_execve $退出 alex@alex32:~/project$这个汇编程序应该像下面的 C 代码一样工作:
字符*数据[2]; 数据[0] = "/bin/sh"; 数据[1] = NULL; 执行(数据[0],数据,空);系统调用参数有问题?
【问题讨论】:
-
使用
strace -e execve来跟踪您的程序实际执行的execve调用。
标签: linux assembly x86 system-calls