如何使用GDB打印段:偏移地址?

时间:2013-09-18 10:19:12

标签: assembly x86 gdb

我正在运行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也没有帮助。

如果我omitt %% gs:并且让GDB打印%% ebx引用的内存,它将显示移动到那里的值,但是程序没有在它的内存中找到它。

有没有办法用GDB找出正确的段(基地址)? GDB甚至能够处理分段吗?

0 个答案:

没有答案