Skip to content

Instantly share code, notes, and snippets.

@dbwodlf3
Last active July 16, 2020 07:53
Show Gist options
  • Select an option

  • Save dbwodlf3/328831dda00f341cafb9107ca8da513b to your computer and use it in GitHub Desktop.

Select an option

Save dbwodlf3/328831dda00f341cafb9107ca8da513b to your computer and use it in GitHub Desktop.
mcsemaissue, undefined reference to `main'
#include <stdio.h>
#include <sys/mman.h>
#include <unistd.h>
#include <stdint.h>
#include <string.h>
int getMemoryPermission(void*);
void smcInit(void*);
int main(){
smcInit(main);
uint8_t mcode[] = {'\xe9','\x00','\x00','\x00','\x00'};
uint8_t mcode2[] = {'\x90', '\x90', '\x90', '\x90', '\x90'};
memcpy(&&_branch, mcode2, 5); // this line make undefined `main' problem.
// memcpy(mcode, mcode2, 5);
_branch:
__asm__ __volatile__("_branch:\n"
"jmp _end");
_deadblock:
__asm__ __volatile__("_deadblock:\n"
"nop\n"
"nop\n"
"nop\n"
"nop\n"
"nop\n"
);
printf("Here is Dead Block.\n");
printf("'jmp end' is relative 5bytes jmp instruction.\n");
printf("code is modifed.\n");
__asm__ __volatile__("jmp _return\n");
_end:
__asm__ __volatile__("_end:");
printf("Not Modifed.\n");
_return:
__asm__ __volatile__("_return:");
return 0;
}
int getMemoryPermission(void *addr){
// Move the pointer to the page boundary
int page_size = getpagesize();
addr -= (unsigned long)addr % page_size;
if (mprotect(addr, page_size, PROT_READ | PROT_WRITE | PROT_EXEC) == -1)
{
return -1;
}
return 0;
}
void smcInit(void *addr){
if(getMemoryPermission(addr)==-1){printf("Faield!\n");}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment