ELFファイルのDWARF情報から、構造体のメンバのアドレスを求める方法

いつもお世話になっております。

マイコン内の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 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

 

 

 

Parents
  • dracenさん、こんにちは。NoMaYです。

    数千個ということは、以下のステップで取得する個々の変数も数千個で、手作業で指定する(入力する)のではない、ということですかね?

    > ③PCアプリから、求めた変数のアドレスを参照し、
    >  UARTでマイコンのROM/RAMの変数の値を取得する。

    それとも、数千個というのは、あくまで候補の数であって、上記ステップで一度に値を取得する変数は数個~十数個なのでしょうか?

Reply
  • dracenさん、こんにちは。NoMaYです。

    数千個ということは、以下のステップで取得する個々の変数も数千個で、手作業で指定する(入力する)のではない、ということですかね?

    > ③PCアプリから、求めた変数のアドレスを参照し、
    >  UARTでマイコンのROM/RAMの変数の値を取得する。

    それとも、数千個というのは、あくまで候補の数であって、上記ステップで一度に値を取得する変数は数個~十数個なのでしょうか?

Children
No Data