1

从命令行执行模拟下的二进制文件?建议使用

bp.hap.run-until name = X86_HLT_Instr

这是我的完整脚本:

run-command-file "./targets/qsp-x86/firststeps-no-network.simics"
$start = (load-binary ./small)
%rip = $start
%rsp = 0x40001000
%bp.hap.run-until name = X86_HLT_Instr

这是我的运行方式:

./simics t1.simics 

这是错误消息:

Parse error: Empty name space
[/home/kcc/simics-projects/t1/t1.simics:5] error parsing command
Error - interrupting script.

另外,我应该阅读什么来更好地理解这种语法?

4

2 回答 2

2

看起来错误消息是指“bp.hap.run-until”之前的额外“%”符号

附加说明:“%”指的是 CPU 寄存器。因此,%rip 是 CPU 的指令指针寄存器;%rsp 是 CPU 的堆栈指针寄存器。

于 2021-07-14T06:43:16.183 回答
1

请注意,这组命令都依赖于当前选择的处理器是正确的。如果你想更健壮,你可以使用特定的处理器对象。该特定脚本仅使用一个处理器设置模拟,因此它可以工作。但是,如果您要使用具有多个内核的其他设置,则可能会更精确。$

您还应该最好使用"%simics%/.."来引用其他脚本。您当前的代码假定您的脚本位于 Simics 项目的顶层。

run-command-file "%simics%/targets/qsp-x86/firststeps-no-network.simics"

$start = ($system.mb.cpu0.core[0][0].load-binary ./small)
$system.mb.cpu0.core[0][0].set-pc $start   ## Special command for the PC
$system.mb.cpu0.core[0][0].write-reg "rsp" 0x40001000
bp.hap.run-until ...

但是,请注意默认处理器内核中没有 hap X86_HLT_Instr。

要查看所有 haps,请使用

simics> list-haps

也许标记代码结尾的更好方法是使用魔术指令?

于 2021-07-14T11:54:05.537 回答