我有一个 C 程序(有充分的理由)分配内存,向其中复制一些代码,使用 mprotect() 赋予它执行权限,然后调用该代码。是的,我知道这是不便携且不安全的,但这是有充分理由的。无论如何,我需要通过汇编代码(使用 si 命令)单步执行 gdb,但它不会让我 - 它一直说:“没有函数包含所选帧的程序计数器”
有没有办法强制 gdb 执行这段代码?我应该使用另一个调试器来代替这种类型的东西吗?
谢谢!
似乎您希望add-symbol-file', or
add-symbol-file-from-memory' 命令让 gdb 知道已复制到该内存位置的代码。
您应该能够display/i $pc
在开始之前使用si
/来完成您的代码stepi
。这告诉它在每次打印提示之前显示当前指令的反汇编。
该stepi
命令本身不需要任何符号,并且在您描述的场景中应该可以正常工作(尽管我实际上并没有检查它是否确实如此)。
你的问题真的与stepi
吗?显示调试会话的相关部分可能会使您的问题得到更好的答案。