Как я вижу внутри непрозрачных типов данных? - PullRequest
0 голосов
/ 09 октября 2018

Я знаю, что этот вид противоречит целому ряду непрозрачных типов данных, мне нужно перейти к fpos_t и посмотреть, что это на самом деле (Прежде чем кто-либо что-то скажет, я знаю, что использование этой информации - ПЛОХО, потому что код может бытьизменилось позже. Мне не нужно это для программы, мне нужно это, чтобы остановить зуд любопытства).

Хотя я не знаю, как мне поступить;большая часть информации о непрозрачных значениях, кажется, говорит о концепции сокрытия информации, но очень мало указывает на внутреннюю механику ее и то, как ее отменить.

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Если у вас уже нет исходного кода, не существует практически никакого способа "взломать" непрозрачный тип, не имея понятия о базовом представлении в конкретной системе.Чтобы взломать его, нужно следить за каждым доступом к непрозрачному указателю во время выполнения и посмотреть, куда он идет, а затем начать отгадывать оттуда.

Вместо этого вы можете использовать Google, например, источник glibc на Github.В stdio.h есть условный typedef, который указывает на __fpos_t или __fpos64_t во внутренних заголовках:

__fpos_t.h

typedef struct _G_fpos_t
{
  __off_t __pos;
  __mbstate_t __state;
} __fpos_t;

__fpos64_t.h

typedef struct _G_fpos64_t
{
  __off64_t __pos;
  __mbstate_t __state;
} __fpos64_t;

Не очень захватывающе, но вы можете продолжить отслеживать эти различные типы в Github оттуда и видеть, к чему они сводятся в конце.Целые числа и перечисления, скорее всего.

0 голосов
/ 09 октября 2018

В VC ++ это определяется как

 typedef __int64 fpos_t;

, что, в свою очередь,

typedef long long fpos_t;

Если вы хотите узнать, как это выглядит в ассемблерном коде, то просто напишите пример программы,запустите его в режиме отладки и, во время отладки, откройте Disassembly Window, чтобы посмотреть код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...