Erro de montagem em linha, frustrando as tentativas de compilação do GCC
-
20-09-2019 - |
Pergunta
Saudações, então.
Tenho algum código que fiz tentativas de compilar usando o GCC, mas minhas tentativas foram frustradas. Alguém mais versado poderia me ajudar com o assunto, talvez haja algo que estou perdendo.
Estou compilando este código na cozinha Linux 2.6.28-15-generic #49-Ubuntu SMP Ter 18 de agosto 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;
}
O erro retornado é:
$ gcc -o shellcode shellcode.c
shellcode.c: Assembler messages:
shellcode.c:4: Error: bad register name `%rdxmovq $0x68732f6e69622fff'
Obrigado a todos.
Solução
Você precisa colocar newlines (\n
) na sua montagem em linha citada. Caso contrário, pensa que
xorq %rdx,%rdx
movq $0x68732f6e69622fff, %rdx
é realmente
xorq %rdx,%rdxmovq $0x68732f6e69622fff, %rdx
Portanto, as duas primeiras linhas (e assim por diante) devem ser mais assim:
"xorq %rdx,%rdx\n"
"movq $0x68732f6e69622fff, %rdx\n"
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow