Знать размер класса во время выполнения

У меня есть linux CPP скомпилированный двоичный файл. На основании имени класса (символа), как я могу узнать размер символа во время выполнения, память, которую он будет занимать; Используете какой-либо инструмент для разборки? Или любые другие методы?

(Это может указывать на дополнительную память кучи, которая не является моей проблемой. Но член класса, хранящий указатель на кучу, должен быть вычислен).

0

Решение

Двоичный файл должен быть скомпилирован с символами отладки, чтобы найти эту информацию. Вы можете прочитать информацию из отладочных символов DWARF. Вот демонстрация:

Учитывая этот код:

#include <iostream>
struct MyType {
int a, b,c;
float d;
};int main(int argc, char *argv[])
{
struct MyType t;
std::cout << sizeof(t);

}

Вы можете скомпилировать его с g++ -g demo.c

Дамп отладочных символов с

 objdump -W ./a.out

Там будет раздел, как

 <1><13c7>: Abbrev Number: 20 (DW_TAG_structure_type)
<13c8>   DW_AT_name        : (indirect string, offset: 0x8af): MyType
<13cc>   DW_AT_byte_size   : 16
<13cd>   DW_AT_decl_file   : 1
<13ce>   DW_AT_decl_line   : 2
<13cf>   DW_AT_sibling     : <0x13fc>

Там мы идем, MyType имеет размер 16.

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

3

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector