Ошибка встроенной сборки, препятствующая попыткам компиляции gcc - PullRequest
4 голосов
/ 01 сентября 2009

Привет, ТАК.

У меня есть код, который я пытался скомпилировать с помощью gcc, но мои попытки были сорваны. Может ли кто-нибудь более искушенный помочь мне с предметом, возможно, что-то мне не хватает.

Я компилирую этот код в Linux Kitchen 2.6.28-15-generic # 49-Ubuntu SMP Tue 18 августа 19:25:34 UTC 2009 x86_64 GNU / Linux.

int
main(void)
{
    __asm__(
            "xorq %rdx,%rdx"
            "movq $0x68732f6e69622fff, %rdx"
            "shr $0x8, %rbx"
            "push %rbx"
            "movq %rsp,%rdi"
            "xorq %rax,%rax"
            "pushq %rax"
            "pushq %rdi"
            "movq %rsp,%rsi"
            "mov $0x3b, %al"
            "syscall"
            "pushq $0x1"
            "pop %rdi"
            "pushq $0x3c"
            "pop %rax"
            "syscall"
    );

    return 0;
}

Возвращаемая ошибка:

$ gcc -o shellcode shellcode.c
shellcode.c: Assembler messages:
shellcode.c:4: Error: bad register name `%rdxmovq $0x68732f6e69622fff'

Спасибо всем.

1 Ответ

9 голосов
/ 01 сентября 2009

Вам нужно вставить новые строки (\n) в указанную встроенную сборку. В противном случае он думает, что

xorq %rdx,%rdx
movq $0x68732f6e69622fff, %rdx

действительно

xorq %rdx,%rdxmovq $0x68732f6e69622fff, %rdx

Итак, первые две строки (и т. Д.) Должны быть примерно такими:

"xorq %rdx,%rdx\n"
"movq $0x68732f6e69622fff, %rdx\n"
...