4

私は POK を実行しており、POK はパーティション内で RTEMS を実行しています。システムは x86 セグメントを積極的に利用していますが、GDB にこれを考慮するように指示する方法がわかりません。

次のインライン asm コードを実行すると、EIP (コメントを参照) が正しい場所に配置されます。正しい SS (0x23) をロードし、この場所を gdb で確認すると、0x00000000 が表示されます。それを EAX にロードし直して、'info reg' で EAX をチェックすると、正しい EIP アドレスが表示されます。

"movl 56(%1), %%ebx          \t\n" //move user esp address to register

"movl 60(%1), %%eax          \t\n"
"movl %%eax , %%gs           \t\n" // move user's SS to gs register

"movl 44(%1), %%eax          \t\n" //move eip to register
"movl %%eax , %%gs:(%%ebx)   \t\n" // move eip to user esp

%GS は GDT へのオフセットであるため、GDT を見つけてメモリ セグメントのベース アドレスを自分で再構築しようとしましたが、GDB も役に立ちませんでした。

%%gs: を省略し、%%ebx によって参照されるメモリを GDB に出力させると、そこに移動された値が表示されますが、プログラムはそのメモリ内でそれを見つけられません。

GDB で正しいセグメント (ベース アドレス) を見つける方法はありますか? GDB はセグメンテーションを処理することさえできますか?

4

0 に答える 0