raghu2383
August 24th, 2008, 04:42 AM
I was trying to call ioctl using inline assembly with system interrupt.
void main()
{
int i, res;
int s = 0;
s = socket(AF_INET,SOCK_STREAM,0);
struct ifreq ifr;
struct sockaddr_in *sin = (struct sockaddr_in *) &ifr.ifr_addr;
char * ip;
ifr.ifr_ifindex = 1;
// res = ioctl (s, SIOCGIFNAME, &ifr);
// printf("\n first res %d", res);
// res = ioctl(s, 35088, &ifr);
// printf("\n second result %d", res);
__asm__("sub $12,%%esp\n"
"movl %%edx,(%%esp)\n"
"movl $35088,4(%%esp)\n"
"movl %%ecx,8(%%esp)\n"
"movl $54,%%eax\n" // FOr IOCTL
"movl %%esp,%%ebx\n"
"int $0x80\n"
"add $12,%%esp\n"
:"=a" (res)
:"d" (s), "c" (&ifr)
);
printf("%d", res);
return;
}
The assembly code returns -9, which is an error. Can someone help me out with this code?
void main()
{
int i, res;
int s = 0;
s = socket(AF_INET,SOCK_STREAM,0);
struct ifreq ifr;
struct sockaddr_in *sin = (struct sockaddr_in *) &ifr.ifr_addr;
char * ip;
ifr.ifr_ifindex = 1;
// res = ioctl (s, SIOCGIFNAME, &ifr);
// printf("\n first res %d", res);
// res = ioctl(s, 35088, &ifr);
// printf("\n second result %d", res);
__asm__("sub $12,%%esp\n"
"movl %%edx,(%%esp)\n"
"movl $35088,4(%%esp)\n"
"movl %%ecx,8(%%esp)\n"
"movl $54,%%eax\n" // FOr IOCTL
"movl %%esp,%%ebx\n"
"int $0x80\n"
"add $12,%%esp\n"
:"=a" (res)
:"d" (s), "c" (&ifr)
);
printf("%d", res);
return;
}
The assembly code returns -9, which is an error. Can someone help me out with this code?