outp.c will convert .s files to shell code.
a73e95b1db0a4a21d695a880d2485a1846a07cce539dcd13bafb1682d7bf7492
#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);
}