1
アセンブラで関数のパラメータとして文字列の配列を渡すにはどうすればよいですか?例えば が、私はこのようになります()関数はexecveをコールしたいと言うことができます:関数のパラメータとして文字列の配列を渡すには?
TEST.ASM
format elf executable
entry main
main:
mov eax, 11 ; execve - executes program
mov ebx, filename ; label name is address of string variable
mov ecx, args ; label name is address of array of strings?
mov edx, 0 ; NULL
int 80h
mov eax, 1 ;exit
int 80h
ret
filename db '/bin/ls', 0 ; path to program
args db '/bin/ls', 0, '.', 0, 0 ; array should end with empty string to
; indicate end of array
メイク
all:
~/apps/fasm/fasm ./test.asm
:
int execve(const char *filename, char *const argv[], char *const envp[]);
ので、私はこれを行います
私のプログラムを実行するとexecve()は要求されたプログラムを実行できず、strace ./testはこのmesを表示しますsage:
execve("/bin/ls", [0x6e69622f, 0x736c2f, 0x2e], [/* 0 vars */]) = -1 EFAULT (Bad address)
「args」変数をexecve関数に正しく渡すにはどうすればよいですか?
ありがとうございました:)
何かが行われているか調べるには、C言語で記述し、コンパイラの出力を見てください。 –
'lea ebx、[filename]'を使って、ラベルのアドレスをレジスタに移動します。 – sivizius