error de montaje Inline, frustrando intentos de compilación gcc
-
20-09-2019 - |
Pregunta
Saludos, SO.
Tengo algo de código que he hecho intentos de compilar con gcc, pero mis intentos han sido frustrados. Podría alguien más versado que me ayude con el tema, tal vez hay algo que me falta.
Estoy compilando el código de cocina Linux 2.6.28-15-generic # 49-Ubuntu SMP Mar Ago 18 de 2009 19:25:34 GMT 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;
}
El error que se devuelve es:
$ gcc -o shellcode shellcode.c
shellcode.c: Assembler messages:
shellcode.c:4: Error: bad register name `%rdxmovq $0x68732f6e69622fff'
Gracias a todos.
Solución
Es necesario poner saltos de línea (\n
) en su ensamblado en línea citado. De lo contrario, se cree que
xorq %rdx,%rdx
movq $0x68732f6e69622fff, %rdx
es realmente
xorq %rdx,%rdxmovq $0x68732f6e69622fff, %rdx
Así que las dos primeras líneas (y así sucesivamente) deben ser de la misma familia:
"xorq %rdx,%rdx\n"
"movq $0x68732f6e69622fff, %rdx\n"
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow