1

我在 Ubuntu 20.04 LTS 中编译了一个 helloworld 程序,我想在 Simics 中调试它,我在 上设置了一个断点main,但 Simics 不会中断。

我尝试在 QSP-x86 中编译它,该二进制文件可以工作。

据我了解,main无论二进制文件的原始构建环境是什么,Simics 都可以中断。我不知道为什么它在我的情况下没有破裂。

这是我的步骤:

第 1 步:在 Ubuntu 20.04 中编译 helloworld

$ cat a.c
#include <stdio.h>

int main()
{
  printf("Hello world!\n");
  return 0;
}
$ gcc -g a.c

步骤 2:复制a.out到 Simics 项目根目录并上传到 QSP-x86 (firststeps.simics)

第 3 步:

simics> enable-debugger
simics> add-symbol-file a.out
simics> bp.source_location.break main
simics> run
running>

第 4 步:a.out从模拟的串行控制台运行

预期:main应该触发
断点但得到:根本没有触发断点

4

2 回答 2

1

看起来这是在目标上的 Linux 进程中运行的。要在用户级别调试软件,您需要启用操作系统感知,以便调试器可以跟踪该特定软件何时运行。当操作系统感知处于活动状态时,ASLR 对用户级进程应该无关紧要,因为代码使用的虚拟地址在任何情况下都是相同的,即使物理页面被移动。

就像是:

simics> enable-tracker
simics> board.software.enable-tracker
simics> add-symbol-file prog.elf context-query = "name='prog.elf'"
simics> bp.source_location.break main context-query = "name='prog.elf'"
simics> bp.list
simics> bp.show <<bp number>>
simics> board.serconsole.con.input "prog.elf\n"
simics> r
...

当 main 在程序中运行时,这应该停止。

simics> bt
simics> list

强制性标记#IAmIntel

于 2021-12-22T08:27:34.213 回答
0

我试图禁用 ASLR 并运行add-symbol-filerelocation-address它可以工作。

模拟人生:

simics> add-symbol-file pie-main.elf relocation-address = 0x555555554000
simics> bp.source_location.break main

串行控制台:

# echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
# ./pie-main
于 2021-11-05T10:23:48.517 回答