代码之家  ›  专栏  ›  技术社区  ›  Dmitry Chirkin

vxWorks内核外壳功能

  •  1
  • Dmitry Chirkin  · 技术社区  · 8 年前

    我的车上安装了一个汽车导航系统,我发现它运行的是vxWorks6.9.3。

    我试图实现的是改变导航系统的一些隐藏设置。

    小介绍:导航系统可以通过蓝牙连接到互联网。我设置了小型web服务器,它唯一能做的就是检测客户端的IP地址。我从主机浏览器打开了那个网站,并检测到主机的ip地址。然后我就可以扫描它打开的网络端口了。

    原来它有23个端口打开。我可以在那里远程登录。 它不需要任何密码或登录,并报告操作系统信息:Windriver vxWorks 6.9.3

    我可以在这里运行各种命令,检查文件系统等。 但我不知道该如何改变。我甚至找到了从USB密钥向设备传输文件的方法。

    我发现我想要更改的所有设置都存储在.sqlite文件中。其中一些是gzipped的,并且有带有校验和的.inf文件。校验和计算的算法是专有的,所以我不能将.sqlite文件从设备传输到usb密钥,改变一些东西,而不是gzip并计算新的校验和。

    我认为OS可以通过某种方式与内存中的.sqlite文件交互,而无需解压缩它们。 所以,有什么方法可以使用vxWorks内核shell在设备上打开sqlite shell吗? 如果是,那将是完美的,足以实现我想要的一切。

    如果这不能实现,有人能给我一些建议,告诉我vxWorks内核shell有什么可能性吗?

    1 回复  |  直到 8 年前
        1
  •  3
  •   Lukas Thomsen    8 年前

    VxWorks shell上可用的命令取决于加载的应用程序和内核本身。从shell中,您可以调用VxWorks加载的所有“公共函数”。您以类似C的语法输入函数调用,shell解析参数,将它们推到堆栈上,并跳转到函数的地址,就像C中的普通函数调用一样。

    检查函数是否存在的有用函数是 lkup "foo" 它将列出包含 "foo" 在他们的名字中(区分大小写!)。但它不会告诉您任何关于请求的参数的信息。如果您没有通过shell将所有参数传递给函数,则在执行函数调用之前,intepreter会将一些零推送到堆栈上。这可能导致非常奇怪的结果,甚至可能损坏您的系统(取决于功能)。。。

    如果您能够加载程序,则可能需要使用 symLib 迭代VxWorks的所有符号 sysSymTbl .