У меня есть linux CPP скомпилированный двоичный файл. На основании имени класса (символа), как я могу узнать размер символа во время выполнения, память, которую он будет занимать; Используете какой-либо инструмент для разборки? Или любые другие методы?
(Это может указывать на дополнительную память кучи, которая не является моей проблемой. Но член класса, хранящий указатель на кучу, должен быть вычислен).
Двоичный файл должен быть скомпилирован с символами отладки, чтобы найти эту информацию. Вы можете прочитать информацию из отладочных символов 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.
Если в двоичном файле нет символов отладки, вам скорее не повезло. Вам нужно знать место, где код соответствует размеру интересующего вас типа, разбирать бинарный файл и находить эту часть кода.