mirror of
https://github.com/trustedsec/ELFLoader
synced 2026-06-08 17:56:51 +00:00
49 lines
1.2 KiB
C
49 lines
1.2 KiB
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <stdint.h>
|
|
#include <ELFRunner_include.h>
|
|
|
|
int main(int argc, char** argv, char** envp)
|
|
{
|
|
//int (*ptr)(char*, int*);
|
|
unsigned char* buf = NULL;
|
|
int size = 0;
|
|
FILE* elf = NULL;
|
|
int checkcode = 0;
|
|
char* outputdata = NULL;
|
|
char* argumentdata = NULL;
|
|
int argumentdatalen = 0;
|
|
int outputdataLen = 0;
|
|
|
|
if (argc < 2){
|
|
printf("%s ./path/to/objectfile.o\n", argv[0]);
|
|
return 0;
|
|
}
|
|
elf = fopen(argv[1], "rb");
|
|
if (elf == NULL){
|
|
printf("ERROR: File doesn't exist\n");
|
|
return 0;
|
|
}
|
|
fseek(elf, 0, SEEK_END);
|
|
size = ftell(elf);
|
|
fseek(elf, 0, SEEK_SET);
|
|
buf = calloc(size, 1);
|
|
if (buf == NULL){
|
|
return 0;
|
|
}
|
|
(void)fread(buf, 1, size, elf);
|
|
argumentdata = (char*)unhexlify((unsigned char*)argv[2], &argumentdatalen);
|
|
checkcode = ELFRunner("go", buf, size, (unsigned char*)argumentdata, argumentdatalen );
|
|
if (checkcode == 0){
|
|
outputdata = BeaconGetOutputData(&outputdataLen);
|
|
printf("Output data : %s\n", outputdata);
|
|
free(outputdata);
|
|
}
|
|
|
|
|
|
free(buf);
|
|
fclose(elf);
|
|
return 0;
|
|
}
|
|
|