GDB跨越命令

我有以下C代码:

#include  #include  #define SECTSIZE 512 #define ELFHDR ((struct Elf *)0x10000) // scratch space void readsect(void*, unit32_t); void readsec(uint32_t, uint32_t, uint32_t); void bootmain(void) { struct Proghdr *ph, *eph; // read 1st page off disk readseg((uint32_t) ELFHDR, SECTSIZE*8, 0); . . // REST OF CODE . } 

我正在使用gdb介入我的代码,看看发生了什么。
我找到了bootmain 0x7d0a的地址,我在那里放了一个断点。

 b *0x7d0a c 

以上2个命令: b放置断点, c运行直到达到断点。

我可以看到我按预期0x7d0a0x7d0a 。 然后在几个命令后,我可以看到函数参数被推送到堆栈作为参数。 并呼吁readseg

 0x7d0f push $0x0 // 0 0x7d11 push $0x1000 // 512*8 = 4096 B 0x7d16 push $0x10000 // 64 KB 0x7d1b call 0x7cd1 

我的问题是:我如何单步执行此function? 使用si下一个命令只是让我进入readseg函数。 我不想介入,而是要跨过去。 我尝试在下一个命令下面设置一个断点:

 b *0x7d21 c 

但它永远不会回归……

也许我应该在不同的地址上设置断点? 不确定。 然而,这是一种解决方法,我宁愿使用步骤命令,我在这里的文档中找不到。

si的“跨越”类似物称为nexti (也缩写为ni )。 这将执行单个汇编指令,但跳过调用。