Hola, estoy tratando de cargar el código máquina sin procesar en la memoria y ejecutarlo desde un programa C, ahora cuando el programa se ejecuta se rompe al intentar ejecutar Protege en la memoria para que sea ejecutable. Tampoco estoy completamente seguro de que si la memoria se establece correctamente se ejecutará. Actualmente estoy ejecutando esto en Ubuntu x86 Linux (Tal vez el problema es la sobreprotección de Ubuntu?)Cargando MachineCode From File en la Memoria y Ejecutando en C - mprotect Failing
Lo que tengo actualmente es la siguiente:
#include <memory.h>
#include <sys/mman.h>
#include <stdio.h>
int main (int argc, char **argv)
{
FILE *fp;
int sz = 0;
char *membuf;
int output = 0;
fp = fopen(argv[1],"rb");
if(fp == NULL)
{
printf("Failed to open file, aborting!\n");
exit(1);
}
fseek(fp, 0L, SEEK_END);
sz = ftell(fp);
fseek(fp, 0L, SEEK_SET);
membuf = (char *)malloc(sz*sizeof(char));
if(membuf == NULL)
{
printf("Failed to allocate memory, aborting!\n");
exit(1);
}
memset(membuf, 0x90, sz*sizeof(char));
if(mprotect(membuf, sz*sizeof(char), PROT_EXEC | PROT_READ | PROT_WRITE) == -1)
{
perror("mprotect");
printf("mprotect failed!!! aborting!\n");
exit(1);
}
if(!(fread(membuf, sz*sizeof(char), 1, fp)))
{
perror("fread");
printf("Read failed, aborting!\n");
exit(1);
}
__asm__
(
"call %%eax;"
: "=a" (output)
: "a" (membuf)
);
printf("Output = %x\n", output);
return 0;
}
me pongo la advertencia del compilador:
/tmp/ccVnhHak.s: Assembler messages:
/tmp/ccVnhHak.s:107: Warning: indirect call without `*'
No he conseguido que el programa llegue a este código todavía, así que no puedo ver si mi código de ensamblador está haciendo lo que debería.
¿Qué sistema operativo? –
Disculpe, esto es para Linux x86 específicamente Ubuntu. (Supongo que la sobreprotección de Ubuntu podría tener algo que ver con eso) – ChartreuseKitsune
¿Qué tipo de falla es? ¿Has intentado simplemente ejecutarlo bajo gdb y viendo qué pasa después? –