Last active
July 16, 2020 07:53
-
-
Save dbwodlf3/328831dda00f341cafb9107ca8da513b to your computer and use it in GitHub Desktop.
mcsemaissue, undefined reference to `main'
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #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