Я могу проверить точку входа моего двоичного файла с помощью «$ readelf cbinary -a» и через код. Но как проверить его точку входа виртуального adr, когда двоичный файл mmaped, а затем прыгать туда?перейти, перейти к точке входа mmaped ELF двоичный
int fd;
int PageSize;
char *fileName = "/home/dssiam/workspace_eclipse/hello/src/cprog";
if ((PageSize = sysconf(_SC_PAGE_SIZE)) < 0) {
perror("sysconf() Error=");
}
if ((fd = open(fileName, O_RDWR, S_IXUSR | S_IXGRP | S_IXOTH)) == -1)
{
perror("err open file:");
exit(1);
}
else
{
fd = open(fileName, O_RDWR, S_IXUSR | S_IXGRP | S_IXOTH);
}
void *address;
int len;
off_t my_offset = 0;
len = PageSize*3; //Map one page
address = mmap(NULL, len, PROT_WRITE, MAP_SHARED, fd, my_offset);
if (address == MAP_FAILED)
{
perror("mmap error. ");
}
lseek(fd, 24, SEEK_SET);
unsigned long entry_point;
read(fd, &entry_point, sizeof(entry_point)); //IT RETURN entry point adr of my binary at "/home/dssiam/workspace_eclipse/hello/src/cprog" but not in VM
printf("entry: 0x%lx\n", entry_point);
close(fd);
void *ptr = (void *)0x80484b0; // 0x80484b0 - entry_point vaddress
goto *ptr; //no jump here
так что я могу перейти к началу моей основной программы, но я не могу перейти к двоичному «cprog» хранятся на моем жестком диске и mmaped области тоже. любая помощь будет оценена.
Это не действительный C. – Olaf
Случай с проблемой XY (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)? – davmac