Как передать массив строк в качестве параметра для функции в ассемблере? Например позволяет сказать, что я хочу, чтобы вызвать функцию execve(), которая выглядит следующим образом:Как передать массив строк в качестве параметра для функции?
int execve(const char *filename, char *const argv[], char *const envp[]);
, так что я это сделать:
test.asmformat 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
Makefile
all:
~/apps/fasm/fasm ./test.asm
Но когда я запускаю свою программу execve(), не удается выполнить запрошенную программу и strace ./test показывает это mes sage:
execve("/bin/ls", [0x6e69622f, 0x736c2f, 0x2e], [/* 0 vars */]) = -1 EFAULT (Bad address)
Как правильно передать переменную args функции execve?
Спасибо :)
Чтобы узнать, как это делается, напишите на C и посмотрите на вывод компилятора. –
Используйте 'lea ebx, [filename]', чтобы переместить адрес метки в регистр. – sivizius