Quiero un método C simple para poder ejecutar código de bytes hexadecimal en una máquina Linux de 64 bits. Aquí está el programa en C que tengo:¿Cómo obtener el código c para ejecutar el bytecode hexadecimal?
char code[] = "\x48\x31\xc0";
#include <stdio.h>
int main(int argc, char **argv)
{
int (*func)();
func = (int (*)()) code;
(int)(*func)();
printf("%s\n","DONE");
}
El código que estoy tratando de correr ("\x48\x31\xc0"
) obtuve por escribiendo este programa un montaje sencillo (que no tiene que hacer realmente nada)
.text
.globl _start
_start:
xorq %rax, %rax
y luego compilarlo y objdumpándolo para obtener el bytecode.
Sin embargo, cuando ejecuto mi programa C recibo un error de segmentación. ¿Algunas ideas?
Incluso si su segmento de datos es ejecutable o que no han permitido NX, ¿qué esperas que ver esto? Ejecuta una instrucción y luego la instrucción posterior (que no controla) y luego la instrucción después de eso, hasta que alcanza la memoria que no representa el código o código legítimo que desencadena una segfault. –
Tendrá que agregar un código de bytes para un 'ret' porque la llamada a la función indirecta que hace debe ser una' llamada' que empuja la dirección de retorno a la pila. Al menos, esta es mi mejor estimación educada, nunca había visto algo como esto. – Chris
Espero que esto no haga nada, pero quiero que se pueda ejecutar sin fallar. – Nosrettap