fd = open("12-donn_beach.exe", O_RDONLY); for (int i = 0; sections[i].size; i++) { Section sec = sections[i]; void* r = mmap((void*)sec.vma, roundup(sec.size), // めんどくさいので全部フラグ立てる PROT_READ | PROT_WRITE | PROT_EXEC, MAP_ANONYMOUS | MAP_FIXED | MAP_PRIVATE, -1, 0); lseek(fd, sec.off, SEEK_SET); read(fd, (void*)sec.vma, sec.size); }
読んだら nm で調べておいたアドレスの関数を呼ぶ
int r = ((int (*)(const char*))0x40158d)(password); printf("%s\n", r ? "OK" : "FAIL");
厳密には引数の ABI が linux/windows で違うので ABI 変換が必要だけど