4

ソースを持っているベンダー API を使用しています。ブレークポイントを設定でき、うまくヒットしますが、gdb で関数を (その名前で) 呼び出そうとすると、「エントリ ポイント アドレスが不明です」と表示されます。それは意味し、回避策はありますか?グーグルを試しましたが、役に立つものは見つかりませんでした。助けてくれてありがとう。次のステップでは、objdump を使用して関数のアドレスを取得し、それが機能する場合はアドレスを直接呼び出してみることを考えています。しかし、それを行う方法が正確にはわかりません。ここでもガイドしてください。ベンダーライブラリは自分のプログラムと動的にリンクされています

EDIT 1:「info address "function"」を実行した後、「call (*"address")(params)」のように呼び出そうとしましたが、同じエラーが表示されます。関数のアドレスを知っていることに注意してください。

4

1 に答える 1

2

これはあいまいなものです!

Inferior 呼び出しを行う場合、gdb には、作成するダミー スタック フレームを配置する場所に関するいくつかのオプションがあります。あなたの場合、「エントリポイント」を選択しています-基本的に(私は思うに)_startのメモリで、一度実行されてから二度と使用されません。この選択は、アーキテクチャ固有のようです。

あなたの場合、gdb はエントリ ポイントを見つけることができません。これは、「file」コマンドを使用したことがない場合、または実際の実行可能ファイルではなく .o ファイルをデバッグしている場合に発生する可能性がありますが、他のよりあいまいなシナリオでも発生する可能性があるようです。

于 2013-05-26T19:10:19.350 に答える