Geçtiğimiz günlerde gcc'nin inline derlemesine girdim ve temel montaj bilgisine sahip oldum, bir ya da daha fazla argümanla basit bir sys_execve yapmaya çalışana kadar syscall'leri nasıl iyi yapılacağını anladım. Sistem çağrısı execve, herhangi bir ek parametreyi geçirmiyorsa iyi çalışır ve herhangi bir dosyayı iletmeye çalışırken parametreler olmadan çalıştırılabilir.Inline assembly'ı çalıştırın
#include <stdio.h>
char *argv[]={"/bin/echo","parameter test", NULL};
int main(){
__asm__ volatile ("int $0x80"
:
:"a"(11), // syscall number (execve)
"b"(argv[0]), // filename
"c"(argv), // arguments
"d"(0)); // env
return 0;
}
ben
execve(argv[0], argv, NULL);
ile bu test ettik ve beklendiği gibi çalıştı gibi yanlış gidebileceğini hiçbir fikrim yok.
[sys_execve] için api'ye bakın (http://docs.cs.up.ac.za/programming/asm/derick_tut/syscalls.html) Parametreleri doğru yaptığınızdan emin değilim. Ayrıca, x64 için mi derliyorsunuz? Eğer öyleyse, int 0x80 kullanmanız gerekmiyor. –
Ben x64 için derleme am ve herhangi çalıştırılabilir ben işlere devam etmek deneyin beri benim şimdiki ilerlemeyle, dosya adı bölümü, doğrudur. Takıldığım kısım ona herhangi bir parametre veriyor. Neyi geçmek zorunda olduğumu belirlemek için kullanıcı [this] (http://syscalls.kernelgrok.com/). – LazyShpee