asm_execve.s:sys_execveシステムコール
.section .data file_to_run: .ascii "/bin/sh" .section .text .globl main main: pushl %ebp movl %esp, %ebp subl $0x8, %esp # array of two pointers. array[0] = file_to_run array[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 # file to execute leal -4(%ebp), %ecx # command line parameters movl $0, %edx # environment block int $0x80 leave ret
メイク:
NAME = asm_execve $(NAME) : $(NAME).s gcc -o $(NAME) $(NAME).s
プログラムが実行されますが、sys_execveと呼ばれていません。
[email protected]:~/project$ make gcc -o asm_execve asm_execve.s [email protected]:~/project$ ./asm_execve [email protected]:~/project$
期待出力は次のとおりです。
[email protected]:~/project$ ./asm_execve $ exit [email protected]:~/project$
このアセンブリプログラムは、次のCコードのように動作することになっている:システムコールのパラメータで間違っ
char *data[2]; data[0] = "/bin/sh"; data[1] = NULL; execve(data[0], data, NULL);
何か?
'strace -e execve'を使ってあなたのプログラム*が実際に作るexecve呼び出しをトレースします。 –