Hallo Ich versuche, router Maschinencode in den Speicher zu laden und aus einem C-Programm ausführen, gerade jetzt, wenn das Programm ausgeführt wird bricht es beim Versuch zu laufen mprotect auf den Speicher, um es ausführbar zu machen. Ich bin mir auch nicht ganz sicher, ob der Speicher korrekt ausgeführt wird, wenn er richtig eingestellt ist. Ich bin mit dieser derzeit auf Ubuntu Linux x86 (Vielleicht ist das Problem Ubuntu über Schutz?)Laden von MachineCode aus Datei in den Speicher und Ausführen in C - mprotect Failing
Was ich zur Zeit haben, ist die folgende:
#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;
}
ich die Compiler-Warnung zu tun bekommen:
/tmp/ccVnhHak.s: Assembler messages:
/tmp/ccVnhHak.s:107: Warning: indirect call without `*'
Ich habe das Programm noch nicht bekommen, um diesen Code zu erreichen, also kann ich nicht sehen, ob mein Assembler-Code tut, was er sollte.
Welches Betriebssystem? –
Sorry, das ist für x86 Linux speziell Ubuntu. (Ich vermute Ubuntu's Überschutz könnte etwas damit zu tun haben) – ChartreuseKitsune
Was für ein Fehler ist das? Haben Sie versucht, es einfach unter gdb laufen zu lassen und zuzusehen, was als nächstes passiert? –