__NR_execve
syscall ile karıştırıldım. Linux sistem çağrısını öğrendiğimde. Ben execve
kullanmayı biliyorum doğru yolu şu şekildedir: Neden yürütme sistemi herhangi bir argv argümanı olmaksızın "/ bin/sh" çalıştırır, ancak "/ bin/ls" değil?
char *sc[2];
sc[0]="/bin/sh";
sc[1]= NULL;
execve(sc[0],sc,NULL);
Sonra işlev
execve
Kütükleri
EAX
,
EBX
,
ECX
ve
EDX
üzerine argümanlar koyarak sistem çekirdeğin içine almak için
syscall()
arayacak.
A NULL argv[0] was passed through an exec system call.
"/bin/sh"
yeterli parametreler olmadan başarıyla yürütülebilir Acaba neden "/bin/ls"
ederken başarısız: Ben
execve("/bin/sh",NULL,NULL);
kullanmak Ama "/bin/ls"
ile "/bin/sh"
yerine, eğer başarısız olursa Ancak, hala başarılı?
Ben NULL' hiç orada çalışan 'güvenmeyin ediyorum; 'execve' man sayfası, argv'nin argüman dizileri dizisi olduğunu; Bir 'NULL' işaretçisi, bir diziye geçerli bir işaretçi değildir. ('' Nv' '' env'' için iyi görünüyor, daha ziyade 'execv' veya' execvp' komutunu kullanın ya da 'char * p = NULL'' a bir işaretçiyi iletin. –
Diziler, iletilen ilk öğesinin işaretçileridir. işlev argümanları, dolayısıyla NULL kesinlikle burada geçerlidir. – fluter