Hej, mamy taki kod:
#include <stdio.h>
int main ()
{
char *a[2];
a[0] = "ls";
a[1] = "-a";
a[2] = (char *)0;
execve (a[0], a, (char *)0);
}
I teraz to bym chcial w asemblerze, i tutaj mam maly problem, ale dobra:
#include <stdio.h>
int main()
[
asm("xor %eax, %eax \n" "push %eax \n" "push $0x736c2f \n" "push $0x6e69622f \n" "mov %esp, %ebx \n" // "/bin/ls" "push %eax \n" // (char *) 0 "push $0x612d20 \n" // " -a " "push %ebx \n" // "/bin/ls" "mov %esp, %ecx \n" "xor %edx, %edx \n" // (char *)0 "mov $11, %eax \n" "int $0x80 \n" /* exit (1) */ "xor %ebx, %ebx \n" "inc %ebx \n" "mov $1, %eax \n" "int $0x80 \n"
);
}
I gdy ten kod przepuściłem przez strace to tam jest coś takiego:
execve("/bin/ls", ["/bin/ls", umovestr: Input/output error
0x612d20], [/* 0 vars */]) = -1 EFAULT (Bad address)
Gdy dam w komentarz, tą linie:
"push $0x612d20 \n"
To wtedy pójdzie, ale program wtedy będzie odpalany tak:
execve ("/bin/ls", ["/bin/ls"], (char *)0);
A mi chodzi żeby było
execve ("/bin/ls", ["/bin/ls", "-a"], (char *)0);
Help me ? :)
Pozdrawiam.