本文介绍了从命令行执行模拟中的二进制文件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
有没有办法从命令行在Simics模拟下执行简单的Linux二进制文件?
类似于
simics -some-flags ./a.out
推荐答案
现在SIMICS中没有现成的应用程序模式(或系统调用模式)。
根据需要,可以使用_start
作为入口点,或许还可以使用链接器脚本来设置自定义布局,在没有标准库的情况下将有效负载编译为ELF文件。这可以作为一种bare-metal
模式工作-Simics有load-binary
命令将ELF文件放入物理内存并返回其起始地址-只需设置%rip = <start-address>
并开始模拟。整个脚本可能如下所示:$start = (load-binary $elf_file)
%rip = $start
%rsp = 0x40001000
bp.hap.run-until name = X86_HLT_Instr
假设应用程序在其_start
末尾有hlt
指令。如果不需要hlt
,则Simics有所谓的魔术指令-请包含Simics安装中的simics-6.0.xxsrcincludesimicsmagic-instruction.h
,然后在源代码中使用MAGIC_BREAKPOINT
宏。然后,在上面的脚本中,不使用run-until
使用enable-magic-breakpoint
-Simics在模拟过程中任何时候点击魔术指令都会停止。您可以在同一脚本中手动将$elf_file
设置为应用程序路径,也可以在命令行中调用Simics时将$elf_file
设置为应用程序路径,如下所示:
./simics -e $elf_file=$HOME/my-new-project/a.out ...
printf
和好友,SIMICS有一个简单的tty控制台模型,它接受对地址空间中特定(可定制)位置的字节写入,这样putchar
可以被重写以使用此地址,并且标准函数的睡觉可以保持原样。另一个解决方法是打印到内存,最后将其转储到如下文件:
(pselect)->physical_memory.save-file mem.txt 0x40001000 1000 -overwrite
0x40001000
处的1000个字节转储到mem.txt
文件。这通常是以批处理模式运行某些测试并稍后浏览其日志的最快方式。最后,可以将应用程序编译为UEFI有效负载,并将其与SMTH配对,如https://slimbootloader.github.io/supported-hardware/qsp.html。经过一些努力,它可以同时运行在Simics和真实硬件上(仍处于裸机模式)。 这篇关于从命令行执行模拟中的二进制文件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!