如果目标是在不同的机器上编译的,断点在 Simics 2021.24 中不起作用

Breakpoint not working in Simics 2021.24 if the target was compiled in a different machine

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

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

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

这是我的步骤:

第一步:在Ubuntu20.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 上的断点
但是得到:根本没有触发断点

我尝试用 relocation-address 禁用 ASLR 和 运行 add-symbol-file,它有效。

西米克斯:

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

看起来这是 运行 在目标上的 Linux 进程中。要在用户级别调试软件,您需要启用 OS 感知,以便调试器可以跟踪该特定软件何时处于 运行。当 OS 感知处于活动状态时,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