Dizgiler dizisinde toplayıcı olarak işlev görmek için parametre dizisini nasıl geçirebilirim? Örneğin Şöyle execve() işlevini aramak istediğiniz Diyelim:İşlev dizisi olarak dizge dizisi nasıl iletilir?
int execve(const char *filename, char *const argv[], char *const envp[]);
yüzden ben bunu:
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
makefile
all:
~/apps/fasm/fasm ./test.asm
Ama programımı çalıştırdığımda(), istenen programı ve strace ./test'i yürütemedi. adaçayı:
execve("/bin/ls", [0x6e69622f, 0x736c2f, 0x2e], [/* 0 vars */]) = -1 EFAULT (Bad address)
Nasıl düzgün "args" geçmek değişken fonksiyonunu execve için?
Teşekkür :)
Bir şeyin nasıl yapıldığını öğrenmek için, C'ye yazın ve derleyici çıktısına bakın. –
Bir etiketin adresini bir kayıt defterine taşımak için 'lea ebx, [dosyaadı]' kullanın. – sivizius