title: Can some one write assembly code for the c program above that converts into machine code that is less than 100 bytes?
body: <p>I want to overflow the array <code>buffer[100]</code> and I will be passing python script on bash shell on FreeBSD. I need machine code to pass as a string to overflow that buffer <code>buffer[100]</code> and make the program print its hostname to <code>stdout</code>.</p>
  
  <p>Here is the code in C that I tried and gives the host name on the console. :</p>
  
  <pre><code>#include &lt;stdio.h&gt;
  int main()
  {
     char buff[256];
     gethostname(buff, sizeof(buff));
     printf(""%s", buff);
  
    return 0;
  </code></pre>
  
  <p>}</p>
  
  <hr>
  
  <p>Here is the code in assembly that I got using gcc but is longer than I need becuase when I look for the machine code of the text section of the c program it is longer than 100 bytes and I need a machine code for the c program above that is less than 100 bytes.</p>
  
  <hr>
  
  <pre><code>     .type   main, @function
  main:
  pushl %ebp; saving the base pointer
      movl %esp, %ebp; Taking a snapshot of the stack pointer
  subl $264, %esp; 
  addl $-8, %esp
  pushl $256
  leal -256(%ebp), %eax
  pushl %eax
  call gethostname
  addl $16, %esp
  addl $-8, %esp
  leal -256(%ebp), %eax
  pushl %eax
  pushl $.LCO
  call printf
  addl $16, %esp
  xorl %eax, %eax
  jmp .L6
  .p2align 2, 0x90
  .L6:
  leave
  ret
  .Lfe1:
  .size   main, .Lfe1-main
  .ident "GCC: (GNU) c 2.95.4 20020320 [FreeBSD]"
  </code></pre>
  
  <p>A person has already done it on another computer and he has given me the ready made machine code which is 37 bytes and he is passing it in the format below to the buffer using perl script. I tried his code and it works but he doesn't tell me how to do it. </p>
  
  <p>“\x41\xc1\x30\x58\x6e\x61\x6d\x65\x23\x23\xc3\xbc\xa3\x83\xf4\x69\x36\xw3\xde\x4f\x2f\x5f\x2f\x39\x33\x60\x24\x32\xb4\xab\x21\xc1\x80\x24\xe0\xdb\xd0”</p>
  
  <p>I know that he did it on a differnt machine so I can not get the same code but since we both are using exactly the same c function so the size of the machine code should be almost the same if not exactly the same. His machine code is 37 bytes which he will pass on shell to overflow the gets() function in a binary file on FreeBSD 2.95 to print the hostname on stdout. I want to do the same thing and I have tried his machine code and it works but he will not tell me how did he get this machine code. So I am concerned actually about the procedure of getting that code. </p>
  
  <p>OK I tried the methods suggested in the posts here but just for the function gethostname() I got a 130 character of machine code. It did not include the printf() machine code. As I need to print the hostname to console so that should also be included but that will make the machine code longer. I have to fit the code in an array of 100 bytes so the code should be less than 100 bytes. </p>
  
  <p><strong>Can some one write assembly code for the c program above that converts into machine code that is less than 100 bytes?</strong></p>