いつもお世話になっております。
マイコン内のROM/RAM内の任意の変数の値をモニタするPCアプリを作成しようとしています。手順としては下記を考えています。
①ビルドして出来上がったabsファイル(ELF形式)に対して、 objdumpを実行しDWARF情報を取り出す。
②取り出したDWARF情報から、変数のアドレスを求める。
③PCアプリから、求めた変数のアドレスを参照し、 UARTでマイコンのROM/RAMの変数の値を取得する。
mapファイルからでなく、DWARF情報から変数のアドレスを求めるのは、他のマイコンでも同じ方法で、アドレスを求めたいからです。
②を効率よくやる方法をご存知であれば、教えていただけないでしょうか?
例えば、下記のようなネストされた構造体の各メンバや、多次元の配列の各要素のアドレスをDWARF情報から求めたいです。具体例を出すと、struct2.struct1[10][1][2].b[3][1]のアドレスを求めたいです。
何かいい方法はありますか?地道にDWARF情報を解析するしかないのでしょうか。よろしくお願いいたします。
typedef struct{ unsigned char a[10]; unsigned short b[10][10]; unsigned int c; unsigned char d;}struct1_t;
typedef struct{
unsigned char a[10];
unsigned short b[10][10];
unsigned int c;
unsigned char d;
}struct1_t;
typedef struct{ unsigned long e; unsigned char f[10][3][12][3]; float g; double h[40]; struct1_t struct1[34][2][3];}struct2_t;
unsigned long e;
unsigned char f[10][3][12][3];
float g;
double h[40];
struct1_t struct1[34][2][3];
}struct2_t;
struct2_t struct2;
参考にしているサイトhttps://qiita.com/tobira-code/items/de16088be23021e75c74