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