首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果目标在另一台机器中编译,则在Simics 2021.24中不工作的断点

如果目标在另一台机器中编译,则在Simics 2021.24中不工作的断点
EN

Stack Overflow用户
提问于 2021-11-02 14:08:25
回答 2查看 120关注 0票数 1

我在Ubuntu20.04LTS中编译了一个helloworld程序,我想在Simics中调试它,我在main上设置了一个断点,但是Simics不会崩溃。

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

根据我的理解,Simics可能会在main上崩溃,不管二进制程序最初的构建环境是什么。我不知道为什么它在我的案子里不成立。

以下是我的步骤:

步骤1:在Ubuntu 20.04中编译helloworld

代码语言:javascript
复制
$ 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:

代码语言:javascript
复制
simics> enable-debugger
simics> add-symbol-file a.out
simics> bp.source_location.break main
simics> run
running>

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

预期:应该触发main上的断点

但是got:根本没有触发断点

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-12-22 08:27:34

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

一些事情,比如:

代码语言:javascript
复制
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
...

这应该停止时,主要运行在程序中。

代码语言:javascript
复制
simics> bt
simics> list

强制标记#IAmIntel

票数 1
EN

Stack Overflow用户

发布于 2021-11-05 10:23:48

我试图禁用ASLR并使用add-symbol-file运行relocation-address,它可以工作。

Simics:

代码语言:javascript
复制
simics> add-symbol-file pie-main.elf relocation-address = 0x555555554000
simics> bp.source_location.break main

串行控制台:

代码语言:javascript
复制
# echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
# ./pie-main
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69811845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档