#include <stdio.h>
/* 

     convert .s to shellcode. typo/teso (typo@inferno.tusculum.edu)

$ cat lala.s
.globl cbegin
.globl cend
cbegin:
        xorl %eax, %eax
  ...
cend:
$ gcc -Wall lala.s outp.c -o lala
$ ./lala
unsigned char shellcode[] =
"\x31\xc0\x31\xdb\x31\xc9\xb3\x0f\xb1\x0f\xb0\x47\xcd\x80\xeb\x1e\x5b"
"\x31\xc0\x88\x43\x07\x89\x5b\x08\x89\x43\x0c\x8d\x4b\x08\x8d\x53\x0c"
"\xb0\x0b\xcd\x80\x89\xc3\x31\xc0\xb0\x01\xcd\x80\xe8\xdd\xff\xff\xff"
"\x2f\x74\x6d\x70\x2f\x74\x73\x74\x65\x73\x6f\x63\x72\x65\x77\x21\x21";
...

*/

extern void     cbegin();
extern void     cend();

int main() {
    char *buf = (char *) cbegin;
    int i = 0, x = 0;

    printf("unsigned char shellcode[] = \n\"");
    for (; (*buf) && (buf < (char *) cend); buf++) {
        if (i++ == 17) i = 1;
        if (i == 1 && x != 0) printf("\"\n\""); 
        x = 1;
        printf("\\x%02x", (unsigned char) *buf);
    }
    printf("\";\n");

printf("
int main() {
    void (*f)();
    f = (void *) shellcode;
    printf(\"%%d\\n\", strlen(shellcode));
    f();
}
");

    return(0);
}

