Проблема ... в зависимости от того, где Map это называется либо работает, либо Segfaults, даже не выполняя ничего от Main.
Код: Выделить всё
#include
#include
#define end 0x10007fff7fff
#define start 0x02008fff7000
#define MAPFLAGS (MAP_PRIVATE | MAP_FIXED | MAP_ANON | MAP_NORESERVE)
extern "C" {
void map()
{
void *ret;
uintptr_t size = end - start + 1;
ret = mmap((void*) start, size, PROT_READ | PROT_WRITE, MAPFLAGS, -1, 0);
}
}
< /code>
2.cpp
#include
extern "C" void map(void);
extern "C" void* malloc(size_t usize)
{
// map(); // uncommenting this and commenting out in 1.cpp works
void* ptr = (void*) 0x8003fffb000; // test address which falls b/n
*(char*)ptr = 0xab;
return ptr;
}
< /code>
3.cpp
#include
#include
#include
#include
extern "C" void map(void);
int main()
{
puts("Inside main");
map();
void* ptr = NULL;
ptr = (void*) malloc(6); // returns 0x8003fffb000 address which should be mapped eariler
*(char*) ptr = 0xef;
printf("%x\n", *(char*)ptr);
return 0;
}
< /code>
для создания: < /p>
clang++ -c 1.cpp 2.cpp 3.cpp -g
clang++ 1.o 2.o 3.o -g
Когда я использую Clang/GCC вместо Clang ++/G ++, он работает в обоих случаях. Я понятия не имею, что происходит. Я пытаюсь внедрить игрушечную версию адреса Адреса, следовательно, перехватываю вызовы Malloc для настройки памяти тени во время выполнения.
Подробнее здесь: https://stackoverflow.com/questions/794 ... ide-custom