我非常熟悉DOS中的DEBUG.COM
。我刚才需要使用gdb
,但我被困住了。我确信gdb
功能更强大,更强大,但我只需要有效地逐步完成一段代码(不是由任何特定语言生成),并且可以很好地查看寄存器和选定的内存位置。什么是gdb
相当于DEBUG的:
U - unassemble (from select memory location)
D - dump
R - shows (selected) registers
T - executes instruction at current IP
P - step over
在我甚至可以检查寄存器之前, gdb
似乎需要run
作为第一步。但是我希望在我想要运行之前看到第一条指令是什么。如果我不知道它在哪里,我不能在第一条指令上设置断点。这对我来说是一个鸡和蛋的问题。我必须遗漏一些基本的东西。
答案 0 :(得分:1)
我不知道DEBUG,但也许我可以帮助解决你的gdb问题。不过,您可能最好还是阅读gdb教程。您还可以使用gdb help
命令查看任何命令的更多详细信息,例如help disassemble
。
您的问题似乎集中在低级别的程序集调试上。 gdb是一个多级调试器,我的意思是它可以在各个级别工作;我会说从根本上说它是一个源级调试器,但它也可以在汇编级别运行。
unassemble
。 gdb等价物可能是disassemble
。
dump
。我不知道这是做什么的。如果它转储内存,那么你需要gdb x
命令。
R
。尝试info regs
,或者您可以使用名称打印选定的注册表,例如print $rax
。
T
。要执行单个汇编指令si
。
P
。请参阅gdb ni
命令。
对于第一条指令,您需要了解有关该平台的一些详细信息。在Linux上,第一条指令位于_start
,因此您需要break *_start
。