Hi folks,

I would like to call write(2) without going through the libc functions. I wrote
this little thing to test, it does not print anything, but friends say
it works just
fine with linux. I did check the addresses and operands in the resulting
binary with objdump, everything has the correct values. What am I doing
wrong ? Feel free to cluebat me to death if I missed some obvious point ...


#include <sys/types.h>
#include <unistd.h>

char hexstr[12] = "0x00000000\n" ;

int main(int argc, char *argv[]){
 unsigned int stack_ptr ;
 unsigned int str_addr ;
 int *page_start ;
 int page[1024] ;
 int i ;
 int __ret ;
 asm("movl %%ebp, %0" : "=r"(stack_ptr)) ;
 str_addr = (unsigned int)hexstr ;
 page_start = (int *)(stack_ptr & ~0xFFF) ;
 for (i = 0 ; i < 8 ; i++){
   switch ((stack_ptr >> (i*4)) & 0xf){
   case 0 :
     hexstr[9-i] = '0' ;
     break ;
   case 1 :
     hexstr[9-i] = '1' ;
     break ;
   case 2 :
     hexstr[9-i] = '2' ;
     break ;
   case 3 :
     hexstr[9-i] = '3' ;
     break ;
   case 4 :
     hexstr[9-i] = '4' ;
     break ;
   case 5 :
     hexstr[9-i] = '5' ;
     break ;
   case 6 :
     hexstr[9-i] = '6' ;
     break ;
   case 7 :
     hexstr[9-i] = '7' ;
     break ;
   case 8 :
     hexstr[9-i] = '8' ;
     break ;
   case 9 :
     hexstr[9-i] = '9' ;
     break ;
   case 10 :
     hexstr[9-i] = 'a' ;
     break ;
   case 11 :
     hexstr[9-i] = 'b' ;
     break ;
   case 12 :
     hexstr[9-i] = 'c' ;
     break ;
   case 13 :
     hexstr[9-i] = 'd' ;
     break ;
   case 14 :
     hexstr[9-i] = 'e' ;
     break ;
   default :
     hexstr[9-i] = 'f' ;
   }
 }
 /*
 write(1, hexstr, 11) ;
 */
 asm volatile ("\n\tint $0x80"
                : "=a"(__ret)
                : "0"(4), "b"(1), "c"(hexstr), "d"(11));

 /*
 for (i = 0 ; i < 1024 ; i++){
   page[i] = page_start[i] ;
 }
 write(1, (char *)page, 4096) ;
 */
 exit(0) ;
}


--
Vincent GROSS
"GUIs normally make it simple to accomplish simple actions and
impossible to accomplish complex actions." --Doug Gwyn (22/Jun/91 in
comp.unix.wizards)

Reply via email to